Узнайте, как полностью кастомизировать компонент Alert из Bootstrap с помощью SCSS-переменных и переопределения стилей в рамках дизайн-системы.
В предыдущей статье мы рассмотрели различные уровни кастомизации и как изменить кнопку Primary в соответствии с желаемым дизайном. К концу статьи вы изменили переменные Bootstrap и добавили новый файл:
_btn.scss.

Папки forms и vendor
Сегодня мы разберём основные отличия между двумя папками стилей —  forms  и  vendor, а также рассмотрим кастомизацию более сложного компонента — Alert из CSS-фреймворка Bootstrap.
Папки forms и vendor похожи по назначению — обе содержат переопределённые стили для элементов форм и компонентов, которые невозможно изменить через переменные. Это означает, что если вы подключаете стороннюю библиотеку и хотите изменить её внешний вид, то такие стили должны размещаться в одной из этих папок.
Однако ключевое различие — в их названии. Папка forms используется только для стилей, связанных с элементами форм. А папка vendor предназначена для всех остальных стилей — включая элементы форм, если их необходимо изменить внутри конкретного компонента. На практике это редкий случай, так как одной из основ дизайн-системы является последовательность.
Текущая структура проекта выглядит следующим образом:
/src
  /styles
    /common
    /components
    /forms
      ├── _btn.scss
    /mixins
    /variables
      ├── _bootstrap.scss
      ├── _palette.scss
      ├── variables.scss
    /vendor
    ├── app.scss
    ├── vendor.scss
  styles.scssИзменение компонента Alert
Как мы уже обсуждали в четвертой части, для любого элемента формы или компонента в вашей дизайн-системе можно выделить четыре уровня кастомизации:
- Компоненты Alert во всём проекте. 
- Специфичные компоненты (например, success, warning, с иконками, с кнопкой закрытия и т.д.). 
- Компоненты Alert как составная часть другого компонента (например, Alert внутри модального окна). 
- Alert внутри вашего собственного пользовательского компонента. 
Первым шагом нужно проанализировать желаемые изменения и определить, на каком уровне их вносить. Давайте сравним дизайн компонентов и их дефолтное состояние в Bootstrap.

Как видно на изображении выше, нам нужно реализовать изменения на первых двух уровнях. Основные стили: font-family, font-weight, padding, color, border-width, border-radius должны применяться ко всем компонентам Alert. Свойство background-color нужно изменить для отдельных вариаций:  success,  warning, info и danger.
Переменные Bootstrap
Теперь откроем файл с переменными Bootstrap — _bootstrap.scss — и посмотрим, какие переменные мы можем использовать, чтобы добиться желаемого результата:
...
$font-family-sans-serif: Satoshi, sans-serif;
...
$alert-padding-y: 16px;
$alert-padding-x: 16px;
$alert-border-radius: 4px;
$alert-border-width: 0px;
...Так как шрифт Satoshi не установлен по умолчанию в операционных системах, его необходимо вручную скачать и установить с указанного сайта. В следующих статьях мы рассмотрим, как правильно подключать кастомные шрифты в проект.
Первая строка задаёт font-family по умолчанию для всего проекта, включая компоненты Alert. Остальные переменные настраивают сам компонент: padding, border-radius и border-width.
На следующем этапе мы изменим цвет текста и фона для конкретных вариантов Alert — это делается в файле _palette.scss. Пожалуйста, обновите следующие переменные:
...
$success-text-emphasis: #141414;
$info-text-emphasis: #141414;
$warning-text-emphasis: #141414;
$danger-text-emphasis: #141414;
...
$success-bg-subtle: #69d68f;
$info-bg-subtle: #91d5ff;
$warning-bg-subtle: #ffe1b8;
$danger-bg-subtle: #ffaf85;
...Важно: во второй статье была допущена ошибка — при импорте кастомных переменных Bootstrap в файл
vendor.scss, строку импорта нужно поместить сразу после импорта стандартных переменных Bootstrap. Это критично для корректной работы, так как Bootstrap преобразует SCSS-переменные в CSS-переменные. Правильная структура файла:
...
@import 'bootstrap/scss/functions';
@import 'bootstrap/scss/variables';
// custom variables
@import 'variables/variables';
@import 'bootstrap/scss/maps';
@import 'bootstrap/scss/mixins';
@import 'bootstrap/scss/utilities';
...Результат внесённых изменений можно увидеть на изображении ниже. Как видите, компонент почти соответствует требуемому дизайну:

Переопределение стилей в vendor
Поскольку не все стили можно изменить через переменные Bootstrap, некоторые из них требуется переопределять вручную. В нашем случае — только одно дополнительное изменение.
Создайте новый файл — _alert.scss — и поместите его в папку  /src/styles/vendor:
// alert
.alert {
    font-weight: 500;
}Используйте такой подход для всех сторонних компонентов, стили которых вы хотите переопределить. Просто создайте файл с названием компонента и поместите туда соответствующие стили. Так вы сохраните чистую и понятную структуру проекта.
Затем откройте файл app.scss и импортируйте новый файл:
// forms styles
@import './forms/_btn';
// vendor styles
@import './vendor/_alert';И финальный результат:

Заключение
В этой статье мы разобрали, как кастомизировать компонент Alert из Bootstrap так, чтобы он соответствовал вашему дизайну. В итоге вы:
- Изменили переменные Bootstrap, связанные с компонентом Alert и цветовой палитрой. 
- Создали файл - _alert.scssс переопределениями стилей, которые нельзя задать через переменные.
Это последняя статья в текущей серии по интеграции Bootstrap. В будущих публикациях мы продолжим изучать лучшие практики разработки и поддержки дизайн-систем. Следите за обновлениями!
 
          