Настройка тёмной темы (dark mode) сайта на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка тёмной темы (dark mode) сайта на 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка тёмной темы (dark mode) сайта на 1С-Битрикс

Тёмная тема на сайте — это CSS-переменные с двумя наборами значений, логика определения предпочтений пользователя и сохранение его выбора. Битрикс здесь не добавляет специфики — это чистая фронтенд-задача, которую нужно аккуратно встроить в шаблон сайта.

Архитектура CSS для двух тем

Основа — CSS custom properties (переменные). Не меняете цвета напрямую по классу .dark, а через переменные, которые переопределяются в зависимости от темы.

В основном CSS шаблона (/local/templates/[шаблон]/style.css):

/* Светлая тема — значения по умолчанию */
:root {
    --color-bg:         #ffffff;
    --color-text:       #1a1a1a;
    --color-primary:    #0066cc;
    --color-border:     #e0e0e0;
    --color-card-bg:    #f5f5f5;
    --color-header-bg:  #ffffff;
    --color-shadow:     rgba(0,0,0,0.08);
}

/* Тёмная тема */
:root[data-theme="dark"],
.dark-mode {
    --color-bg:         #121212;
    --color-text:       #e4e4e4;
    --color-primary:    #4da3ff;
    --color-border:     #333333;
    --color-card-bg:    #1e1e1e;
    --color-header-bg:  #1a1a1a;
    --color-shadow:     rgba(0,0,0,0.4);
}

/* Системные предпочтения пользователя */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        --color-bg:         #121212;
        --color-text:       #e4e4e4;
        /* ... */
    }
}

Во всех компонентах используете переменные вместо конкретных цветов:

body            { background: var(--color-bg); color: var(--color-text); }
.card           { background: var(--color-card-bg); border-color: var(--color-border); }

Сохранение выбора пользователя

Выбор темы сохраняется в localStorage, чтобы сохранялся между сессиями без авторизации:

// Применяем тему немедленно при загрузке страницы (до рендеринга)
// Вставляем этот скрипт в <head> шаблона, ДО подключения CSS
(function() {
    const saved = localStorage.getItem('theme');
    const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
    const theme = saved || (prefersDark ? 'dark' : 'light');
    document.documentElement.setAttribute('data-theme', theme);
})();

Критично: этот скрипт должен быть инлайновым в <head>, до загрузки стилей. Иначе при загрузке будет мелькание — белый экран перед применением тёмной темы (FOUC — Flash of Unstyled Content).

В шаблоне Битрикса (header.php):

<head>
    <!-- ... мета-теги ... -->
    <script>
        (function() {
            const t = localStorage.getItem('theme')
                || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
            document.documentElement.setAttribute('data-theme', t);
        })();
    </script>
    <?php $APPLICATION->ShowHead(); ?>
</head>

Изображения в тёмной теме

Логотипы и иконки часто не читаются на тёмном фоне. Варианты решения:

Вариант 1 — CSS filter:

.dark-mode .site-logo img {
    filter: brightness(0) invert(1);
}

Вариант 2 — <picture> с prefers-color-scheme:

<picture>
    <source srcset="/img/logo-dark.svg" media="(prefers-color-scheme: dark)">
    <img src="/img/logo-light.svg" alt="Логотип">
</picture>

Вариант 3 — смена атрибута src через JS при переключении темы.

Компоненты Битрикса и тёмная тема

Стандартные компоненты Битрикса (пагинация, формы, поиск) используют свои стили. Придётся переопределить CSS для каждого задействованного компонента. Особенно внимательно с:

  • .bx-sls (умный поиск) — имеет собственный inline-стиль
  • .popup-window-content (popups Битрикса)
  • Компонент авторизации /bitrix/components/bitrix/system.auth.form/

Переопределяете в своём CSS:

:root[data-theme="dark"] .bx-sls {
    background: var(--color-card-bg);
    color: var(--color-text);
}
Этап Время
Перевод стилей на CSS-переменные 6–12 ч
Скрипт определения темы и логика переключения 2–3 ч
Адаптация изображений и иконок 2–4 ч
Переопределение стилей компонентов Битрикса 3–6 ч
Тестирование в разных браузерах и режимах 2–3 ч