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>