Темная тема в пользовательских интерфейсах на базе Slim Select
строится вокруг переопределения стандартных CSS-стилей библиотеки и
согласования цветовой палитры с общей дизайн-системой проекта. Поскольку
Slim Select генерирует собственную DOM-структуру поверх стандартного
<select>, контроль внешнего вида полностью
сосредоточен в CSS-слое, что делает реализацию тёмного оформления гибкой
и предсказуемой.
Slim Select использует набор классов, которые формируют визуальные части компонента:
.ss-main — основной контейнер.ss-single — однострочный режим выбора.ss-multi — мультивыбор.ss-content — выпадающий список.ss-list — список опций.ss-option — отдельный элемент опции.ss-value — выбранное значение.ss-search — поле поиска внутри dropdownТемная тема достигается переопределением именно этих классов.
Темная тема в UI-компонентах строится на трех ключевых параметрах:
Для Slim Select важно дополнительно учитывать состояния:
Типичная цветовая схема:
:root {
--ss-bg: #1e1e2f;
--ss-bg-light: #2a2a3d;
--ss-border: #3a3a55;
--ss-text: #e6e6f0;
--ss-muted: #a0a0b3;
--ss-accent: #6c7cff;
}
Эта структура переменных позволяет централизованно управлять стилем и легко переключаться между темами.
Главный элемент .ss-main определяет общий внешний вид
селекта:
.ss-main {
background-color: var(--ss-bg);
border: 1px solid var(--ss-border);
color: var(--ss-text);
border-radius: 8px;
transition: background-color 0.2s ease, border-color 0.2s ease;
}
При фокусе важно усилить контраст:
.ss-main:focus,
.ss-main.ss-open {
border-color: var(--ss-accent);
box-shadow: 0 0 0 2px rgba(108, 124, 255, 0.25);
}
Контейнер .ss-content формирует dropdown-область:
.ss-content {
background-color: var(--ss-bg-light);
border: 1px solid var(--ss-border);
border-radius: 8px;
margin-top: 6px;
overflow: hidden;
}
Список опций:
.ss-list {
background-color: transparent;
}
Каждая опция .ss-option требует отдельной стилизации
состояний:
.ss-option {
color: var(--ss-text);
padding: 10px 12px;
cursor: pointer;
transition: background-color 0.15s ease;
}
Hover-состояние:
.ss-option:hover {
background-color: rgba(255, 255, 255, 0.06);
}
Выбранный элемент:
.ss-option.ss-selected {
background-color: rgba(108, 124, 255, 0.2);
color: #ffffff;
}
Неактивный элемент:
.ss-option.ss-disabled {
color: var(--ss-muted);
cursor: not-allowed;
opacity: 0.6;
}
Slim Select поддерживает встроенный search input, который требует отдельного оформления:
.ss-search input {
width: 100%;
padding: 10px 12px;
background-color: var(--ss-bg);
border: 1px solid var(--ss-border);
color: var(--ss-text);
outline: none;
border-radius: 6px;
}
Фокус поиска:
.ss-search input:focus {
border-color: var(--ss-accent);
box-shadow: 0 0 0 2px rgba(108, 124, 255, 0.2);
}
В режиме multi-select выбранные элементы отображаются как “теги”:
.ss-value {
background-color: rgba(108, 124, 255, 0.15);
color: var(--ss-text);
padding: 4px 8px;
border-radius: 6px;
margin: 2px;
display: inline-flex;
align-items: center;
}
Кнопка удаления значения:
.ss-value-delete {
margin-left: 6px;
cursor: pointer;
color: var(--ss-muted);
}
.ss-value-delete:hover {
color: #ffffff;
}
Отключённый селект требует явного визуального снижения контраста:
.ss-main.ss-disabled {
background-color: #151522;
border-color: #2a2a3d;
color: var(--ss-muted);
opacity: 0.7;
cursor: not-allowed;
}
При большом количестве элементов список становится прокручиваемым:
.ss-content {
max-height: 260px;
overflow-y: auto;
}
Стилизация скроллбара в темной теме:
.ss-content::-webkit-scrollbar {
width: 8px;
}
.ss-content::-webkit-scrollbar-track {
background: #1a1a28;
}
.ss-content::-webkit-scrollbar-thumb {
background: #3a3a55;
border-radius: 4px;
}
.ss-content::-webkit-scrollbar-thumb:hover {
background: #4a4a6a;
}
Темная тема часто воспринимается “тяжелее”, поэтому важно сохранить лёгкие переходы:
.ss-content {
opacity: 0;
transform: translateY(-4px);
transition: opacity 0.15s ease, transform 0.15s ease;
}
.ss-open .ss-content {
opacity: 1;
transform: translateY(0);
}
При наличии системного переключателя темы можно использовать data-атрибуты:
[data-theme="dark"] {
--ss-bg: #1e1e2f;
--ss-bg-light: #2a2a3d;
--ss-border: #3a3a55;
--ss-text: #e6e6f0;
--ss-muted: #a0a0b3;
}
И переключение без изменения самих стилей Slim Select:
[data-theme="dark"] .ss-main {
background-color: var(--ss-bg);
}
В плотных интерфейсах темная тема часто требует уменьшения визуального шума:
.ss-main {
border-width: 1px;
}
.ss-option {
padding: 8px 10px;
}
.ss-content {
border-radius: 6px;
}
При проектировании темной темы важно удерживать минимальный коэффициент контрастности между текстом и фоном. Для Slim Select это особенно критично в элементах:
.ss-option.ss-search input.ss-valueПовышение читаемости достигается за счет:
Slim Select хорошо сочетается с модульной системой CSS, где каждая часть интерфейса управляется отдельной переменной или слоем:
.ss-main,
.ss-content,
.ss-option,
.ss-search input,
.ss-value {
transition: all 0.2s ease;
}
Такой подход позволяет масштабировать тему без переработки структуры DOM и без вмешательства в JavaScript-логику компонента.