Розробка адаптації дизайну під prefers-color-scheme 1С-Бітрікс

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

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

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

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

  • 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

Розробка адаптації дизайну під prefers-color-scheme у 1С-Бітрікс

prefers-color-scheme — CSS media query, яка визначає, чи вибрав користувач темну тему в налаштуваннях ОС. Підтримується у всіх сучасних браузерах. Завдання: сайт на Бітрікс повинен відображатися в темному або світлому варіанті залежно від системних налаштувань користувача — без ручного перемикача або разом із ним.

Підходи до реалізації темної теми

Підхід 1: Чисті CSS-змінні. Всі кольори сайту визначаються через CSS custom properties. При prefers-color-scheme: dark змінні перевизначаються.

:root {
    --color-bg:       #ffffff;
    --color-text:     #1a1a1a;
    --color-surface:  #f5f5f5;
    --color-border:   #e0e0e0;
    --color-primary:  #0066cc;
    --color-primary-text: #ffffff;
}

@media (prefers-color-scheme: dark) {
    :root {
        --color-bg:       #121212;
        --color-text:     #e8e8e8;
        --color-surface:  #1e1e1e;
        --color-border:   #333333;
        --color-primary:  #4d9fff;
        --color-primary-text: #000000;
    }
}

Весь CSS шаблону використовує лише змінні, а не хардкодовані значення. Це найчистіший підхід, але вимагає переробки наявних стилів.

Підхід 2: CSS-клас dark на <html>. Темні стилі активуються класом:

html.dark {
    --color-bg: #121212;
    /* ... */
}

JavaScript перемикає клас залежно від системних налаштувань та вподобань користувача (збережених у localStorage):

(function() {
    const savedTheme = localStorage.getItem('theme');
    const systemDark  = window.matchMedia('(prefers-color-scheme: dark)').matches;
    const isDark = savedTheme ? savedTheme === 'dark' : systemDark;

    if (isDark) document.documentElement.classList.add('dark');

    // Слухаємо зміну системної теми
    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
        if (!localStorage.getItem('theme')) { // Тільки якщо немає ручного вибору
            document.documentElement.classList.toggle('dark', e.matches);
        }
    });
})();

Цей скрипт має виконуватися синхронно в <head> до рендеру DOM, інакше буде мигання (flash of wrong theme, FOWT).

У Бітрікс додаємо в header.php шаблону сайту перед </head>:

<script>
<?php
// Інлайнимо скрипт теми мінімізованим
echo file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/local/js/theme-init.min.js');
?>
</script>

Перемикач теми в інтерфейсі

Кнопка в шапці сайту перемикає тему вручну, перевизначаючи системні налаштування:

document.getElementById('theme-toggle').addEventListener('click', function() {
    const isDark = document.documentElement.classList.toggle('dark');
    localStorage.setItem('theme', isDark ? 'dark' : 'light');
    this.setAttribute('aria-label', isDark ? 'Світла тема' : 'Темна тема');
});

Іконка кнопки змінюється CSS-змінними або через псевдоелемент із різним content залежно від класу.

Робота із зображеннями

Для логотипу та іконок, які погано виглядають на темному фоні, використовуємо HTML-тег <picture> з атрибутом media:

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

При перемикачі — JavaScript оновлює атрибут src елемента <img>.

Зображення товарів

Фотографії товарів на темному фоні часто виглядають нормально. Але якщо фотографії на білому фоні — у темній темі виглядають недоречно. Рішення:

@media (prefers-color-scheme: dark) {
    .product-image img {
        mix-blend-mode: multiply; /* прибирає білий фон у PNG */
    }
}

Або CSS-фільтр для пом'якшення:

html.dark .product-image img {
    filter: brightness(0.9) contrast(1.05);
}

Кольори в компонентах Бітрікс

При правці стилів стандартних компонентів (каталог, кошик, пошук) потрібно додати темні варіанти для кожного компонента. Стратегія: створюємо окремий файл _dark-theme.scss (або _dark-theme.css), який підключається після основних стилів і перевизначає лише те, що потрібно для темного режиму.

Шаблонізація у Бітрікс

У шаблонах компонентів використовуємо CSS-змінні замість хардкоду:

<!-- Було -->
<div style="background: #fff; color: #333;">

<!-- Стало -->
<div style="background: var(--color-surface); color: var(--color-text);">

Для inline-стилів, що генеруються в PHP, кольори беремо з конфігурації:

$bgColor = 'var(--color-surface)'; // Не хардкодимо #ffffff

Тестування

  • Chrome DevTools: вкладка Rendering → Emulate CSS media feature prefers-color-scheme
  • Перемикання теми в ОС (Windows: Персоналізація → Кольори, macOS: Системні налаштування → Основні)
  • Перевірка відсутності FOWT — при вимкненому кеші браузера

Терміни

Етап Термін
Аудит поточних стилів і виділення колірних змінних 2 дні
Розробка палітри темної теми 1 день
Реалізація CSS-змінних і медіазапиту 2–3 дні
Ініціалізаційний скрипт + перемикач 1 день
Правка зображень та іконок 1 день
Тестування у всіх браузерах 1 день
Разом 8–10 днів