Переопределение стандартных стилей в Flatpickr опирается на понимание структуры DOM, каскадности CSS и приоритетов специфичности. Библиотека поставляется с готовым набором стилей, которые формируют внешний вид календаря, но практически всегда требуют адаптации под дизайн-систему проекта: от простого изменения цветов до полной переработки визуальной логики компонентов.
Flatpickr использует предсказуемую структуру классов и не полагается на инлайн-стили (за редкими исключениями вычисляемых значений). Это делает переопределение возможным через обычный CSS.
Основные принципы:
.flatpickr-*;Ключевое правило: ваши стили должны загружаться после стандартного файла Flatpickr, иначе переопределение не сработает.
После инициализации Flatpickr создаёт календарь, который примерно включает следующие уровни:
.flatpickr-calendar — основной контейнер.flatpickr-months — блок навигации по месяцам.flatpickr-month — текущий месяц.flatpickr-weekdays — строка дней недели.flatpickr-days — сетка дней.flatpickr-day — отдельный деньТакже присутствуют вспомогательные элементы:
.flatpickr-prev-month,
.flatpickr-next-month.flatpickr-current-month.flatpickr-weekdayПонимание этой структуры позволяет точно нацеливать стили без избыточных селекторов.
Главный элемент .flatpickr-calendar определяет общий
внешний вид всплывающего окна.
Типовые задачи кастомизации:
Пример базового переопределения:
.flatpickr-calendar {
background: #1e1e1e;
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
border: none;
color: #fff;
}
Важно учитывать, что Flatpickr использует динамическое
позиционирование через JavaScript, поэтому любые изменения
position, transform и z-index
должны быть аккуратными.
Хотя Flatpickr визуально ассоциируется с календарём, входная точка — это input-элемент. Он не стилизуется библиотекой напрямую, но часто дополняется состояниями.
Полезные моменты:
:focus;.flatpickr-input.active.Пример:
.flatpickr-input {
padding: 10px 14px;
border: 1px solid #444;
border-radius: 8px;
background: #111;
color: #eee;
}
.flatpickr-input:focus {
outline: none;
border-color: #6c8cff;
box-shadow: 0 0 0 3px rgba(108, 140, 255, 0.2);
}
Каждый день в календаре представлен элементом
.flatpickr-day. Это основной объект переопределения.
Базовое состояние:
.flatpickr-day {
border-radius: 6px;
color: #ddd;
transition: background 0.2s ease, color 0.2s ease;
}
При наведении часто требуется переопределить hover:
.flatpickr-day:hover {
background: rgba(255, 255, 255, 0.08);
}
Flatpickr активно использует модификаторы классов для обозначения состояния.
Класс .selected:
.flatpickr-day.selected {
background: #6c8cff;
border-color: #6c8cff;
color: #fff;
}
Класс .today:
.flatpickr-day.today {
border: 1px solid #6c8cff;
}
Класс .disabled:
.flatpickr-day.disabled {
color: #555;
cursor: not-allowed;
background: transparent;
}
Классы .prevMonthDay и .nextMonthDay:
.flatpickr-day.prevMonthDay,
.flatpickr-day.nextMonthDay {
opacity: 0.4;
}
При режиме range используются:
.inRange.startRange.endRange.flatpickr-day.inRange {
background: rgba(108, 140, 255, 0.15);
}
.flatpickr-day.startRange,
.flatpickr-day.endRange {
background: #6c8cff;
color: #fff;
}
Блок .flatpickr-months включает стрелки и заголовок.
Стрелки:
.flatpickr-prev-month,
.flatpickr-next-month {
fill: #aaa;
transition: fill 0.2s;
}
.flatpickr-prev-month:hover,
.flatpickr-next-month:hover {
fill: #fff;
}
Заголовок месяца:
.flatpickr-current-month {
font-weight: 600;
color: #fff;
}
Flatpickr использует flex и inline-grid подходы. Иногда требуется жёстко контролировать геометрию:
.flatpickr-days {
padding: 10px;
}
.flatpickr-weekdays {
font-size: 12px;
opacity: 0.7;
}
В новых версиях Flatpickr часть значений может быть адаптирована через CSS-переменные (в зависимости от сборки и темы), однако основная кастомизация всё ещё строится на переопределении классов.
Подходы:
Пример изоляции темы:
.theme-dark .flatpickr-calendar {
background: #121212;
color: #eee;
}
.theme-dark .flatpickr-day.selected {
background: #ff6b6b;
}
Flatpickr стили имеют умеренную специфичность, поэтому важно избегать
избыточного использования !important. Однако в некоторых
случаях он оправдан:
Пример корректного повышения специфичности без
!important:
body .flatpickr-calendar .flatpickr-day.selected {
background: #6c8cff;
}
Частые проблемы:
.selected,
.disabled;Flatpickr добавляет классы .open и .animate
для управления появлением календаря.
Пример кастомной анимации:
.flatpickr-calendar.open {
animation: fpFadeIn 0.2s ease-out;
}
@keyframes fpFadeIn {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
При работе в больших проектах переопределение стилей Flatpickr обычно выносится в отдельный слой:
flatpickr.base.css — базовые правки;flatpickr.theme.dark.css — тёмная тема;flatpickr.theme.light.css — светлая тема.Такой подход позволяет:
Flatpickr легко интегрируется в дизайн-системы, но требует строгого контроля:
Переопределение стилей в этом контексте становится не косметической задачей, а частью архитектуры UI, где каждый класс Flatpickr выступает точкой расширения, а не фиксированным элементом внешнего вида.