Система стилизации Flatpickr построена вокруг набора предсказуемых CSS-классов, которые формируют структуру календаря, инпута и вспомогательных элементов. Основная идея заключается в том, что библиотека предоставляет базовую визуальную реализацию, а вся кастомизация выполняется через переопределение стандартных стилей.
Ключевые элементы интерфейса:
.flatpickr-calendar.flatpickr-innerContainer.flatpickr-months.flatpickr-prev-month,
.flatpickr-next-month.flatpickr-days.flatpickr-day.flatpickr-inputКаждый элемент имеет набор состояний, реализованных через дополнительные классы. Именно они определяют поведение темы при взаимодействии пользователя.
Создание собственной темы Flatpickr опирается на три ключевых подхода:
На практике чаще применяется комбинированный вариант, при котором базовые стили отключаются или минимизируются, а поверх них строится собственный визуальный слой.
Важно учитывать каскадность: Flatpickr подключает свои стили с высокой специфичностью, поэтому селекторы должны быть не менее приоритетными или использовать переопределение через более глубокие цепочки.
Основной файл кастомной темы обычно строится по блокам:
Пример базовой структуры:
.flatpickr-calendar {
background: #1e1e2f;
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0,0,0,0.4);
border: none;
}
Такой уровень переопределения задаёт фундамент визуального стиля.
Область месяцев и навигации является одной из самых насыщенных по стилям.
Основные элементы:
.flatpickr-months — контейнер верхней панели.flatpickr-month — текущий месяц.flatpickr-current-month — блок выбора месяца и
года.flatpickr-prev-month,
.flatpickr-next-month — стрелкиПример кастомизации:
.flatpickr-months {
background: transparent;
color: #ffffff;
padding: 10px 0;
}
.flatpickr-current-month {
font-weight: 600;
font-size: 14px;
color: #e2e2e2;
}
.flatpickr-prev-month,
.flatpickr-next-month {
fill: #888;
transition: fill 0.2s ease;
}
.flatpickr-prev-month:hover,
.flatpickr-next-month:hover {
fill: #ffffff;
}
Сетка календаря формируется через .flatpickr-days,
внутри которой находятся строки и элементы
.flatpickr-day.
Каждый день имеет несколько состояний:
.selected — выбранная дата.today — текущий день.inRange — диапазон (range mode).disabled — недоступные даты.prevMonthDay, .nextMonthDay — дни
соседних месяцевБазовая стилизация:
.flatpickr-day {
color: #d6d6d6;
border-radius: 6px;
width: 36px;
height: 36px;
line-height: 36px;
margin: 2px;
transition: all 0.2s ease;
}
.flatpickr-day:hover {
background: rgba(255,255,255,0.08);
}
Состояния играют ключевую роль в UX календаря. Их переопределение позволяет полностью изменить восприятие компонента.
.flatpickr-day.selected {
background: #4f7cff;
border-color: #4f7cff;
color: #fff;
}
.flatpickr-day.today {
border: 1px solid #4f7cff;
}
.flatpickr-day.inRange {
background: rgba(79, 124, 255, 0.2);
color: #fff;
}
.flatpickr-day.disabled {
color: #555;
cursor: not-allowed;
background: transparent;
}
Полноценная тема требует унификации всех цветовых и размерных
решений. Обычно вводится набор переменных через :root,
который используется как централизованная система дизайна.
:root {
--fp-bg: #12131c;
--fp-surface: #1e1f2e;
--fp-primary: #4f7cff;
--fp-text: #e6e6e6;
--fp-muted: #8a8a8a;
}
Дальнейшая стилизация строится на этих значениях:
.flatpickr-calendar {
background: var(--fp-bg);
color: var(--fp-text);
}
.flatpickr-day.selected {
background: var(--fp-primary);
}
Такой подход позволяет менять всю тему без переписывания CSS.
Инпут Flatpickr часто остаётся вне основной визуальной системы, но его оформление критично для целостности интерфейса.
Основные классы:
.flatpickr-input.flatpickr-mobile (мобильный режим)Пример стилизации:
.flatpickr-input {
background: #1e1f2e;
border: 1px solid #2c2d3d;
color: #e6e6e6;
padding: 10px 12px;
border-radius: 8px;
}
.flatpickr-input:focus {
border-color: #4f7cff;
outline: none;
}
Flatpickr не навязывает сложную анимационную систему, что позволяет внедрять собственные переходы.
Пример мягкого появления календаря:
.flatpickr-calendar {
opacity: 0;
transform: translateY(-8px);
transition: opacity 0.15s ease, transform 0.15s ease;
}
.flatpickr-calendar.open {
opacity: 1;
transform: translateY(0);
}
Дополнительно можно стилизовать hover-состояния для повышения отзывчивости интерфейса.
Структура проекта с кастомной темой обычно включает:
flatpickr.min.css (базовый файл)theme.css (переопределения)variables.css (система переменных)Порядок подключения критичен:
<link rel="stylesheet" href="flatpickr.min.css">
<link rel="stylesheet" href="theme.css">
Любое нарушение порядка приводит к потере переопределений из-за каскадности CSS.
Flatpickr поддерживает несколько режимов, каждый из которых требует отдельной стилизации.
.flatpickr-calendar.inline {
box-shadow: none;
border: 1px solid #2c2d3d;
}
Особое внимание уделяется связке .startRange и
.endRange:
.flatpickr-day.startRange,
.flatpickr-day.endRange {
background: #4f7cff;
color: #fff;
}
Навигационные стрелки и некоторые элементы Flatpickr используют SVG.
Их стилизация осуществляется через fill и
stroke.
.flatpickr-calendar svg {
fill: #8a8a8a;
transition: fill 0.2s ease;
}
.flatpickr-calendar svg:hover {
fill: #ffffff;
}
При расширении темы важно сохранять единый визуальный язык:
Типичная ошибка — локальная правка отдельных элементов без учёта общей системы, что приводит к визуальной фрагментации интерфейса.
Flatpickr часто используется в больших приложениях, где возможны конфликты CSS. Для минимизации проблем применяются:
Пример изоляции:
.app-datepicker .flatpickr-calendar {
background: #12131c;
}
Такой подход позволяет безопасно внедрять тему в сложные интерфейсы без глобальных побочных эффектов.