Flatpickr формирует календарь как набор вложенных DOM-узлов, где каждый уровень управляется набором предсказуемых CSS-классов. Центральный контейнер всегда создаётся динамически и привязывается к инпуту или отдельному контейнеру в режиме inline.
Ключевой корневой элемент календаря:
.flatpickr-calendar — основной
контейнер виджетаОн является базой для всех состояний и модификаторов. Через него управляется:
Flatpickr добавляет модифицирующие классы в зависимости от поведения:
.open — календарь раскрыт и
активен.inline — календарь встроен в страницу
и не привязан к popup-режиму.static — позиционирование без
абсолютного всплытия.animate — включены CSS-анимации
переходовЭти классы комбинируются, формируя итоговое поведение интерфейса.
Например, .flatpickr-calendar.open.animate описывает
открытый календарь с анимацией перехода.
При инициализации Flatpickr модифицирует структуру вокруг исходного поля ввода.
Основные элементы:
.flatpickr-wrapper — внешний контейнер
(если создаётся библиотекой).flatpickr-input — целевой
input-элементВ зависимости от конфигурации может добавляться дополнительная обёртка, особенно при использовании режимов с иконками или кастомными триггерами.
Верхний блок календаря отвечает за навигацию между месяцами и годами.
Структура:
.flatpickr-months — контейнер всей
панели.flatpickr-month — текущий
отображаемый месяцВнутри .flatpickr-month располагаются элементы
управления:
monthSelectorType).flatpickr-prev-month — кнопка
перехода к предыдущему месяцу.flatpickr-next-month — кнопка
перехода к следующему месяцу.cur-month — текущий выбранный
месяц.cur-year — текущий выбранный годЭти элементы тесно связаны с методами API changeMonth()
и changeYear(), которые обновляют состояние календаря без
полной перерисовки DOM.
Под панелью навигации располагается блок дней недели:
.flatpickr-weekdays — контейнер строки
заголовков.flatpickr-weekday — отдельный день
неделиКаждый .flatpickr-weekday генерируется на основе локали
и настроек locale.firstDayOfWeek.
Особенности:
Центральный блок интерфейса — это таблица дней:
.flatpickr-days — контейнер всей
сетки.dayContainer — отдельная колонка
недели.flatpickr-day — отдельный деньКаждый день представлен отдельным DOM-элементом, что обеспечивает высокую гибкость стилизации.
.flatpickr-dayFlatpickr активно использует модификаторы состояния:
.today — текущая дата системы.selected — выбранный день.inRange — день входит в диапазон
(range mode).startRange — начало диапазона.endRange — конец диапазона.disabled — недоступный для выбора
день.prevMonthDay — дни предыдущего
месяца.nextMonthDay — дни следующего
месяцаКомбинации классов позволяют формировать сложные сценарии:
Пример поведения:
.selected.inRange может появляться в режиме range
selection.disabled.prevMonthDay обозначает недоступные “серые”
дни вне текущего месяцаFlatpickr поддерживает несколько режимов работы, которые напрямую отражаются в DOM:
Базовый режим без дополнительных классов на днях, кроме
.selected.
Добавляются классы:
.inRange.startRange.endRangeЭтот режим полностью управляет визуальной связью между двумя датами через последовательное окрашивание промежуточных элементов.
В этом режиме несколько элементов получают:
.selected на каждом выбранном днеВизуальная логика становится более простой, но состояние полностью управляется внутренним массивом выбранных значений.
Flatpickr активно управляет доступностью дат через CSS-классы:
.disabled — дата запрещена для выбора.notAllowed — визуально недоступный элемент (может
появляться при ограничениях логики).hidden — скрытые элементы календаряЭти классы могут зависеть от:
minDate / maxDatedisable и enable функцийПомимо визуальных состояний, Flatpickr использует служебные классы для управления поведением:
.flatpickr-wrapper — контейнер
привязки к input.flatpickr-input — целевой элемент
ввода.numInputWrapper — числовые поля (год,
время).arrowUp / .arrowDown —
элементы управления инкрементом значенийЭти элементы особенно важны при работе с временем (time picker) и расширенными конфигурациями.
При переходе в мобильный режим календарь может адаптировать поведение через:
.flatpickr-calendarХотя отдельного стабильного класса мобильного режима нет, поведение определяется сочетанием:
disableMobileDOM-классы напрямую связаны с методами экземпляра:
changeMonth() → обновляет
.flatpickr-monthchangeYear() → обновляет .cur-yearsetDate() → пересчитывает .selectedjumpToDate() → перестраивает
.flatpickr-daysredraw() → полностью пересобирает DOM-календаряКаждое изменение состояния через API отражается в классовой структуре без необходимости ручного вмешательства в DOM.
Модель классов построена на нескольких принципах:
flatpickr-, исключая конфликты с внешними
стилями