Bootstrap 5: Продвинутый уровень
Теория: Создание пользовательского компонента
При разработке нового сайта может не хватить стандартных компонентов. В этом случае можно пойти двумя путями:
- Переработать дизайн и подстроиться под готовые компоненты фреймворка
- Создать новые компоненты под свои нужды
Благодаря функциям, переменным и миксинам в Bootstrap создать новый компонент будет не сложно. Главное — понимать принципы работы Bootstrap и использовать все возможности.
В этом уроке мы создадим компонент цитаты. Он впишется в любой блог или новостное издание, когда нужно подчеркнуть мысль внутри статьи.
Внешний вид компонента и его финальную верстку можно увидеть в CodePen.
Процесс создания компонента разделим на несколько этапов:
- Определение структуры компонентов
- Верстка базовой структуры
- Верстка классов-оформления для придания компоненту различных цветовых схем
Структура компонента
Перед созданием стилей нужно определить, какие элементы будут использоваться в компоненте, и где будут нужны модификаторы. Структурно можно разбить компонент на следующие составляющие:
- Главная обертка. Компонент называется citation. Класс будет выбран соответствующий. Блоки цитат должны иметь различные варианты оформления в виде изменения фона и цвета текста. В качестве цветов будут использованы значения из переменной
$theme-colors - Обертка для текста. Это блок с телом цитаты. Хоть данная обертка может не всегда быть нужна, как в случае с одной строкой текста, но при сложных цитатах желательно иметь свою обертку. В качестве класса можно выбрать класс .citation-body
- Обертка для автора цитаты. Помимо имени автора она создает границу сверху для разделения частей компонента. Данная область может иметь и ссылки на цитаты, поэтому блок можно назвать .citation-footer без привязки к автору
Верстка базовой структуры
Создадим одну базовую разметку для компонента:
Сейчас выбрана семантичная верстка для цитат, но компонент должен работать при любой структуре. Это значит, что в стилях не должно быть привязки к тегам.
Второй этап создания компонента — создание файловой структуры. В Bootstrap каждый компонент располагается в отдельном файле. Также необходимо создать отдельный файл, где будет подключение Bootstrap и самого компонента. Таким файлом будет main.scss.
Общий вид файловой структуры:
В файле main.scss_ подключим Bootstrap и компонент Citation:
Теперь можно перейти к верстке блока цитат. В Bootstrap существуют свои стили для цитат и для этого есть четыре переменные в файле _variables.scss. Их можно использовать во время разработки компонента. Это поможет сохранить преемственность нашего компонента и стандартных стилей цитат.
Для создания отступов воспользуемся массивом $spacers, который имеет следующую структуру:
Все эти значения помогут создать структуру блока .citation:
В этом примере основные свойства, такие как отступы, цвет, размеры вынесены в CSS-переменные. Этот подход появился в последних версиях Bootstrap и используется для создания тем. Главным триггером появления такого подхода стала возможность использования светлой и темной темы.
Создание кавычек в компоненте
Для создания кавычек воспользуемся псевдоэлементом ::before, который создаст новый элемент сразу после открытия тега с классом citation. Внутри псевдоэлемента используем абсолютно позиционированный элемент со шрифтом «Times New Roman». Для этого создадим переменную $font-family-serif в файле main.scss:
Теперь все готово для создания псевдоэлемента:
Создание футера компонента
Основная верстка контейнера для цитат готова. Теперь можно перейти к созданию стилей для .citation-footer. Можно обратить внимание, что пропущены стили для .citation-body. Это сделано по причине того, что все необходимые стили будут унаследованы от родительского блока .citation. В будущем эту обертку можно использовать для указания классов-утилит Bootstrap или создания новых модификаторов.
Задача футера — указать наклонное начертание шрифта и установить границу сверху вместе со всеми отступами. Так как автор цитаты всегда указывается шрифтом меньшим, чем сама цитата, воспользуемся переменной $blockquote-footer-font-size:
Основная верстка компонента закончена. Если воспользоваться созданным компонентом, то получим следующий блок.
Создание классов-модификаторов цветового оформления
Последняя задача — создание классов-модификаторов, которые добавят фоновый цвет для цитат. Помимо этого эти классы должны переопределить цвет текста на белый для создания правильного контраста.
С массивом $theme-colors возможно пройтись по всем цветам и добавить свойство background-color. Массив $theme-colors имеет следующие значения:
Так как это ассоциативный массив, то для его перебора можно воспользоваться функцией @each:
Здесь мы меняем только заданные переменные для замены цвета фона и текста. Для «красоты» были использованы не просто цвета, а их специальные версии, где фон осветляется, а текст становится темнее. Такой же подход используется в компоненте Alert.
В результате компиляции появятся следующие стили:
Так как все цвета берутся из массива, то смена цветовой темы всего проекта приведет и к смене цветов этого компонента.
Разработка компонента закончена. Его всегда можно доработать, создав дополнительные классы-модификаторы или дополнительно адаптировав под различные разрешения экрана. Принцип создания этих дополнений не будет отличаться от того, что было рассмотрено в этом уроке.
Выводы
В этом уроке мы изучили, как создаются пользовательские компоненты с помощью Bootstrap. Чтобы связать новый компонент с «внутренностями» фреймворка следует использовать:
- Переменные Bootstrap, которые находятся в файле _variables.scss
- Функции и миксины фреймворка
- CSS-переменные
При таком подходе смена настроек фреймворка или его обновление затронет и ваши созданные компоненты. Это поможет держать систему в однообразии.


