Стили
styles предоставляет возможность переопределить любой CSS-класс в календаре. Вы можете заменить любые значения на список из CSS классов.
Модульные стили
Существующие импорты styles/index.css, styles/layout.css и styles/themes/*.css остаются полными и совместимыми. Для уменьшения CSS подключайте только нужные части. Регистрация расширения JavaScript сама по себе не загружает CSS.
В каждой группе доступны core, motion, time, annotations, weeks и months. Подключите core и стили всех используемых расширений, включая функции, которые будут включены позднее через set().
| Путь | Содержимое |
|---|---|
styles/index.css | Вся раскладка и светлая/тёмная темы |
styles/{part}.css | Выбранная часть: раскладка и светлое/тёмное оформление |
styles/layout/{part}.css | Только выбранная часть раскладки, без темы |
styles/themes/{theme}/{part}.css | Только выбранная часть одной темы |
Календарь с выбором времени и автоматическим переключением светлой/тёмной темы:
import { Calendar, time } from 'vanilla-calendar-pro';
import 'vanilla-calendar-pro/styles/core.css';
import 'vanilla-calendar-pro/styles/time.css';
new Calendar('#calendar', {
extensions: [time],
selectionTimeMode: 24,
}).init();Для независимого выбора темы подключите части раскладки и соответствующие части темы. Например, светлый календарь с выбором времени:
import { Calendar, time } from 'vanilla-calendar-pro';
import 'vanilla-calendar-pro/styles/layout/core.css';
import 'vanilla-calendar-pro/styles/layout/time.css';
import 'vanilla-calendar-pro/styles/themes/light/core.css';
import 'vanilla-calendar-pro/styles/themes/light/time.css';
new Calendar('#calendar', {
extensions: [time],
selectionTimeMode: 24,
selectedTheme: 'light',
}).init();Вместо light можно использовать dark или slate-light. Для своей темы нужны только соответствующие части раскладки и ваш CSS. Определение темы и selectedTheme работают как прежде; подключайте все темы, на которые календарь может переключаться.
В каждом слое выбирайте полные файлы либо отдельные части, чтобы не загружать одни правила дважды. CSS-классы, селекторы, поддержка браузеров и публичные переопределения --vc-* сохраняются. Некоторые части тем, например motion и months, не содержат собственных цветовых правил и являются корректными пустыми CSS-файлами.
Если используются все расширения, оставьте полный файл стилей: он сжимается лучше, чем все шесть частей вместе.
Архив package.zip содержит пять полных файлов стилей. Модульные части доступны в npm-пакете и по прямым CDN-ссылкам.
CSS-классы
Ниже приведен список всех классов по умолчанию.
new Calendar('#calendar', {
styles: {
// Базовые
calendar: 'vc',
controls: 'vc-controls',
grid: 'vc-grid',
column: 'vc-column',
// Заголовок / шапка
header: 'vc-header',
headerContent: 'vc-header__content',
month: 'vc-month',
year: 'vc-year',
arrowPrev: 'vc-arrow vc-arrow_prev',
arrowNext: 'vc-arrow vc-arrow_next',
// Выбор месяца / года
wrapper: 'vc-wrapper',
content: 'vc-content',
months: 'vc-months',
monthsRow: 'vc-months__row',
monthsCell: 'vc-months__cell',
monthsMonth: 'vc-months__month',
years: 'vc-years',
yearsRow: 'vc-years__row',
yearsCell: 'vc-years__cell',
yearsYear: 'vc-years__year',
// Строка недели / номера недель
week: 'vc-week',
weekDay: 'vc-week__day',
weekDayBtn: 'vc-week__day-btn',
weekNumbers: 'vc-week-numbers',
weekNumbersTitle: 'vc-week-numbers__title',
weekNumbersContent: 'vc-week-numbers__content',
weekNumber: 'vc-week-number',
// Даты
collapse: 'vc-collapse',
dates: 'vc-dates',
datesRow: 'vc-dates__row',
date: 'vc-date',
dateBtn: 'vc-date__btn',
// Попапы и тултип
datePopup: 'vc-date__popup',
dateRangeTooltip: 'vc-date-range-tooltip',
// Управление временем
time: 'vc-time',
timeContent: 'vc-time__content',
timeHour: 'vc-time__hour',
timeMinute: 'vc-time__minute',
timeKeeping: 'vc-time__keeping',
timeRanges: 'vc-time__ranges',
timeRange: 'vc-time__range',
},
});CSS-переменные
Каждый цвет во встроенных темах (light, dark, slate-light) задан через CSS custom property с оригинальным цветом темы в качестве значения по умолчанию (fallback). Это значит, что внешний вид календаря можно поменять, задав несколько переменных — без переопределения CSS-классов и без риска, что переопределение темы не сработает как ожидается.
:root {
--vc-date-selected-bg: #7c3aed;
--vc-date-selected-color: #fff;
}Если переменная не задана, календарь рендерится ровно как раньше — ничего не меняется, пока вы явно не зададите переменную.
:root, она применится сразу ко всем темам (light/dark/slate-light используют одни и те же имена переменных). Чтобы переопределить только одну тему, ограничьте область действия селектором этой темы, например: [data-vc-theme='dark'] { --vc-date-selected-bg: #7c3aed; }.Базовые
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-bg | white | slate-900 | slate-100 |
--vc-color | slate-900 | white | gray-800 |
--vc-focus-outline-color | orange-300 | orange-300 | blue-300 |
Заголовок / шапка
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-header-color | slate-900 | white | gray-800 |
--vc-title-color | slate-900 | white | gray-800 |
--vc-title-color-hover | slate-500 | slate-500 | gray-600 |
--vc-title-color-disabled | slate-300 | slate-700 | gray-400 |
Выбор месяца / года
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-months-years-bg | white | slate-900 | slate-100 |
--vc-months-years-color | slate-500 | white | gray-600 |
--vc-months-years-bg-hover | slate-100 | slate-800 | slate-200 |
--vc-months-years-color-disabled | slate-300 | slate-700 | gray-400 |
--vc-months-years-bg-selected | cyan-500 | slate-500 | blue-500 |
--vc-months-years-color-selected | white | white | white |
Управление сворачиванием
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-collapse-color | slate-300 | slate-600 | slate-300 |
Строка недели / номера недель
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-week-numbers-title-color | slate-500 | white | gray-600 |
--vc-week-number-color | slate-500 | white | gray-600 |
--vc-week-number-color-hover | slate-600 | slate-300 | gray-800 |
--vc-week-day-color | slate-500 | white | gray-600 |
--vc-week-day-color-hover | slate-600 | slate-300 | gray-800 |
--vc-week-day-off-color | rose-500 | rose-500 | red-500 |
--vc-week-day-off-color-hover | rose-600 | rose-600 | red-600 |
Даты
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-date-bg | white | slate-900 | slate-100 |
--vc-date-color | slate-900 | slate-400 | gray-800 |
--vc-date-color-hover dark only | — | slate-200 | — |
--vc-date-bg-hover | slate-100 | slate-800 | slate-200 |
--vc-date-hover-bg | slate-100 | slate-800 | slate-200 |
--vc-date-hover-edge-bg | slate-200 | slate-700 | slate-300 |
--vc-date-disabled-color | slate-300 | slate-700 | gray-400 |
--vc-date-outside-color | slate-400 | slate-600 | gray-400 |
--vc-date-today-bg | slate-100 | slate-800 | slate-200 |
--vc-date-today-color | cyan-500 | cyan-500 | blue-500 |
--vc-date-today-outside-color | slate-500 | slate-600 | gray-600 |
--vc-date-selected-bg | cyan-500 | cyan-500 | blue-500 |
--vc-date-selected-color | white | white | white |
--vc-date-selected-outside-bg | slate-300 | slate-700 | slate-300 |
--vc-date-selected-outside-color | slate-500 | slate-300 | gray-600 |
Выходные / праздники
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-date-weekend-color | rose-500 | rose-500 | red-500 |
--vc-date-weekend-bg-hover | rose-50 | slate-800 | slate-200 |
--vc-date-weekend-hover-bg | rose-50 | slate-800 | slate-200 |
--vc-date-weekend-hover-edge-bg | rose-100 | slate-700 | slate-300 |
--vc-date-weekend-disabled-color | slate-300 | slate-700 | gray-400 |
--vc-date-weekend-today-color | rose-500 | rose-500 | red-500 |
--vc-date-weekend-today-disabled-color | slate-300 | slate-700 | gray-400 |
--vc-date-weekend-outside-bg | white | slate-900 | slate-100 |
--vc-date-weekend-outside-color | slate-400 | slate-600 | gray-400 |
--vc-date-weekend-outside-color-hover dark only | — | slate-300 | — |
--vc-date-weekend-outside-bg-hover | slate-100 | slate-800 | slate-200 |
--vc-date-weekend-outside-hover-bg | slate-100 | slate-800 | slate-200 |
--vc-date-weekend-today-outside-color | slate-400 | slate-400 | gray-400 |
--vc-date-weekend-disabled-outside-color | slate-300 | slate-700 | gray-400 |
--vc-date-weekend-selected-bg | rose-500 | rose-500 | red-500 |
--vc-date-weekend-selected-color | white | white | white |
Выбранные диапазоны (multiple-ranged)
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-date-range-middle-bg | cyan-500 at 70% | cyan-500 at 80% | blue-500 at 80% |
--vc-date-range-middle-color | white | white | white |
--vc-date-range-middle-outside-bg | slate-200 | slate-800 | slate-200 |
--vc-date-range-middle-outside-color | slate-500 | slate-300 | gray-600 |
--vc-date-range-middle-weekend-bg | rose-500 at 70% | rose-500 at 80% | red-500 at 80% |
--vc-date-range-middle-weekend-color | white | white | white |
Попапы и тултип
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-date-popup-bg | white | slate-800 | white |
--vc-date-popup-color | slate-900 | white | gray-800 |
--vc-date-range-tooltip-bg | slate-50 | slate-800 | slate-50 |
--vc-date-range-tooltip-color | slate-500 | slate-400 | slate-500 |
Управление временем
| Переменная | light | dark | slate-light |
|---|---|---|---|
--vc-time-border-color | slate-300 | slate-800 | gray-300 |
--vc-time-separator-color | slate-900 | white | gray-800 |
--vc-time-input-bg | white | slate-900 | slate-100 |
--vc-time-input-color | slate-900 | white | gray-800 |
--vc-time-input-bg-hover | orange-100 | slate-700 | blue-100 |
--vc-time-keeping-color | slate-500 | slate-500 | gray-600 |
--vc-time-keeping-color-hover dark only | — | slate-400 | — |
--vc-time-range-bg | white | slate-900 | slate-100 |
--vc-time-range-track-color | slate-300 | slate-600 | slate-300 |
--vc-time-range-thumb-bg | white | slate-800 | slate-100 |
--vc-time-range-thumb-border | slate-300 | slate-600 | gray-300 |
--vc-time-range-thumb-border-hover | slate-400 | slate-400 | gray-400 |
Три переменные, помеченные "dark only", существуют потому, что у тёмной темы есть дополнительное hover-состояние для этих элементов, которого нет в light/slate-light — в остальных темах переопределять для них попросту нечего.
Размеры
Все размеры календаря заданы в rem, поэтому он масштабируется вместе с базовым размером шрифта (root font-size). Если на странице этот размер сброшен со стандартных браузерных 16px (частая практика на старых фреймворках вроде Bootstrap 3, обычно до 10px), календарь отрендерится в неверном масштабе. Вернуть исходный размер можно одним transform:
[data-vc='calendar'] {
transform: scale(16 / <root font-size в px>);
}Например, при 10px на корне: transform: scale(1.6);.