Стилизация интерфейса Tom Select строится вокруг набора предсказуемых CSS-классов, которые отражают внутреннюю структуру компонента: контейнер, поле ввода, выпадающий список, элементы выбора, состояния взаимодействия. Архитектура классов ориентирована на возможность полной замены внешнего вида без изменения логики работы.
Базовая модель состоит из трёх ключевых уровней:
Каждый уровень имеет собственные классы состояния и вложенные элементы.
Основной элемент, создаваемый библиотекой, получает класс:
ts-wrapperОн служит корневым узлом всей структуры. Через него выполняется управление состояниями всего компонента: фокус, блокировка, загрузка, мультивыбор.
Часто вместе с ним применяются модификаторы:
focus — компонент в активном состоянииdisabled — компонент недоступенloading — выполняется асинхронная загрузка данныхПример структуры:
<div class="ts-wrapper focus">
Контейнер обеспечивает изоляцию стилей и предотвращает конфликт с глобальными правилами страницы.
Центральный элемент взаимодействия:
ts-controlОн содержит выбранные значения, поле ввода и элементы управления очисткой.
Внутренняя структура обычно включает:
input)item)Состояния control:
ts-control.focus — активное взаимодействиеts-control.disabled — заблокированное состояниеТиповая структура:
<div class="ts-control">
<div class="item">Значение</div>
<input type="text">
</div>
При мультивыборе каждый выбранный элемент получает класс:
itemДополнительные состояния:
active — элемент выделенdisabled — элемент нельзя удалитьcreate — созданный вручную тег (в режиме создания новых
значений)Типовая структура:
<div class="item active">
JavaScript
<span class="remove">×</span>
</div>
Класс item является ключевой точкой кастомизации тегов,
особенно при построении интерфейсов с чипами или метками.
Поле ввода внутри control не имеет отдельного уникального класса по умолчанию, но часто стилизуется через вложенность:
.ts-control inputОсобенности поведения:
Контейнер списка вариантов:
ts-dropdownОн располагается отдельно от control и обычно позиционируется абсолютно.
Содержит два ключевых блока:
dropdown-contentСостояния:
active — список открытhidden — список скрытПример:
<div class="ts-dropdown active">
Каждый вариант в списке имеет класс:
optionСостояния опций:
active — наведение или клавиатурный фокусselected — уже выбранное значениеdisabled — недоступная опцияПример:
<div class="option selected active">
TypeScript
</div>
Стилизация опций определяет поведение всей системы автодополнения и навигации.
Фокусировка компонента управляется через:
focus на ts-wrapperИспользуется для:
Класс:
disabledПрименяется к wrapper и control одновременно.
Эффекты:
Класс:
loadingИспользуется при асинхронной подгрузке опций.
Типичные эффекты:
В режиме поиска ввод пользователя влияет на:
optionЧасто используется класс:
no-results — отсутствие совпаденийПример структуры:
<div class="no-results">
Ничего не найдено
</div>
Основные классы:
hidden — элемент скрытshow — элемент отображается (в некоторых
конфигурациях)Dropdown может получать стили:
overflow-y: autoCSS-классы напрямую не всегда участвуют, но структура
ts-dropdown позволяет точно контролировать поведение
списка.
Стилизация Tom Select часто строится через переопределение стандартных классов:
.ts-wrapper.ts-control.ts-dropdown.option.itemПодходы:
Используется сброс стандартных стилей и создание новой визуальной системы:
.ts-wrapper {
border: none;
background: transparent;
}
Фокус:
.ts-wrapper.focus .ts-control {
border-color: #4a90e2;
}
Выбор:
.option.selected {
background: #eef5ff;
}
Структура компонентов предполагает высокую вложенность, поэтому используются специфичные селекторы:
.ts-wrapper .ts-control input.ts-dropdown .option.active.ts-wrapper.disabled .itemПравильное использование специфичности критично для предотвращения конфликтов с глобальными стилями UI-библиотек.
Механизм состояний позволяет строить темы без изменения JavaScript-логики:
Пример:
.ts-wrapper.compact .ts-control {
min-height: 28px;
}
CSS-классы Tom Select часто адаптируются под:
.form-controlОсновная стратегия — не менять HTML, а переопределять классы через CSS-слои.
Компонент активно изменяет классы в runtime:
focus при кликеactive у опцийselectedloading при запросахЭто делает CSS не статичным, а реактивным слоем интерфейса, зависящим от состояния данных и взаимодействий пользователя.
При работе с большими проектами часто возникают конфликты, решаемые через:
.ts-wrapper.ts-wrapper:not() для исключенийПример:
.form .ts-wrapper:not(.disabled) .ts-control {
cursor: text;
}
При использовании нескольких селекторов на странице каждый экземпляр
полностью изолирован через ts-wrapper. Это позволяет:
Помимо стандартных классов, часто добавляются пользовательские:
is-smallis-largehas-erroris-successОни накладываются поверх базовой структуры Tom Select и позволяют интегрировать компонент в системы валидации форм и дизайн-токены.