Налаштування темної теми (dark mode) сайту на 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування темної теми (dark mode) сайту на 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування темної теми (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 год