Страницы: 1
RSS
Делаем тёмную тему сайта, с переключением, Веб-программирование
 

Темный режим в последнее время приобрел большую популярность. Так, например, компания Apple добавила темный режим в свои операционные системы iOS и macOS. Windows и Google сделали то же самое.

Давайте же взглянем на темный режим в контексте веб-сайтов. Мы рассмотрим различные подходы к реализации дизайна темного режима и технические соображения, которые они влекут за собой. Также, в процессе нашего обсуждения, будут описаны некоторые приемы, которые могут оказаться полезными и в вашей практике.

Переключение между темами

Согласно типичному сценарию на сайте уже есть светлая тема, и вы хотите создать ее более темный аналог. Или, если вы начинаете с нуля, у вас будут две темы: светлая и темная. Одна тема должна быть определена как тема по умолчанию, которую пользователи получают при первом посещении. В большинстве случаев это светлая тема (хотя, как мы увидим в дальнейшем, можно позволить браузеру пользователя сделать этот выбор за нас). Также должен быть способ переключиться на другую тему (что может делаться автоматически) — например, пользователь нажимает кнопку, и цветовая тема меняется.

Для этого существует несколько подходов.

Использование специального класса в теге body

Данный прием заключается в том, что в теге body динамически меняется класс, который используется как зацепка для изменения стилей на странице

Код
<body class="dark-theme || light-theme">

Пример кода JavaScript, который будет менять класс при нажатии на специальную кнопку:

Код
// Находим нужную кнопку const btn = document.querySelector('.btn-toggle');  // Прослушиваем нажатие на кнопку btn.addEventListener('click', function() {   // Переключаем (добавляем/удаляем) класс .dark-theme   document.body.classList.toggle('dark-theme');   })

Вот как можно использовать эту идею:

Код
<body>   <button class="btn-toggle">Вкл/Выкл темный режим</button>   <h1>Привет! Это заголовок</h1>   <p>Это просто текст, нужный для создания абзаца</p>   <p>А это еще один кусочек текста, потому что два лучше, чем один</p>   <a href="#">Я ссылка.</a> </body>

Общая идея данного подхода состоит в том, что мы оформляем стили как обычно (это будет режим по умолчанию), а затем создаем набор цветовых стилей, опираясь на класс в теге body, которые будут использоваться в качестве темного режима.

Допустим, по умолчанию мы используем светлую цветовую гамму. Все эти светлые стили написаны точно так же, как вы обычно пишете CSS. Учитывая наш HTML код, давайте применим некоторый глобальный стиль к тегу body и ссылкам.

Код
body {   color: #222;   background: #fff; }  a {   color: #0033cc; }

У нас есть темный текст (#222) и темные ссылки (#0033cc) на светлом фоне (#fff). Наша тема "по умолчанию" успешно стартовала.

Теперь давайте переопределим значения этих свойств, опираясь на другой класс элемента body:

Код
body {   color: #222;   background: #fff; }  a {   color: #0033cc; }  /* Стили "темного" режима */ body.dark-theme {   color: #eee;   background: #121212; }  body.dark-theme a {   color: #809fff; }

Стили темной темы будут производными от одного и того же родительского класса - в нашем примере это класс .dark-theme, который мы установили для элемента body.

Как же будут "переключаться" классы в элементе body, чтобы задействовать темные стили? Для этого мы будем использовать JavaScript! Мы по классу выберем кнопку переключения стилей (.btn-toggle), прикрепим к ней перехватчик событий, который будет перехватывать нажатия на нее, и по этому событию будем добавлять класс темной темы (.dark-theme) в список классов элемента body. Благодаря спецификации каскадной таблицы стилей, это будет переопределять все светлые цвета, которые мы задали по умолчанию.

Вот работающий пример на моём сайте. Нажмите на кнопку, чтобы включить/выключить темный режим:

Страницы: 1
Читают тему

Энергетическая ценность
  • Белки
  • Жиры
  • Углеводы
  • Калорийность
RR
Подарок
в корзине
Новинка
Подарок
в корзине
Популярное
Подарок
в корзине
Распродажа
Подарок
в корзине
Большой размер
Подарок
в корзине
Баранина
Подарок
в корзине
Говядина
Подарок
в корзине
Свинина
Подарок
в корзине
Курица
Подарок
в корзине
Вегетерианское
Подарок
в корзине
Острое
Подарок
в корзине
Ограничение возраста
Получите подарок!
Выбирайте то, что нравится именно вам – а мы подарим
Если потратите еще
0R
вы получите подарок
Быстро
Время доставки заказ за 45 минут
Вкусно
Мы готовим только из свежих продуктов.
Бесплатная доставка
Минимальный сумма заказа 300 рублей.
+7 (987) 924-11-37
Доставка с 9.00 до 22.00
    Корзина
    Итого:
    R
    Скидка %
    Зарегистрируйтесь, чтобы
    получать бонусные рубли
    Оформить заказ
    Минимальная сумма заказа 500R
    Получайте бонусные рубли с каждого заказа!
    Бонусными рублями можно полностью или частично оплатить заказ.
    Чтобы начать получать бонусы – вам необходимо зарегистрироваться!
    На указанную электронную почту в течении нескольких секунд придет 4-значный код.
    Согласие на обработку персональных данных
    Настоящим я, далее – «Субъект Персональных Данных», во исполнение требований Федерального закона от 27.07.2006 г. № 152-ФЗ «О персональных данных» (с изменениями и дополнениями) свободно, своей волей и в своем интересе даю свое согласие ИП Тарасов А.В. (далее – «Доставка», юридический адрес: 446205, Самарская область, г. Самара, ул. Егорова 12) на обработку своих персональных данных, указанных при регистрации путем заполнения веб-формы на сайте «Доставка» delivery.foodsonic.ru и его поддоменов *.delivery.foodsonic.ru (далее – Сайт), направляемой (заполненной) с использованием Сайта.

    Под персональными данными я понимаю любую информацию, относящуюся ко мне как к Субъекту Персональных Данных, в том числе мои фамилию, имя, отчество, адрес, контактные данные (телефон, электронная почта, почтовый адрес), фотографии, иную другую информацию. Под обработкой персональных данных я понимаю сбор, систематизацию, накопление, уточнение, обновление, изменение, использование, распространение, передачу, в том числе трансграничную, обезличивание, блокирование, уничтожение, бессрочное хранение), и любые другие действия (операции) с персональными данными.

    Обработка персональных данных Субъекта Персональных Данных осуществляется исключительно в целях регистрации Субъекта Персональных Данных в базе данных «Доставка» с последующим направлением Субъекту Персональных Данных почтовых сообщений и смс-уведомлений, в том числе рекламного содержания, от «Доставка», его аффилированных лиц и/или субподрядчиков, информационных и новостных рассылок и другой информации рекламно-новостного содержания.

    Датой выдачи согласия на обработку персональных данных Субъекта Персональных Данных является дата отправки регистрационной веб-формы с Сайта «Доставка».

    Обработка персональных данных Субъекта Персональных Данных может осуществляться с помощью средств автоматизации и/или без использования средств автоматизации в соответствии с действующим законодательством РФ и внутренними положениями «Доставка».

    «Доставка» принимает необходимые правовые, организационные и технические меры или обеспечивает их принятие для защиты персональных данных от неправомерного или случайного доступа к ним, уничтожения, изменения, блокирования, копирования, предоставления, распространения персональных данных, а также от иных неправомерных действий в отношении персональных данных, а также принимает на себя обязательство сохранения конфиденциальности персональных данных Субъекта Персональных Данных. «Доставка» вправе привлекать для обработки персональных данных Субъекта Персональных Данных субподрядчиков, а также вправе передавать персональные данные для обработки своим аффилированным лицам, обеспечивая при этом принятие такими субподрядчиками и аффилированными лицами соответствующих обязательств в части конфиденциальности персональных данных.

    Я ознакомлен(а), что:

    • настоящее согласие на обработку моих персональных данных, указанных при регистрации на Сайте «Доставка», направляемых (заполненных) с использованием Cайта, действует в течение 20 (двадцати) лет с момента регистрации на Cайте «Доставка»;
    • согласие может быть отозвано мною на основании письменного заявления в произвольной форме;
    • предоставление персональных данных третьих лиц без их согласия влечет ответственность в соответствии с действующим законодательством Российской Федерации.