@skem9/dselect
Version:
Dropdown select box for bootstrap 5 with search, multiple, tag and image support
334 lines (321 loc) • 10.7 kB
CSS
.dselect-wrapper {
position: relative;
}
.dselect-wrapper .form-select {
padding-left: 0.75rem;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 0.25rem;
text-align: left;
background-color: var(--bs-body-bg, #fff);
border: 1px solid var(--bs-border-color, var(--bs-border-color));
min-height: calc(1.5 * 1em + 0.75rem + 2px);
}
.dselect-wrapper .form-select.show {
border-color: rgb(134, 182.5, 254);
outline: 0;
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
}
.dselect-wrapper .form-select.dselect-clearable {
padding-right: 3.25rem;
}
.dselect-wrapper .form-select.form-select-sm {
padding-left: 0.5rem;
min-height: calc(1.5 * 1em + 0.5rem + 2px);
}
.dselect-wrapper .form-select.form-select-sm.dselect-clearable {
padding-right: 3.125rem;
}
.dselect-wrapper .form-select.form-select-lg {
padding-left: 1rem;
min-height: calc(1.5 * 1em + 1rem + 2px);
}
.dselect-wrapper .form-select.form-select-lg.dselect-clearable {
padding-right: 3.375rem;
}
.dselect-wrapper .dropdown-menu {
padding: 0.375rem;
width: 100%;
max-width: 100%;
background-color: var(--bs-dropdown-bg, var(--bs-body-bg));
border: var(--bs-border-width) solid var(--bs-dropdown-border-color, var(--bs-border-color-translucent));
border-radius: var(--bs-border-radius);
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
min-width: 10rem;
margin: 0.125rem 0 0;
color: var(--bs-dropdown-color, var(--bs-body-color));
}
.dselect-wrapper .dropdown-menu > .d-flex.flex-column {
gap: 0.375rem;
}
.dselect-wrapper .form-select-sm + .dropdown-menu {
padding: 0.25rem;
font-size: 0.875rem;
}
.dselect-wrapper .form-select-lg + .dropdown-menu {
padding: 0.5rem;
font-size: 1.25rem;
}
.dselect-wrapper .dropdown-item,
.dselect-wrapper .dropdown-header {
padding: 0.25rem 0.375rem;
background-color: transparent;
border: none;
color: var(--bs-dropdown-link-color, var(--bs-body-color));
text-decoration: none;
white-space: nowrap;
width: 100%;
text-align: left;
}
.dselect-wrapper .dropdown-item:hover, .dselect-wrapper .dropdown-item:focus,
.dselect-wrapper .dropdown-header:hover,
.dselect-wrapper .dropdown-header:focus {
background-color: var(--bs-dropdown-link-hover-bg, var(--bs-tertiary-bg));
color: var(--bs-dropdown-link-hover-color, var(--bs-body-color));
}
.dselect-wrapper .dropdown-item.active,
.dselect-wrapper .dropdown-header.active {
background-color: var(--bs-dropdown-link-active-bg, #0d6efd);
color: var(--bs-dropdown-link-active-color, #fff);
}
.dselect-wrapper .dropdown-item.dselect-highlighted,
.dselect-wrapper .dropdown-header.dselect-highlighted {
background-color: var(--bs-dropdown-link-hover-bg, var(--bs-tertiary-bg));
color: var(--bs-dropdown-link-hover-color, var(--bs-body-color));
outline: 2px solid var(--bs-primary, #0d6efd);
outline-offset: -2px;
}
.dselect-wrapper .dropdown-item:disabled,
.dselect-wrapper .dropdown-header:disabled {
color: var(--bs-dropdown-link-disabled-color, var(--bs-tertiary-color));
pointer-events: none;
background-color: transparent;
}
.dselect-wrapper .form-select-sm + .dropdown-menu .dropdown-item,
.dselect-wrapper .form-select-sm + .dropdown-menu .dropdown-header {
padding: calc(0.25rem - 1px) 0.25rem;
}
.dselect-wrapper .form-select-lg + .dropdown-menu .dropdown-item,
.dselect-wrapper .form-select-lg + .dropdown-menu .dropdown-header {
padding: 0.25rem 0.5rem;
}
.dselect-wrapper .form-control {
border-radius: calc(0.375rem - 1px);
box-shadow: 0 0 0 0.005rem rgba(13, 110, 253, 0.25) ;
border-color: var(--bs-border-color, var(--bs-border-color)) ;
background-color: var(--bs-body-bg, var(--bs-body-bg));
color: var(--bs-body-color, var(--bs-body-color));
padding: 0.25rem calc(0.375rem - 1px);
font-size: inherit;
}
.dselect-wrapper .form-control:focus {
border-color: rgb(134, 182.5, 254);
}
.dselect-wrapper .form-select-sm + .dropdown-menu .form-control {
padding: calc(0.25rem - 1px) calc(0.25rem - 1px);
}
.dselect-wrapper .form-select-lg + .dropdown-menu .form-control {
padding: 0.25rem calc(0.5rem - 1px);
}
.dselect-wrapper .dselect-no-results {
padding: 0.25rem 0.375rem;
color: var(--bs-secondary-color, var(--bs-secondary-color));
font-style: italic;
text-align: center;
}
.dselect-wrapper .form-select-sm + .dropdown-menu .dselect-no-results {
padding: calc(0.25rem - 1px) 0.25rem;
}
.dselect-wrapper .form-select-lg + .dropdown-menu .dselect-no-results {
padding: 0.25rem 0.5rem;
}
.dselect-wrapper .dselect-tag {
background-color: var(--bs-secondary, #6c757d);
color: var(--bs-white, #fff);
padding-left: calc(0.5rem + 14px);
padding-right: 0.5rem;
padding-top: 0.125rem;
padding-bottom: 0.125rem;
border-radius: 0.375rem;
height: calc(1.5 * 1rem);
line-height: calc(1.5 * 1rem - 1px);
position: relative;
opacity: 0.8;
display: inline-flex;
align-items: center;
font-size: 0.875rem;
transition: opacity 0.3s ease;
}
@media (prefers-reduced-motion: reduce) {
.dselect-wrapper .dselect-tag {
transition: none;
}
}
.dselect-wrapper .dselect-tag:hover {
opacity: 1;
}
.dselect-wrapper .form-select-sm .dselect-tag {
height: auto;
line-height: inherit;
font-size: multiply(0.875rem, 0.85);
padding-left: calc(0.375rem + 12px);
padding-right: 0.375rem;
}
.dselect-wrapper .form-select-lg .dselect-tag {
height: calc(1.5 * 1.25rem);
line-height: calc(1.5 * 1.25rem);
font-size: 1rem;
}
.dselect-wrapper .dselect-tag-remove {
position: absolute;
left: 0.25rem;
top: 50%;
margin-top: -7px;
color: rgba(255, 255, 255, 0.35);
cursor: pointer;
transition: color 0.15s ease-in-out;
}
@media (prefers-reduced-motion: reduce) {
.dselect-wrapper .dselect-tag-remove {
transition: none;
}
}
.dselect-wrapper .dselect-tag-remove:hover {
color: #fff;
}
.dselect-wrapper .dselect-placeholder {
color: var(--bs-secondary-color, var(--bs-secondary-color));
font-style: italic;
}
.dselect-wrapper .dropdown-header ~ .dropdown-item {
padding-left: 0.75rem;
padding-right: 0.75rem;
}
.dselect-wrapper .form-select-sm + .dropdown-menu .dropdown-header {
font-size: 0.85em;
}
.dselect-wrapper .form-select-sm + .dropdown-menu .dropdown-header ~ .dropdown-item {
padding-left: 0.5rem;
padding-right: 0.5rem;
}
.dselect-wrapper .form-select-lg + .dropdown-menu .dropdown-header {
font-size: 0.85em;
}
.dselect-wrapper .form-select-lg + .dropdown-menu .dropdown-header ~ .dropdown-item {
padding-left: 1rem;
padding-right: 1rem;
}
.dselect-wrapper .dselect-clear {
position: absolute;
padding: 0;
border: 0;
box-shadow: none;
background: transparent;
top: 0;
bottom: 0;
right: 2.25rem;
display: flex;
align-items: center;
color: var(--bs-secondary-color, var(--bs-secondary-color));
cursor: pointer;
z-index: 3;
}
.dselect-wrapper .dselect-clear:hover {
color: var(--bs-body-color, #212529);
}
.dselect-wrapper .dselect-clear svg {
width: 0.625rem;
height: 0.625rem;
}
.dselect-wrapper [data-dselect-text=""] ~ .dselect-clear {
display: none;
}
.was-validated .form-select:invalid + .dselect-wrapper .form-select, .form-select.is-invalid + .dselect-wrapper .form-select {
border-color: #dc3545;
}
.was-validated .form-select:invalid + .dselect-wrapper .form-select.show, .was-validated .form-select:invalid + .dselect-wrapper .form-select:focus, .form-select.is-invalid + .dselect-wrapper .form-select.show, .form-select.is-invalid + .dselect-wrapper .form-select:focus {
box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
}
.was-validated .form-select:valid + .dselect-wrapper .form-select, .form-select.is-valid + .dselect-wrapper .form-select {
border-color: #198754;
}
.was-validated .form-select:valid + .dselect-wrapper .form-select.show, .was-validated .form-select:valid + .dselect-wrapper .form-select:focus, .form-select.is-valid + .dselect-wrapper .form-select.show, .form-select.is-valid + .dselect-wrapper .form-select:focus {
box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
}
.dselect-wrapper .dropdown-item:focus-visible,
.dselect-wrapper .dropdown-item:focus-within {
color: var(--bs-dropdown-link-active-color, #fff);
text-decoration: none;
background-color: var(--bs-dropdown-link-active-bg, #0d6efd);
outline: none ;
border-style: none ;
border-color: transparent ;
}
.dselect-wrapper .dselect-items {
max-height: 360px;
overflow-y: auto;
overflow-x: hidden;
}
.input-group-lg > .dselect-wrapper > .form-select {
padding: 0.5rem 1rem;
font-size: 1.25rem;
border-radius: var(--bs-border-radius-lg);
}
.input-group-sm > .dselect-wrapper > .form-select {
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
border-radius: var(--bs-border-radius-sm);
}
.input-group-lg > .dselect-wrapper > .form-select,
.input-group-sm > .dselect-wrapper > .form-select {
padding-right: 3rem;
}
.input-group > .dselect-wrapper {
position: relative;
flex: 1 1 auto;
width: 1%;
min-width: 0;
}
.input-group > .dselect-wrapper:focus {
z-index: 5;
}
.input-group > .dselect-wrapper:last-child > .form-select {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.input-group > .dselect-wrapper:nth-last-child(n+3) > .form-select {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group > .form-select:first-child + .dselect-wrapper:not(:last-child) > .form-select {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group.has-validation > .dselect-wrapper:nth-last-child(n+4) > .form-select {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group.has-validation > .dselect-wrapper:not(:nth-last-child(n+4)) > .form-select {
border-top-right-radius: 0.375rem;
border-bottom-right-radius: 0.375rem;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.dselect-wrapper .d-none {
display: none ;
}
/*
.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),
.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,
.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select,
.input-group.has-validation > :nth-last-child(n+3):not(.dselect-wrapper) + .form-selct
.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),
.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,
.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select
*/
/*# sourceMappingURL=dselect.css.map */