Визуальная часть календаря в Pikaday строится вокруг набора предопределённых CSS-классов, которые формируют структуру DOM и служат точками расширения для кастомизации. Каждый элемент интерфейса получает стабильный класс, не зависящий от конфигурации экземпляра, что делает стилизацию предсказуемой и изолированной от логики JavaScript.
Корневой контейнер календаря обычно получает класс:
pika-single — основной контейнер
календаряОн создаётся как абсолютный блок, который позиционируется относительно привязанного input-элемента. В зависимости от состояния дополнительно применяются модификаторы:
is-hidden — календарь скрытis-bound — календарь привязан к input
и управляется через событие фокуса/кликаЭти классы критичны для управления видимостью и поведением слоя.
Внутри pika-single формируется несколько логических
блоков:
pika-single
├── pika-lendar
│ ├── pika-title
│ ├── pika-table
│ └── pika-week (опционально)
Каждый из блоков отвечает за отдельную часть интерфейса и имеет собственную систему классов.
Блок заголовка календаря:
pika-title — контейнер шапки
календаряВнутри него находятся элементы управления месяцем и годом:
pika-label — отображение текущего
месяца и годаpika-prev — кнопка перехода к
предыдущему периодуpika-next — кнопка перехода к
следующему периодуЭти элементы являются интерактивными и управляют состоянием календаря
без необходимости внешнего вмешательства. Кнопки навигации часто
стилизуются через псевдоклассы :hover, :active
и :disabled (или через внутренние классы состояния, если
они добавлены кастомной логикой).
Особенность заключается в том, что pika-label часто
разбивается на две части (месяц и год), которые могут быть
переопределены через кастомные render-функции, но CSS-класс остаётся тем
же, что позволяет сохранять совместимость стилей.
Основная часть интерфейса — это таблица:
pika-table — таблица календарной
сеткиВнутри неё формируется стандартная HTML-таблица с ячейками дней. Каждая ячейка содержит кнопку:
pika-button — интерактивная кнопка
дняСостояния дней управляются через дополнительные классы:
is-today — текущая датаis-selected — выбранная датаis-disabled — недоступная для выбора
датаis-inrange — дата входит в диапазон
выбораis-startrange — начало диапазонаis-endrange — конец диапазонаЭти классы формируют основу для всех сценариев работы с диапазонами дат, включая выбор промежутков и визуальное выделение интервалов.
Дополнительные элементы календарной таблицы:
pika-week — отображение номера недели
(если включено)Этот элемент используется при необходимости отображать ISO-нумерацию недель. Он не активен по умолчанию и зависит от конфигурации.
Состояния календаря контролируются не только через внутреннюю логику, но и через CSS-модификаторы:
is-hidden
display: none или
visibilityis-bound
is-rtl (если используется
локализация)
Эти классы используются как глобальные переключатели поведения и не относятся к отдельным элементам интерфейса.
CSS-архитектура Pikaday предполагает каскадное переопределение. Базовые стили библиотеки задают минимальную визуальную структуру, тогда как пользовательские стили обычно накладываются поверх.
Типичный приём переопределения:
использование селекторов вида
.pika-single .pika-button
уточнение состояния через комбинации классов:
.pika-button.is-selected.pika-button.is-today.pika-button.is-disabledПриоритет состояния определяется специфичностью селектора, а не порядком DOM-элементов.
Некоторые классы изменяются динамически в зависимости от взаимодействия пользователя:
:hover)is-selectedis-inrange,
is-startrange, is-endrangeЭти изменения происходят полностью на стороне JavaScript-библиотеки и не требуют внешнего обновления DOM.
При работе со стилями Pikaday важна стабильность селекторов. Рекомендуется избегать привязки к структуре вложенности без классов состояния, поскольку DOM может меняться между версиями.
Наиболее устойчивые точки расширения:
.pika-single.pika-button.is-selected.is-disabled.pika-titleКомбинация этих классов позволяет реализовать полностью кастомные темы, включая тёмные режимы, компактные версии и адаптивные сетки без модификации JavaScript-кода.
При интеграции Pikaday в крупные проекты часто возникает проблема
конфликтов CSS. Основной риск связан с глобальными селекторами вроде
button или table.
Решение строится вокруг пространственной изоляции:
.pika-singleТакой подход позволяет встроить календарь в любые дизайн-системы без деградации внешнего вида.
При изменении шаблонов рендера (если используется кастомный rendering слой) классы Pikaday остаются ключевым механизмом синхронизации состояния. Даже при замене структуры HTML логика библиотеки продолжает ориентироваться на стандартные имена классов, что делает их контрактом между UI и логикой выбора дат.