Библиотека Flatpickr состоит не только из JavaScript-кода, отвечающего за логику календаря, но и из тщательно организованной CSS-структуры. Именно она определяет внешний вид календаря, расположение элементов, анимации, размеры, стили состояний и поддержку различных режимов работы.
Понимание структуры CSS позволяет:
Flatpickr использует систему классов, которая формирует иерархию элементов календаря после его инициализации.
После создания экземпляра Flatpickr в DOM появляется корневой элемент:
<div class="flatpickr-calendar">
...
</div>
Класс:
.flatpickr-calendar
является главным контейнером всего календаря.
Через него управляются:
Пример переопределения:
.flatpickr-calendar {
border-radius: 12px;
border: 1px solid #dcdcdc;
box-shadow: 0 10px 30px rgba(0,0,0,.15);
}
Flatpickr активно использует дополнительные классы состояний.
<div class="flatpickr-calendar open">
Класс:
.open
появляется при открытии.
Пример:
.flatpickr-calendar.open {
opacity: 1;
}
<div class="flatpickr-calendar open arrowTop">
Дополнительные классы используются для определения положения относительно поля ввода.
Если используется настройка:
static: true
появляется класс:
.static
Он влияет на способ позиционирования календаря.
Следующий важный элемент структуры:
<div class="flatpickr-months">
Этот блок содержит:
Структура:
<div class="flatpickr-months">
<span class="flatpickr-prev-month"></span>
<div class="flatpickr-month"></div>
<span class="flatpickr-next-month"></span>
</div>
Для навигации используются два класса.
Предыдущий месяц:
.flatpickr-prev-month
Следующий месяц:
.flatpickr-next-month
Пример стилизации:
.flatpickr-prev-month,
.flatpickr-next-month {
color: #444;
transition: color .2s;
}
Эффект наведения:
.flatpickr-prev-month:hover,
.flatpickr-next-month:hover {
color: #0066ff;
}
Внутри блока месяцев находится:
<div class="flatpickr-month">
Он содержит информацию о текущем месяце и годе.
Пример структуры:
<div class="flatpickr-month">
<div class="flatpickr-current-month">
...
</div>
</div>
Класс:
.flatpickr-current-month
управляет отображением строки текущего месяца.
Пример:
.flatpickr-current-month {
font-size: 18px;
font-weight: 600;
}
Если включено:
monthSelectorType: "dropdown"
создается элемент:
<select class="flatpickr-monthDropdown-months">
Основной класс:
.flatpickr-monthDropdown-months
Пример оформления:
.flatpickr-monthDropdown-months {
border: none;
background: transparent;
}
Для отображения года используется:
<input class="numInput cur-year">
Классы:
.numInput
.cur-year
Настройка внешнего вида:
.cur-year {
font-weight: bold;
text-align: center;
}
Под заголовком располагается строка дней недели:
<div class="flatpickr-weekdays">
Внутри:
<div class="flatpickr-weekdaycontainer">
Каждый день недели имеет класс:
.flatpickr-weekday
Пример:
.flatpickr-weekday {
color: #777;
font-size: 12px;
text-transform: uppercase;
}
Основная сетка календаря располагается внутри:
<div class="flatpickr-days">
Внутри находится контейнер текущего месяца:
<div class="dayContainer">
Именно здесь создаются все ячейки дат.
Каждая дата представлена элементом:
<span class="flatpickr-day">
Это наиболее часто переопределяемый CSS-класс.
Пример:
.flatpickr-day {
border-radius: 8px;
}
После выбора дня появляется класс:
.selected
Пример HTML:
<span class="flatpickr-day selected">
Стилизация:
.flatpickr-day.selected {
background: #0066ff;
color: white;
}
Для сегодняшней даты применяется:
.today
Пример:
<span class="flatpickr-day today">
Переопределение:
.flatpickr-day.today {
border-color: #0066ff;
}
Состояние hover задается обычным CSS:
.flatpickr-day:hover {
background: #f3f3f3;
}
Для отображения дат предыдущего и следующего месяца используется:
.prevMonthDay
.nextMonthDay
Пример:
.prevMonthDay,
.nextMonthDay {
color: #bdbdbd;
}
Если дата недоступна для выбора:
<span class="flatpickr-day flatpickr-disabled">
Класс:
.flatpickr-disabled
Пример:
.flatpickr-disabled {
opacity: .35;
cursor: not-allowed;
}
В режиме:
mode: "range"
используется несколько специальных классов.
Начало диапазона:
.startRange
Конец диапазона:
.endRange
Промежуточные даты:
.inRange
Пример:
.flatpickr-day.inRange {
background: #dce9ff;
}
Начало:
.flatpickr-day.startRange {
background: #0066ff;
}
Конец:
.flatpickr-day.endRange {
background: #0066ff;
}
Если активирована настройка:
enableTime: true
создается блок:
<div class="flatpickr-time">
Он содержит элементы выбора времени.
Для часов используются:
.flatpickr-hour
Для минут:
.flatpickr-minute
Для секунд:
.flatpickr-second
Пример:
.flatpickr-hour,
.flatpickr-minute {
font-size: 16px;
}
В 12-часовом режиме появляется:
<span class="flatpickr-am-pm">
Класс:
.flatpickr-am-pm
Пример:
.flatpickr-am-pm {
font-weight: 600;
}
Если включено:
weekNumbers: true
создается колонка:
<div class="flatpickr-weekwrapper">
Внутри находятся номера недель.
Классы:
.flatpickr-weekwrapper
.flatpickr-weeks
.flatpickr-weekday
Пример оформления:
.flatpickr-weekwrapper {
background: #fafafa;
}
При использовании:
showMonths: 2
или большего значения создаются дополнительные контейнеры:
<div class="dayContainer">
для каждого отображаемого месяца.
Общий контейнер:
.flatpickr-days
автоматически становится шире.
Для настройки отступов часто используются правила:
.dayContainer {
padding: 0 10px;
}
Flatpickr управляет отображением через комбинацию классов:
.open
.animate
.arrowTop
.arrowBottom
Именно они отвечают за:
Пример переопределения анимации:
.flatpickr-calendar {
transition: transform .2s ease,
opacity .2s ease;
}
Базовый файл:
flatpickr.min.css
содержит стандартную тему.
Дополнительные темы подключаются отдельными файлами:
themes/dark.css
themes/material_blue.css
themes/airbnb.css
themes/confetti.css
Каждая тема использует ту же структуру CSS-классов, изменяя только визуальное оформление.
Это позволяет переключать темы без изменения HTML и JavaScript-кода.
Типичная структура календаря выглядит следующим образом:
flatpickr-calendar
│
├── flatpickr-months
│ ├── flatpickr-prev-month
│ ├── flatpickr-month
│ │ └── flatpickr-current-month
│ └── flatpickr-next-month
│
├── flatpickr-weekdays
│ └── flatpickr-weekday
│
├── flatpickr-days
│ └── dayContainer
│ └── flatpickr-day
│
└── flatpickr-time
├── flatpickr-hour
├── flatpickr-minute
├── flatpickr-second
└── flatpickr-am-pm
Понимание этой структуры является основой глубокой кастомизации Flatpickr. Большинство изменений внешнего вида календаря выполняется именно через переопределение перечисленных классов, поскольку библиотека строит интерфейс динамически и использует стабильную систему CSS-селекторов, сохраняющуюся между версиями и темами оформления.