HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>При использовании Bootstrap разработчики часто используют утилиты - небольшие классы, которые добавляют новые CSS-свойства к компоненту. Например, утилита d-* устанавливает один из видов отображения с помощью свойства display:</p>
1 <p>При использовании Bootstrap разработчики часто используют утилиты - небольшие классы, которые добавляют новые CSS-свойства к компоненту. Например, утилита d-* устанавливает один из видов отображения с помощью свойства display:</p>
2 <ul><li>block</li>
2 <ul><li>block</li>
3 <li>flex</li>
3 <li>flex</li>
4 <li>inline</li>
4 <li>inline</li>
5 <li>none</li>
5 <li>none</li>
6 <li>table</li>
6 <li>table</li>
7 </ul><p>Внутри фреймворка уже определены десятки утилит, которых хватит "на все случаи жизни". Но при разработке большого проекта может возникнуть потребность в создании новой утилиты или дополнения уже существующей.</p>
7 </ul><p>Внутри фреймворка уже определены десятки утилит, которых хватит "на все случаи жизни". Но при разработке большого проекта может возникнуть потребность в создании новой утилиты или дополнения уже существующей.</p>
8 <p>Для этого в Bootstrap 5 используется<strong>Utility API</strong>- набор SASS функций, которые преобразуют массив свойств в утилиты.</p>
8 <p>Для этого в Bootstrap 5 используется<strong>Utility API</strong>- набор SASS функций, которые преобразуют массив свойств в утилиты.</p>
9 <p>В этом уроке рассмотрим создание новой утилиты cursor и изменим утилиту background. Мы научимся добавлять возможность менять цвет фона блока при наведении на него курсора мыши.</p>
9 <p>В этом уроке рассмотрим создание новой утилиты cursor и изменим утилиту background. Мы научимся добавлять возможность менять цвет фона блока при наведении на него курсора мыши.</p>
10 <h2>Utility API</h2>
10 <h2>Utility API</h2>
11 <p>Рассмотрим, как выглядит утилита в Bootstrap с точки зрения Utility API. Для этого достаточно открыть файл по пути _bootstrap/scss/<em>utilities.scss</em>и выбрать любую утилиту из массива. Для примера возьмем утилиту width:</p>
11 <p>Рассмотрим, как выглядит утилита в Bootstrap с точки зрения Utility API. Для этого достаточно открыть файл по пути _bootstrap/scss/<em>utilities.scss</em>и выбрать любую утилиту из массива. Для примера возьмем утилиту width:</p>
12 <p>Здесь представлена базовая структура любой утилиты:</p>
12 <p>Здесь представлена базовая структура любой утилиты:</p>
13 <ul><li>property - CSS-свойство, которое будет изменяться</li>
13 <ul><li>property - CSS-свойство, которое будет изменяться</li>
14 <li>class - имя класса утилиты. Для ширины утилита будет иметь классы w-*</li>
14 <li>class - имя класса утилиты. Для ширины утилита будет иметь классы w-*</li>
15 <li>values - список CSS-значений. Это массив, где ключ - название, которое будет использовано в названии класса, а значение - содержание свойства</li>
15 <li>values - список CSS-значений. Это массив, где ключ - название, которое будет использовано в названии класса, а значение - содержание свойства</li>
16 </ul><p>После компиляции появятся классы:</p>
16 </ul><p>После компиляции появятся классы:</p>
17 <p>Поля property и values - обязательные. Без них Bootstrap не скомпилируется и выдаст ошибку.</p>
17 <p>Поля property и values - обязательные. Без них Bootstrap не скомпилируется и выдаст ошибку.</p>
18 <p>class является необязательным полем. Если его не указать, то в качестве названия утилиты, будет взято значение из поля property.</p>
18 <p>class является необязательным полем. Если его не указать, то в качестве названия утилиты, будет взято значение из поля property.</p>
19 <p>Старайтесь создавать утилиты с понятными именами. Конечное название класса должно быть понятным для разработчиков. Например, сокращать свойство background до b не лучший вариант, так как такое название неоднозначно.</p>
19 <p>Старайтесь создавать утилиты с понятными именами. Конечное название класса должно быть понятным для разработчиков. Например, сокращать свойство background до b не лучший вариант, так как такое название неоднозначно.</p>
20 <p>Настало время создать новую утилиту.</p>
20 <p>Настало время создать новую утилиту.</p>
21 <h2>Создание утилиты Cursor</h2>
21 <h2>Создание утилиты Cursor</h2>
22 <p>Перед созданием утилиты определим, какое свойство изменяется и какое значение необходимо получить.</p>
22 <p>Перед созданием утилиты определим, какое свойство изменяется и какое значение необходимо получить.</p>
23 <p>В этой утилите мы будем добавлять для блока свойство cursor, которое изменяет внешний вид курсора. Свойство принимает множество значений, но выберем основные:</p>
23 <p>В этой утилите мы будем добавлять для блока свойство cursor, которое изменяет внешний вид курсора. Свойство принимает множество значений, но выберем основные:</p>
24 <ul><li>pointer</li>
24 <ul><li>pointer</li>
25 <li>help</li>
25 <li>help</li>
26 <li>wait</li>
26 <li>wait</li>
27 <li>progress</li>
27 <li>progress</li>
28 <li>zoom-in</li>
28 <li>zoom-in</li>
29 <li>zoom-out</li>
29 <li>zoom-out</li>
30 <li>none</li>
30 <li>none</li>
31 </ul><p>Как и с компонентами, мы не будем изменять внутренние файлы Bootstrap, а создадим отдельный файл для утилит:</p>
31 </ul><p>Как и с компонентами, мы не будем изменять внутренние файлы Bootstrap, а создадим отдельный файл для утилит:</p>
32 <p>В файл добавим новую утилиту. Для этого смержим уже существующий массив с утилитами $utilities и новым массивом утилиты cursor:</p>
32 <p>В файл добавим новую утилиту. Для этого смержим уже существующий массив с утилитами $utilities и новым массивом утилиты cursor:</p>
33 <p>В массиве values не используется схема "ключ-значение". Значит, в имени класса будет использоваться полное название значения свойства. Например, .cursor-pointer.</p>
33 <p>В массиве values не используется схема "ключ-значение". Значит, в имени класса будет использоваться полное название значения свойства. Например, .cursor-pointer.</p>
34 <p>Схема подключения файла с генерацией утилит отличается от подключения файла с компонентами. Хитрость в том, что нужно подключить утилиты не до или после подключения Bootstrap, а между подключением файла утилит и генерацией самих классов.</p>
34 <p>Схема подключения файла с генерацией утилит отличается от подключения файла с компонентами. Хитрость в том, что нужно подключить утилиты не до или после подключения Bootstrap, а между подключением файла утилит и генерацией самих классов.</p>
35 <p>Для этого используется такая структура подключения файлов:</p>
35 <p>Для этого используется такая структура подключения файлов:</p>
36 <p>Сгенерируем весь проект и получим новые классы утилит:</p>
36 <p>Сгенерируем весь проект и получим новые классы утилит:</p>
37 <p>Теперь эти утилиты можно использовать в своем проекте и изменять их при необходимости. Например, использовать изменение курсора при наведении мыши на элемент.</p>
37 <p>Теперь эти утилиты можно использовать в своем проекте и изменять их при необходимости. Например, использовать изменение курсора при наведении мыши на элемент.</p>
38 <p>Рассмотрим изменение утилиты на примере свойства background.</p>
38 <p>Рассмотрим изменение утилиты на примере свойства background.</p>
39 <h2>Изменение утилиты</h2>
39 <h2>Изменение утилиты</h2>
40 <p>Изменение утилиты не сильно отличается от создания новой. Нужно скопировать все значения старой утилиты и добавить в нее новое свойство.</p>
40 <p>Изменение утилиты не сильно отличается от создания новой. Нужно скопировать все значения старой утилиты и добавить в нее новое свойство.</p>
41 <p>Для примера изменим утилиту background и добавим возможность изменять цвет блока при наведении. За создание утилит, которые работают при псевдоклассе (:hover, :focus и т.д.) отвечает свойство Utility API state. Если добавить в него название псевдокласса, сгенерируются новые классы:</p>
41 <p>Для примера изменим утилиту background и добавим возможность изменять цвет блока при наведении. За создание утилит, которые работают при псевдоклассе (:hover, :focus и т.д.) отвечает свойство Utility API state. Если добавить в него название псевдокласса, сгенерируются новые классы:</p>
42 <p>После компиляции проекта помимо классов bg-primary bg-seccondary появятся новые классы, которые работают при наведении на элемент:</p>
42 <p>После компиляции проекта помимо классов bg-primary bg-seccondary появятся новые классы, которые работают при наведении на элемент:</p>
43 <p>Все возможные свойства Utility API указаны в документации. Не бойтесь экспериментировать и создавать новые утилиты.</p>
43 <p>Все возможные свойства Utility API указаны в документации. Не бойтесь экспериментировать и создавать новые утилиты.</p>
44 <h2>Выводы</h2>
44 <h2>Выводы</h2>
45 <p>В этом уроке мы познакомились с возможностью Bootstrap под названием Utility API. Это АПИ позволяет генерировать новые и изменять уже существующие утилиты без ручного написания классов.</p>
45 <p>В этом уроке мы познакомились с возможностью Bootstrap под названием Utility API. Это АПИ позволяет генерировать новые и изменять уже существующие утилиты без ручного написания классов.</p>
46 <p>Utility API позволяет существенно расширять возможность утилит и добавлять им:</p>
46 <p>Utility API позволяет существенно расширять возможность утилит и добавлять им:</p>
47 <ul><li>Работу для разных разрешений экрана</li>
47 <ul><li>Работу для разных разрешений экрана</li>
48 <li>Работу для разных состояний элемента</li>
48 <li>Работу для разных состояний элемента</li>
49 <li>Дополнять или удалять значения</li>
49 <li>Дополнять или удалять значения</li>
50 </ul><p>Это поможет составить грамотную дизайн-систему, которая легко расширяется и обновляется вместе с обновлением самого Bootstrap.</p>
50 </ul><p>Это поможет составить грамотную дизайн-систему, которая легко расширяется и обновляется вместе с обновлением самого Bootstrap.</p>