Стилизация компонентов Choices.js построена вокруг модульной
структуры классов, отражающих внутреннее состояние виджета и его
визуальные состояния. Основной подход — изоляция каждого функционального
блока через BEM-подобную систему именования, где корневой класс
.choices выступает контейнером, а вложенные элементы
получают префиксную иерархию.
.choicesГлавная обёртка компонента задаётся классом:
.choices { }
Этот элемент формирует базовую структуру виджета и служит точкой привязки для всех последующих вложенных элементов. Через него задаются:
В большинстве реализаций именно .choices становится
основным селектором для кастомизации внешнего вида всего компонента.
CSS-архитектура Choices.js активно использует классы состояния, которые добавляются динамически через JavaScript.
.is-openАктивное раскрытие списка:
.choices.is-open { }
Отвечает за отображение выпадающего списка. Обычно управляет:
.is-focusedФокусировка на инпуте:
.choices.is-focused { }
Используется для визуального выделения активного компонента. Часто влияет на:
.is-disabledСостояние блокировки:
.choices.is-disabled { }
Применяется для полной деактивации взаимодействия:
.is-flippedИнверсия выпадающего списка:
.choices.is-flipped { }
Используется при нехватке места снизу. Меняет направление раскрытия dropdown вверх. Обычно сопровождается:
top/bottomChoices.js строит DOM иерархию, где каждый элемент имеет свой CSS-класс.
.choices__innerОсновной визуальный контейнер инпута:
.choices__inner { }
Функционально представляет собой оболочку для:
Часто именно здесь задаются:
.choices__inputПоле ввода поиска:
.choices__input { }
Используется в searchable режимах. Его поведение:
Типичные стили:
.choices__listУниверсальный контейнер списков:
.choices__list { }
Используется в нескольких контекстах:
.choices__list--singleКонтейнер для одиночного выбора:
.choices__list--single { }
Отображает текущее выбранное значение. Важные особенности:
.choices__list--multipleКонтейнер для множественного выбора:
.choices__list--multiple { }
Содержит набор тегов (chips). Основные свойства:
.choices__list--dropdownВыпадающий список:
.choices__list--dropdown { }
Ключевой визуальный блок компонента. Управляет:
Также может иметь модификаторы состояния:
.is-active — отображение.is-hidden — скрытие.choices__itemБазовый элемент списка:
.choices__item { }
Используется для:
.choices__item--selectableВыбираемый элемент:
.choices__item--selectable { }
Добавляет интерактивность:
.choices__item--disabledНедоступный элемент:
.choices__item--disabled { }
Применяется к:
Обычно визуально приглушается и исключается из взаимодействия.
В режиме multiple каждый выбранный элемент превращается в отдельный визуальный компонент.
.choices__item--choiceЭлемент выбора в dropdown:
.choices__item--choice { }
Представляет опцию списка. Может комбинироваться с состояниями:
.is-selected.is-highlighted.choices__item--selectable.is-highlightedАктивно выделенный элемент:
.choices__item--selectable.is-highlighted { }
Используется при навигации клавиатурой или hover:
.choices__buttonКнопка удаления элемента:
.choices__button { }
Используется внутри тегов multiple-режима. Основные особенности:
Состояния:
.choices__groupГруппа опций:
.choices__group { }
Используется для логической организации списка. Включает:
.choices__headingЗаголовок группы:
.choices__heading { }
Служит для визуального разделения секций dropdown. Часто стилизуется как:
CSS Choices.js активно использует классы для управления отображением без inline-стилей.
.is-activeУниверсальный переключатель видимости:
.choices__list--dropdown.is-active { }
Отвечает за показ dropdown. Обычно связан с:
.is-hiddenСкрытое состояние:
.choices__list--dropdown.is-hidden { }
Используется для полного исключения элемента из визуального потока.
Компонент тесно связан с input-поведенческими состояниями.
.choices.is-focusedCSS Choices.js построен так, чтобы легко переопределяться внешними стилями:
!important в базовой
версииЭто позволяет:
Архитектура CSS в Choices.js рассчитана на расширение:
Компонент остаётся предсказуемым при изменении темы, так как все ключевые состояния выражены через классы, а не inline-стили или сложные селекторы.