Использование переменных CSS в Bootstrap

@mdo 16 мая 2022 @hkr32 18 мая 2022

Bootstrap v5.2.0-beta1 added a slew of CSS custom properties, or CSS variables, across the :root level and all our core components. Here’s a quick look at how you can utilize them in your projects.

With CSS variables, you can now customize Bootstrap easier than ever, and without the need for a CSS preprocessor. All the power of Sass is still there behind the scenes, but CSS variables adds a ton of power for the future. Use and compose new values, updates styles globally without recompiling, set fallback values, setup new color modes, and more.

Let’s dig in.

CSS variables?

Their official name is custom properties, but they’re often referred to as CSS variables thanks to their most immediate use case for setting specific values. Consider reading the MDN CSS custom properties article or the CSS Tricks guide if you need a primer.

In a nutshell, CSS variables allow you to name frequently used values. For example, instead of writing #6f42c1 everywhere, you can set --purple: #6f42c1. Then you can use that variable later on with the var() function.

:root {
  --purple: #6f42c1;
}
.custom-element {
  color: var(--purple);
}

We use CSS variables in Bootstrap to set many property values globally, across our components, and in some of our utilities.

Groups of variables

When we talk about CSS variables in Bootstrap, we’re referring to three major groups:

  • Root variables — Globally scoped variables available on the :root element (<html> usually) and accessible by any element throughout the DOM.

  • Component variables — Variables scoped specifically to each component, usually on the component’s base class, and their modifier classes and Sass mixins.

  • Utility variables — Used as modifiers within other utility classes.

Regardless of where they are, all of our CSS variables are prefixed with --bs-, so you know where they’re coming from and how they might be used across codebases that mix Bootstrap’s CSS with additional custom styles. You’ll also notice that we don’t put all our component variables at the root level. This keeps CSS variables scoped to their intended use cases and prevents polluted variables in the global :root scope.

It’s also worth mentioning two larger efforts that are still to come around CSS variables:

  1. Adding CSS variables to all our forms
  2. Adding more nuanced global theme variables and support for color modes like dark mode.

These are likely coming in v5.3.0 (our next minor release after v5.2.0 stablizes), so in the mean time, check out the GitHub repo to see how things are shaping up.

Root variables

Root variables in web inspector

Bootstrap has a ton of root variables and we’ll only be adding more in future updates for the aforementioned color mode support. As of this post, we have the following CSS variables on the :root element:

  • Colors — All named colors, gray colors, and theme colors. This also includes all our $theme-colors in their rgb format.

  • Body font styles — Everything from font-size to color and more, all applied to our <body> element.

  • Shared properties — For property-value pairings that we consider theme specific, like link colors and border styles.

Root CSS variables are used extensively across other parts of Bootstrap to allow you to easily override our default styles at a global level. For example, if you wanted to adjust the default border-radius and link color for our components, you could override a couple variables instead of writing new selectors.

// custom.css
:root {
  --bs-border-radius: .5rem;
  --bs-link-color: #333;
}

You can even use other root variables to override those values:

// custom.css
:root {
  --bs-border-radius: var(--bs-border-radius-lg);
  --bs-link-color: var(--bs-gray-800);
}

Without CSS variables, you’d have to use a preprocessor like Sass or write new selectors for every instance of these properties across all components. The former is relatively easy, the latter not so much. CSS variables help solve that.

Component variables

On our components, CSS variables get even more power for customizing. Nearly everything under the Components section in our docs sidebar now has CSS variables available to you:

Scrollspy and close button have no relevant CSS variables, so they’re excluded here.

Throughout our documentation you’ll find examples of customizing our default components by overriding their CSS variables. One great example comes from our own docs where we write our own button styles to create a purple button.

.btn-bd-primary {
  --bs-btn-font-weight: 600;
  --bs-btn-color: var(--bs-white);
  --bs-btn-bg: var(--bd-violet);
  --bs-btn-border-color: var(--bd-violet);
  --bs-btn-border-radius: .5rem;
  --bs-btn-hover-color: var(--bs-white);
  --bs-btn-hover-bg: #{shade-color($bd-violet, 10%)};
  --bs-btn-hover-border-color: #{shade-color($bd-violet, 10%)};
  --bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
  --bs-btn-active-color: var(--bs-btn-hover-color);
  --bs-btn-active-bg: #{shade-color($bd-violet, 20%)};
  --bs-btn-active-border-color: #{shade-color($bd-violet, 20%)};
}

Which looks like this:

Custom Bootstrap docs button

Another great example is from our tooltips. You can add custom classes to tooltips and popovers in Bootstrap with data-bs-custom-class="custom-tooltip". Then, with one CSS variable, you can change the tooltip background and arrow color.

.custom-tooltip {
  --bs-tooltip-bg: var(--bs-primary);
}

Which looks like this:

Custom tooltip

There are dozens of CSS variables in play across our components. All of them are referenced in a new section on the relevant docs page. For example, here are our modal CSS variables. This is in addition to all the Sass variables, mixins, loops, and maps used for each component.

Utility variables

Not every utility class uses CSS variables, but the ones that do gain a good amount of power and customization. Background, border, and color utilities all have what we call “local CSS variables” to improve their usefulness. Each of them uses CSS variables to customize the alpha transparency value of rgba() colors.

Consider our background color utilities, .bg-*. By default each utility class has a local variable, --bs-bg-opacity with a default value of 1. To change the background utility alpha value, you can override that value with your own styles, or some new .bg-opacity-* utilities.

<div class="p-3 bg-success bg-opacity-25">
  ...
</div>

Here’s how .bg-success looks with all our .bg-opacity-* classes applied:

Background opacity examples

And the same is available for border color opacity (--bs-border-opacity and .border-opacity-*) and text color opacity (--bs-text-opacity and .text-opacity-*). So many color options are now available with these utilities.

By default, we ship with five values for these various opacity utilities.

Class names Alpha value
.text-opacity-10
.bg-opacity-10
.border-opacity-10
.1
.text-opacity-25
.bg-opacity-25
.border-opacity-25
.25
.text-opacity-50
.bg-opacity-50
.border-opacity-50
.5
.text-opacity-75
.bg-opacity-75
.border-opacity-75
.75
.text-opacity-100
.bg-opacity-100
.border-opacity-100
1

Expect more CSS variables to make their way into our utilities. There’s a lot of power in real-time customization, even for what we consider immutable styles.


Ready to get started with Bootstrap? Checkout the quick start guide so you can put these new CSS variables to work in your next project!

Иконки Bootstrap версия 1.8.2

@hkr32 13 мая 2022

Bootstrap Иконки версия 1.8.2 вышел с исправлениями ошибок и новым дизайном документации, как и остальные проекты.

Обзор исправлений иконок:

  • Исправлена обрезанная иконка bank
  • Исправлены правила заполнения для house-heart и house-heart-fill
  • Исправлены углы иконок пятиугольников, чтобы они соответствовали другим формам
  • Исправлены правила заполнения для x-lg
  • Исправлена обрезанная иконка tool

Для исправления проблемы, влияющей на баллы Google Lighthouse, добавлено font-display: block, чтобы решить проблему со шрифтом иконки.

Ищете новые иконки? Перейдите в трекер проблем, чтобы найти уже открытый запрос или создать новый.

Figma

Опубликован в сообществе Figma файл Bootstrap Icons Figma, который более доступен для тех, кто использует приложение.

Bootstrap 5.2.0 beta

@mdo 13 мая 2022 @hkr32 18 мая 2022

Bootstrap v5.2.0-beta1 уже доступен! Это самый крупный релиз со времен 5-й версии. В этом релизе переработанная документация, переменные CSS для всех компонентов, адаптивный offcanvas, новые хелперы и утилиты, улучшенные кнопки и элементы ввода, а также множество улучшения под капотом.

Учитывая размер обновления и время которое понадобилось на новую версию, выпустили его в виде бета-версии.

Редизайн документации

Bootstrap Purple™ стал намного ярче, все кажется совершенно новым. Переписана главная страница, чтобы показать все замечательные возможности Bootstrap.

Новая домашняя страницы

Посмотреть главную страницу в действии!

Новая страница документации

Очень много изменений. Упрощена панель навигации, отказались от вложенной навигации, изменили боковую панель для удобства поиска.

Выше представлено обновленное краткое руководство, которое теперь является пошаговым руководством по использованию Bootstrap через CDN.

Пикер выбора версии документации

Обновленная панель навигации имеет новый инструмент выбора версии для версии 5.2.0 и выше. В настоящее время нет планов связывать страницы между основными версиями.

Новый поиск

Поиск документации теперь осуществляется на основе последней версии Algolia DocSearch с улучшенным дизайном, который показывает даже ваши самые последние поисковые запросы.

Усовершенствования в дизайне

Кнопки до и после:

Обновленные кнопки

Инпуты:

Updated inputs

Переменные CSS компонента

В этом выпуске все компоненты теперь включают переменные CSS, чтобы обеспечить настройку в реальном времени, более простое оформление тем и (скоро) поддержку цветового режима, начиная с темного режима. Каждая страница компонента была обновлена, чтобы включить справочное руководство по соответствующим переменным CSS. Например, кнопки:

--#{$prefix}btn-padding-x: #{$btn-padding-x};
--#{$prefix}btn-padding-y: #{$btn-padding-y};
--#{$prefix}btn-font-family: #{$btn-font-family};
@include rfs($btn-font-size, --#{$prefix}btn-font-size);
--#{$prefix}btn-font-weight: #{$btn-font-weight};
--#{$prefix}btn-line-height: #{$btn-line-height};
--#{$prefix}btn-color: #{$body-color};
--#{$prefix}btn-bg: transparent;
--#{$prefix}btn-border-width: #{$btn-border-width};
--#{$prefix}btn-border-color: transparent;
--#{$prefix}btn-border-radius: #{$btn-border-radius};
--#{$prefix}btn-box-shadow: #{$btn-box-shadow};
--#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};
--#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);

Значения практически для каждой переменной CSS назначаются через переменную Sass, поэтому настройка с помощью CSS и Sass хорошо поддерживается. Также для некоторых компонентов включены примеры настройки с помощью переменных CSS.

Кастомная кнопка

Check out all our components to see how you can customize them to your liking.

Новый _maps.scss

Bootstrap v5.2.0-beta1 представляет новый файл Sass _maps.scss, из которого извлекаются несколько карт Sass, _variables.scss, чтобы исправить проблему, из-за которой обновления исходной карты не применялись к вторичным картам, расширяющим ее. Это не идеально, но решает давнюю проблему людей при работе с настраиваемыми картами.

Например, обновления $theme-colors не применялись к другим картам, которые полагались на них $theme-colors (например, $utilities-colors и другим), что приводило к нарушению рабочих процессов настройки. Подводя итог, можно сказать, что в Sass есть ограничение: после использования переменной или карты по умолчанию ее нельзя обновить. Подобный недостаток возникает и с переменными CSS, когда они используются для составления других переменных CSS.

Вот почему настройки переменных в Bootstrap должны идти после @import "functions";, но до @import "variables"; и остальной части стека импорта. То же самое относится и к картам Sass — вы должны переопределить значения по умолчанию, прежде чем они будут использоваться. Следующие карты были перенесены на новый _maps.scss:

  • $theme-colors-rgb
  • $utilities-colors
  • $utilities-text
  • $utilities-text-colors
  • $utilities-bg
  • $utilities-bg-colors
  • $negative-spacers
  • $gutters

Ваши пользовательские сборки Bootstrap CSS теперь должны выглядеть так с отдельным импортом карт.

  // Functions come first
  @import "functions";
  // Optional variable overrides here
+ $custom-color: #df711b;
+ $custom-theme-colors: (
+   "custom": $custom-color
+ );
  // Variables come next
  @import "variables";
+ // Optional Sass map overrides here
+ $theme-colors: map-merge($theme-colors, $custom-theme-colors);
+
+ // Followed by our default maps
+ @import "maps";
+
  // Rest of our imports
  @import "mixins";
  @import "utilities";
  @import "root";
  @import "reboot";
  // etc

Новые помощники и утилиты

  • Добавлены новые хелперы .text-bg-{color}. Вместо того, чтобы устанавливать отдельные утилиты .text-* и .bg-*, теперь вы можете использовать хелперы .text-bg-* для установки background-color контрастного переднего плана color.

  • Расширены font-weight utilities для включения .fw-semibold полужирных шрифтов.

  • Расширенные border-radius utilities, включающие два новых размера .rounded-4 и .rounded-5.

Expect more improvements here as v5’s development continues.

Отзывчивый offcanvas

Компонент Offcanvas теперь имее адаптивные варианты. Исходный класс .offcanvas остается неизменным — он скрывает содержимое во всех окнах просмотра. Чтобы сделать его отзывчивым, измените этот .offcanvas класс на любой .offcanvas-{sm|md|lg|xl|xxl}.

И многое другое!

  • Введена новая опция $enable-container-classes. — Теперь при выборе экспериментального макета CSS Grid, классы .container-* по-прежнему будут скомпилированы, если для этого параметра не установлено значение false. Контейнеры также теперь сохраняют свои значения отступа.

  • Более толстые разделители таблиц теперь доступны по желанию. — Удалили более толстую и трудную для переопределения границу между группами таблиц и переместили ее в дополнительный класс, который вы можете применить, .table-group-divider. Смотрите таблицу документации для примера.

  • Скролспай был переписан для использования Intersection Observer API, что означает, что вам больше не нужны относительные родительские оболочки, устаревшая конфигурация offset и многое другое. Обратите внимание на то, чтобы ваши реализации Scrollspy были более точными и последовательными в подсветке навигации.

  • Добавлен модификатор .form-check-reverse для изменения порядка меток и связанных с ними флажков/радио.

  • Добавлена ​​поддержка чередующихся столбцов таблицах через новый класс .table-striped-columns.

Полный список изменений смотрите в проекте на GitHub.

Скоро: Темный режим!

Большая часть работы, которую мы проделали в v5.2.0-beta1, была связана с добавлением темного режима в Bootstrap. Да, это наконец-то появится в следующем второстепенном релизе!

Темный режим

Добавляют множество новых глобальных переменных CSS, очищают стили документации и улучшают поддержку общей кастомизации. Некоторые детали и темы , над которыми ведется работа для темного режима:

  • Предоставляют плагин JS для переключения цветовых режимов? Сейчас просто создаем пользовательские функции для документации.

  • Текущая реализация построена с селекторами data-theme, которые позволяют явно переключать цветовой режим (через пользовательский контроль и системные настройки) и настраиваемые цветовые режимы за пределами light и dark.

  • Добавляют довольно много новых цветов снаружи $theme-colors, чтобы улучшить тонкую настройку пользовательского интерфейса. Они реализуются с помощью селекторов :root и [data-theme="{theme}"] для глобального использования.

Также в версии 5.3.0

Поддержите команду

Посетите страницу Open Collective или профили членов команды на GitHub, чтобы поддержать тех, кто занимается поддержкой Bootstrap.

Иконки Bootstrap версия 1.8.0

@hkr32 31 января 2022

Иконки Bootstrap v1.8.0 содержат более 140 новых иконок, в том числе десятки новых иконок с сердечками, готовых ко Дню святого Валентина, и десятки иконок типов файлов. Сейчас там почти 1700 иконок.

140+ новых иконок

Новые иконы любви в v1.8.0

Новые иконы типов файлов в v1.8.0

Miscellaneous new icons in v1.8.0

Ищете новые иконки? Перейдите в трекер проблем, чтобы найти уже открытый запрос или создать новый.

Figma

Опубликован в сообществе Figma файл Bootstrap Icons Figma, который более доступен для тех, кто использует приложение.

Иконки Bootstrap версия 1.7.0

@hkr32 01 ноября 2021

Иконки Bootstrap v1.7.0 содержат более 120 новых иконок. Сейчас там более 1500 иконок.

120 новых иконок

Новые иконки в v1.7.0