HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>При разработке нового сайта может не хватить стандартных компонентов. В этом случае можно пойти двумя путями:</p>
1 <p>При разработке нового сайта может не хватить стандартных компонентов. В этом случае можно пойти двумя путями:</p>
2 <ul><li>Переработать дизайн и подстроиться под готовые компоненты фреймворка</li>
2 <ul><li>Переработать дизайн и подстроиться под готовые компоненты фреймворка</li>
3 <li>Создать новые компоненты под свои нужды</li>
3 <li>Создать новые компоненты под свои нужды</li>
4 </ul><p>Благодаря функциям, переменным и миксинам в Bootstrap создать новый компонент будет не сложно. Главное - понимать принципы работы Bootstrap и использовать все возможности.</p>
4 </ul><p>Благодаря функциям, переменным и миксинам в Bootstrap создать новый компонент будет не сложно. Главное - понимать принципы работы Bootstrap и использовать все возможности.</p>
5 <p>В этом уроке мы создадим компонент цитаты. Он впишется в любой блог или новостное издание, когда нужно подчеркнуть мысль внутри статьи.</p>
5 <p>В этом уроке мы создадим компонент цитаты. Он впишется в любой блог или новостное издание, когда нужно подчеркнуть мысль внутри статьи.</p>
6 <p>Внешний вид компонента и его финальную верстку можно увидеть в<a>CodePen</a>.</p>
6 <p>Внешний вид компонента и его финальную верстку можно увидеть в<a>CodePen</a>.</p>
7 <p>Процесс создания компонента разделим на несколько этапов:</p>
7 <p>Процесс создания компонента разделим на несколько этапов:</p>
8 <ol><li>Определение структуры компонентов</li>
8 <ol><li>Определение структуры компонентов</li>
9 <li>Верстка базовой структуры</li>
9 <li>Верстка базовой структуры</li>
10 <li>Верстка классов-оформления для придания компоненту различных цветовых схем</li>
10 <li>Верстка классов-оформления для придания компоненту различных цветовых схем</li>
11 </ol><h2>Структура компонента</h2>
11 </ol><h2>Структура компонента</h2>
12 <p>Перед созданием стилей нужно определить, какие элементы будут использоваться в компоненте, и где будут нужны модификаторы. Структурно можно разбить компонент на следующие составляющие:</p>
12 <p>Перед созданием стилей нужно определить, какие элементы будут использоваться в компоненте, и где будут нужны модификаторы. Структурно можно разбить компонент на следующие составляющие:</p>
13 <ul><li>Главная обертка. Компонент называется<em>citation</em>. Класс будет выбран соответствующий. Блоки цитат должны иметь различные варианты оформления в виде изменения фона и цвета текста. В качестве цветов будут использованы значения из переменной $theme-colors</li>
13 <ul><li>Главная обертка. Компонент называется<em>citation</em>. Класс будет выбран соответствующий. Блоки цитат должны иметь различные варианты оформления в виде изменения фона и цвета текста. В качестве цветов будут использованы значения из переменной $theme-colors</li>
14 <li>Обертка для текста. Это блок с телом цитаты. Хоть данная обертка может не всегда быть нужна, как в случае с одной строкой текста, но при сложных цитатах желательно иметь свою обертку. В качестве класса можно выбрать класс<em>.citation-body</em></li>
14 <li>Обертка для текста. Это блок с телом цитаты. Хоть данная обертка может не всегда быть нужна, как в случае с одной строкой текста, но при сложных цитатах желательно иметь свою обертку. В качестве класса можно выбрать класс<em>.citation-body</em></li>
15 <li>Обертка для автора цитаты. Помимо имени автора она создает границу сверху для разделения частей компонента. Данная область может иметь и ссылки на цитаты, поэтому блок можно назвать<em>.citation-footer</em>без привязки к автору</li>
15 <li>Обертка для автора цитаты. Помимо имени автора она создает границу сверху для разделения частей компонента. Данная область может иметь и ссылки на цитаты, поэтому блок можно назвать<em>.citation-footer</em>без привязки к автору</li>
16 </ul><h2>Верстка базовой структуры</h2>
16 </ul><h2>Верстка базовой структуры</h2>
17 <p>Создадим одну базовую разметку для компонента:</p>
17 <p>Создадим одну базовую разметку для компонента:</p>
18 <p>Сейчас выбрана семантичная верстка для цитат, но компонент должен работать при любой структуре. Это значит, что в стилях не должно быть привязки к тегам.</p>
18 <p>Сейчас выбрана семантичная верстка для цитат, но компонент должен работать при любой структуре. Это значит, что в стилях не должно быть привязки к тегам.</p>
19 <p>Второй этап создания компонента - создание файловой структуры. В Bootstrap каждый компонент располагается в отдельном файле. Также необходимо создать отдельный файл, где будет подключение Bootstrap и самого компонента. Таким файлом будет<em>main.scss</em>.</p>
19 <p>Второй этап создания компонента - создание файловой структуры. В Bootstrap каждый компонент располагается в отдельном файле. Также необходимо создать отдельный файл, где будет подключение Bootstrap и самого компонента. Таким файлом будет<em>main.scss</em>.</p>
20 <p>Общий вид файловой структуры:</p>
20 <p>Общий вид файловой структуры:</p>
21 <p>В файле main.scss_ подключим Bootstrap и компонент Citation:</p>
21 <p>В файле main.scss_ подключим Bootstrap и компонент Citation:</p>
22 <p>Теперь можно перейти к верстке блока цитат. В Bootstrap существуют свои стили для цитат и для этого есть четыре переменные в файле _<em>variables.scss</em>. Их можно использовать во время разработки компонента. Это поможет сохранить преемственность нашего компонента и стандартных стилей цитат.</p>
22 <p>Теперь можно перейти к верстке блока цитат. В Bootstrap существуют свои стили для цитат и для этого есть четыре переменные в файле _<em>variables.scss</em>. Их можно использовать во время разработки компонента. Это поможет сохранить преемственность нашего компонента и стандартных стилей цитат.</p>
23 <p>Для создания отступов воспользуемся массивом $spacers, который имеет следующую структуру:</p>
23 <p>Для создания отступов воспользуемся массивом $spacers, который имеет следующую структуру:</p>
24 <p>Все эти значения помогут создать структуру блока<em>.citation</em>:</p>
24 <p>Все эти значения помогут создать структуру блока<em>.citation</em>:</p>
25 <p>В этом примере основные свойства, такие как отступы, цвет, размеры вынесены в CSS-переменные. Этот подход появился в последних версиях Bootstrap и используется для создания тем. Главным триггером появления такого подхода стала возможность использования светлой и темной темы.</p>
25 <p>В этом примере основные свойства, такие как отступы, цвет, размеры вынесены в CSS-переменные. Этот подход появился в последних версиях Bootstrap и используется для создания тем. Главным триггером появления такого подхода стала возможность использования светлой и темной темы.</p>
26 <h3>Создание кавычек в компоненте</h3>
26 <h3>Создание кавычек в компоненте</h3>
27 <p>Для создания кавычек воспользуемся псевдоэлементом ::before, который создаст новый элемент сразу после открытия тега с классом citation. Внутри псевдоэлемента используем абсолютно позиционированный элемент со шрифтом "Times New Roman". Для этого создадим переменную $font-family-serif в файле<em>main.scss</em>:</p>
27 <p>Для создания кавычек воспользуемся псевдоэлементом ::before, который создаст новый элемент сразу после открытия тега с классом citation. Внутри псевдоэлемента используем абсолютно позиционированный элемент со шрифтом "Times New Roman". Для этого создадим переменную $font-family-serif в файле<em>main.scss</em>:</p>
28 <p>Теперь все готово для создания псевдоэлемента:</p>
28 <p>Теперь все готово для создания псевдоэлемента:</p>
29 <h3>Создание футера компонента</h3>
29 <h3>Создание футера компонента</h3>
30 <p>Основная верстка контейнера для цитат готова. Теперь можно перейти к созданию стилей для .citation-footer. Можно обратить внимание, что пропущены стили для .citation-body. Это сделано по причине того, что все необходимые стили будут унаследованы от родительского блока .citation. В будущем эту обертку можно использовать для указания классов-утилит Bootstrap или создания новых модификаторов.</p>
30 <p>Основная верстка контейнера для цитат готова. Теперь можно перейти к созданию стилей для .citation-footer. Можно обратить внимание, что пропущены стили для .citation-body. Это сделано по причине того, что все необходимые стили будут унаследованы от родительского блока .citation. В будущем эту обертку можно использовать для указания классов-утилит Bootstrap или создания новых модификаторов.</p>
31 <p>Задача футера - указать наклонное начертание шрифта и установить границу сверху вместе со всеми отступами. Так как автор цитаты всегда указывается шрифтом меньшим, чем сама цитата, воспользуемся переменной $blockquote-footer-font-size:</p>
31 <p>Задача футера - указать наклонное начертание шрифта и установить границу сверху вместе со всеми отступами. Так как автор цитаты всегда указывается шрифтом меньшим, чем сама цитата, воспользуемся переменной $blockquote-footer-font-size:</p>
32 <p>Основная верстка компонента закончена. Если воспользоваться созданным компонентом, то получим<a>следующий блок</a>.</p>
32 <p>Основная верстка компонента закончена. Если воспользоваться созданным компонентом, то получим<a>следующий блок</a>.</p>
33 <h2>Создание классов-модификаторов цветового оформления</h2>
33 <h2>Создание классов-модификаторов цветового оформления</h2>
34 <p>Последняя задача - создание классов-модификаторов, которые добавят фоновый цвет для цитат. Помимо этого эти классы должны переопределить цвет текста на белый для создания правильного контраста.</p>
34 <p>Последняя задача - создание классов-модификаторов, которые добавят фоновый цвет для цитат. Помимо этого эти классы должны переопределить цвет текста на белый для создания правильного контраста.</p>
35 <p>С массивом $theme-colors возможно пройтись по всем цветам и добавить свойство background-color. Массив $theme-colors имеет следующие значения:</p>
35 <p>С массивом $theme-colors возможно пройтись по всем цветам и добавить свойство background-color. Массив $theme-colors имеет следующие значения:</p>
36 <p>Так как это ассоциативный массив, то для его перебора можно воспользоваться функцией @each:</p>
36 <p>Так как это ассоциативный массив, то для его перебора можно воспользоваться функцией @each:</p>
37 <p>Здесь мы меняем только заданные переменные для замены цвета фона и текста. Для "красоты" были использованы не просто цвета, а их специальные версии, где фон осветляется, а текст становится темнее. Такой же подход используется в компоненте Alert.</p>
37 <p>Здесь мы меняем только заданные переменные для замены цвета фона и текста. Для "красоты" были использованы не просто цвета, а их специальные версии, где фон осветляется, а текст становится темнее. Такой же подход используется в компоненте Alert.</p>
38 <p>В результате компиляции появятся следующие стили:</p>
38 <p>В результате компиляции появятся следующие стили:</p>
39 <p>Так как все цвета берутся из массива, то смена цветовой темы всего проекта приведет и к смене цветов этого компонента.</p>
39 <p>Так как все цвета берутся из массива, то смена цветовой темы всего проекта приведет и к смене цветов этого компонента.</p>
40 <p>Разработка компонента закончена. Его всегда можно доработать, создав дополнительные классы-модификаторы или дополнительно адаптировав под различные разрешения экрана. Принцип создания этих дополнений не будет отличаться от того, что было рассмотрено в этом уроке.</p>
40 <p>Разработка компонента закончена. Его всегда можно доработать, создав дополнительные классы-модификаторы или дополнительно адаптировав под различные разрешения экрана. Принцип создания этих дополнений не будет отличаться от того, что было рассмотрено в этом уроке.</p>
41 <h2>Выводы</h2>
41 <h2>Выводы</h2>
42 <p>В этом уроке мы изучили, как создаются пользовательские компоненты с помощью Bootstrap. Чтобы связать новый компонент с "внутренностями" фреймворка следует использовать:</p>
42 <p>В этом уроке мы изучили, как создаются пользовательские компоненты с помощью Bootstrap. Чтобы связать новый компонент с "внутренностями" фреймворка следует использовать:</p>
43 <ul><li>Переменные Bootstrap, которые находятся в файле<em>_variables.scss</em></li>
43 <ul><li>Переменные Bootstrap, которые находятся в файле<em>_variables.scss</em></li>
44 <li>Функции и миксины фреймворка</li>
44 <li>Функции и миксины фреймворка</li>
45 <li>CSS-переменные</li>
45 <li>CSS-переменные</li>
46 </ul><p>При таком подходе смена настроек фреймворка или его обновление затронет и ваши созданные компоненты. Это поможет держать систему в однообразии.</p>
46 </ul><p>При таком подходе смена настроек фреймворка или его обновление затронет и ваши созданные компоненты. Это поможет держать систему в однообразии.</p>