Bootstrap 5: Продвинутый уровень
Теория: Темная и светлая тема
В версии Bootstrap 5.3 появилась новая функция — возможность создавать светлую и темную темы для проекта. Теперь не нужно писать кастомные CSS-стили для создания нескольких тем. Всё настраивается через переменные.
В этом уроке мы разберем, как работает светлая и темная темы в Bootstrap. Так же изучим изменение темы и создание собственных.
Переключение светлой и темной тем
В Bootstrap 5.3 светлая и темная темы включены по умолчанию. Для них всё готово. Нужно лишь научится их переключать. Это можно сделать с помощью HTML-атрибута data-bs-theme, который принимает одно из двух значений:
light— светлая тема. Используется по умолчаниюdark— темная тема
Использовать атрибут можно на любом теге HTML, но чаще всего его ставят на весь <body>. Это позволяет задать тему сразу для всего проекта.
В примере можно включать и выключать темную тему, чтобы посмотреть на все изменения.
Если посмотреть на изменения, можно заметить важную особенность — изменяется фон и цвет текста. Основные цвета, такие как primary и warning не изменяются, так как это основные цвета темы.
Также не изменяются размеры элементов, их расположение, внутренние и внешние отступы. Всё это не относится к изменениям темы, но можно влиять даже на это с помощью миксина color-mode.
Иногда возникает необходимость изменить не только фон и цвет текста, но и все основные цвета. Это может происходить по разным причинам, например, текущие цвета слишком яркие или тусклые для темной темы. Переопределим цвета для темной темы сайта.
Изменение темной темы
В уроке про изменение цветовой схемы мы создали новую пастельную схему. Вот как она выглядела:
Ее цвета не такие «агрессивные» для использования на темном фоне. Поэтому сделаем смену основных цветов только для темной темы. Для этого продолжим изменять файл brand-color.scss, который был создан в уроке про цветовые схемы. Вот как он выглядел:
Чтобы переделать цвета только для темной темы, нужно будет пойти на небольшие хитрости:
- Создать новые массивы
$theme-colorsи$theme-colors-rgb - Сгенерировать новые переменные цветовой схемы
- Обернуть все переменные и функции в миксин
color-modeс аргументомdark - Изменить порядок подключения файлов в файле main.scss
Пойдем по порядку. Создадим массивы $theme-colors и $theme-colors-rgb. Это создаст новую цветовую схему, которую в последствии будем использовать только для элементов с атрибутом data-bs-theme="dark":
Важно, что мы создаем массив $theme-colors-rgb, где все цвета переводятся в модель rgb. В таком формате используются цвета в некоторых компонентах. Например, в формате RGB используются цвета в тексте:
Теперь используем новые массивы и сгенерируем цвета. Для этого используем два цикла, которые сгенерируют переменные:
Этот код сгенерирует 12 переменных:
Чтобы эти переменные использовались только на темной теме, весь написанный код нужно обернуть в миксин color-mode со значением dark. Это добавит переменные в CSS-селектор [data-bs-theme=dark]:
Осталось подключить файл с цветовой схемой. Тут есть хитрость — подключить файл уже после подключения фреймворка. В Bootstrap еще не отточена система с изменением темной цветовой схемы, так как нет отдельного массива $theme-colors в настройках проекта.
По этой причине вначале полностью подключается Bootstrap, а затем отдельно подключается новая темная цветовая схема.
После компиляции в CSS-файле появится следующий код:
Добавим этот CSS в наш первый пример. Теперь при переключении темы меняются и основные цвета проекта.
Выводы
В Bootstrap 5.3 появилась возможность использовать несколько цветовых схем. Главным мотиватором такого решения стала возможность добавлять светлую и темную тему для проекта.
Переключение тем происходит с помощью изменения атрибута data-bs-theme. Этот атрибут может использоваться как на отдельном компоненте, так и на всем проекте. Для всего проекта атрибут устанавливают для тега <html> или <body>. Чтобы установить темную тему, используется значение dark.
Чтобы добавить произвольные цвета в цветовую схему для темной темы, используется следующий алгоритм:
- Создаются новые массивы $theme-colors и $theme-colors-rgb
- С помощью циклов генерируются CSS-переменные из созданных массивов
- Весь код оборачивается в миксин
color-modeс аргументомdark. Это позволит сгенерировать переменные только для селектора[data-bs-theme=dark] - В основном файле проекта новые цвета подключаются уже после подключения всего фреймворка


