Slim Select формирует собственную DOM-структуру поверх стандартного
<select>, полностью заменяя визуальное представление
нативного элемента набором переиспользуемых блоков. Каждый элемент
интерфейса получает набор CSS-классов, которые определяют его поведение,
состояние и позиционирование. Архитектура классов построена так, чтобы
обеспечить как базовую стилизацию, так и гибкую кастомизацию через
переопределение селекторов.
Корневой элемент Slim Select создаётся как обёртка вокруг исходного
<select> и получает основной класс:
ss-main — главный контейнер компонентаОн выступает в роли якоря для всей внутренней структуры. Внутри него
размещается визуальная часть селекта и скрытый оригинальный
<select>, который сохраняется для совместимости с
формами и нативными событиями.
Дополнительные классы состояния могут добавляться к корневому элементу:
ss-disabled — компонент заблокированss-open — выпадающий список открытss-multiple — режим множественного выбораss-single — одиночный выборЭти классы управляют внешним видом и логикой отображения без необходимости прямого обращения к внутренним узлам.
Отдельный блок внутри контейнера отвечает за отображение текущего состояния выбора:
ss-values — контейнер выбранных значенийss-placeholder — плейсхолдер, отображаемый при
отсутствии выбораss-single-selected — выбранное значение в режиме
одиночного выбораВ одиночном режиме значение отображается в компактной форме, тогда как в мультивыборе используется набор отдельных элементов.
При включённом множественном выборе Slim Select создаёт отдельные визуальные «токены» для каждого выбранного элемента:
ss-value — отдельное выбранное значениеss-value-text — текст внутри выбранного элементаss-value-delete — кнопка удаления выбранного
элементаСтруктура каждого выбранного элемента обычно выглядит как вложенная композиция:
Такой подход позволяет независимо стилизовать каждый компонент и управлять поведением удаления без затрагивания основной логики селекта.
Выпадающая часть интерфейса строится отдельно от основного контейнера и обычно рендерится в конце документа для удобства позиционирования:
ss-content — контейнер выпадающего спискаss-list — список опцийСостояние отображения списка управляется классами корневого элемента, однако сама структура списка остаётся независимой.
Каждая опция внутри выпадающего списка имеет собственный набор классов:
ss-option — базовый элемент опцииss-highlighted — подсвеченная (активная при навигации с
клавиатуры)ss-selected — выбранная опцияss-disabled — недоступная для выбора опцияВнутри опции обычно присутствует текстовый узел, но возможна кастомизация через шаблоны, добавляющая дополнительные элементы.
При использовании группировки Slim Select добавляет дополнительный уровень структуры:
ss-optgroup — контейнер группыss-optgroup-label — заголовок группыss-optgroup-options — список опций внутри группыГруппы визуально отделяются от обычных элементов списка и могут иметь отдельную стилизацию, включая отступы, линии-разделители и фиксированные заголовки.
Slim Select активно использует классы для отражения пользовательского взаимодействия:
ss-open-above — список открыт вверх (при нехватке места
снизу)ss-open-below — список открыт внизss-search — активирован режим поискаss-loading — идёт загрузка данныхЭти классы позволяют адаптировать поведение интерфейса под условия окружения без изменения логики компонента.
Если включён поиск, внутри выпадающего списка появляется отдельный элемент:
ss-search — контейнер поискаss-search-input — поле вводаПоле поиска интегрировано в структуру списка и влияет на фильтрацию элементов в реальном времени. Классы состояния позволяют стилизовать активный ввод, фокус и пустое состояние.
Внутренняя система Slim Select опирается на единый принцип: каждый функциональный узел получает отдельный класс, который не зависит от вложенности. Это обеспечивает:
Ключевые универсальные классы состояния:
ss-hide — скрытие элементаss-show — отображение элементаss-fade — анимация появления/исчезновения (если
включена тема с анимациями)Slim Select поддерживает переопределение стандартных классов через
параметр classNames. Эта система позволяет заменить любые
базовые селекторы на пользовательские без изменения логики работы
компонента.
Пример логики переопределения:
main — корневой контейнерcontent — выпадающий списокlist — список опцийoption — элемент опцииselected — выбранная опцияdisabled — заблокированная опцияopen — открытое состояниеПереопределение классов позволяет интегрировать Slim Select в существующие дизайн-системы, где уже используются строгие соглашения по неймингу CSS.
Классы Slim Select работают как система флагов, отражающих текущее состояние компонента. Один и тот же элемент может одновременно содержать несколько классов, например:
Комбинация классов формирует финальное поведение интерфейса, а CSS становится основным инструментом управления визуальной логикой.
Из-за плоской структуры классов приоритет стилей определяется исключительно специфичностью селекторов. Slim Select не использует глубоко вложенные селекторы, что снижает вероятность конфликтов, но требует аккуратного управления каскадом.
Типичные правила:
Такой подход делает систему предсказуемой при масштабировании интерфейса и подключении кастомных тем.