0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Одним из самых простых, но при этом мощных инструментов в<em>SASS</em>являются<strong>переменные</strong>. Они просты по своей сути, но сильно облегчают жизнь при поддержке проекта.</p>
1
<p>Одним из самых простых, но при этом мощных инструментов в<em>SASS</em>являются<strong>переменные</strong>. Они просты по своей сути, но сильно облегчают жизнь при поддержке проекта.</p>
2
<p>С помощью переменных вы можете избавиться от дублирования кода. Посмотрим, как это работает на примере создания цветовой схемы проекта. Возьмём несколько основных цветов, которыми мы хотим пользоваться:</p>
2
<p>С помощью переменных вы можете избавиться от дублирования кода. Посмотрим, как это работает на примере создания цветовой схемы проекта. Возьмём несколько основных цветов, которыми мы хотим пользоваться:</p>
3
<ul><li>Тёмный - #303846</li>
3
<ul><li>Тёмный - #303846</li>
4
<li>Светлый - #f7f7f7</li>
4
<li>Светлый - #f7f7f7</li>
5
<li>Основной - #09d3ac</li>
5
<li>Основной - #09d3ac</li>
6
<li>Вторичный - #2196f3</li>
6
<li>Вторичный - #2196f3</li>
7
</ul><p>Теперь в начале нашего SASS-файла мы можем объявить переменные и записать эти значения в них. Для этого используется символ<strong>$</strong>и указывается уникальное имя.</p>
7
</ul><p>Теперь в начале нашего SASS-файла мы можем объявить переменные и записать эти значения в них. Для этого используется символ<strong>$</strong>и указывается уникальное имя.</p>
8
<p>Теперь мы можем использовать эти цвета в любой части нашего проекта, просто обращаясь к ним по имени.</p>
8
<p>Теперь мы можем использовать эти цвета в любой части нашего проекта, просто обращаясь к ним по имени.</p>
9
<p>В результате компиляции получится следующий CSS-код:</p>
9
<p>В результате компиляции получится следующий CSS-код:</p>
10
<p>Обратите внимание, что также, как и шаблонные селекторы, переменные не попадают в наш CSS-файл после компиляции. Они используются только внутри SASS-файла, что помогает избежать лишней информации внутри CSS.</p>
10
<p>Обратите внимание, что также, как и шаблонные селекторы, переменные не попадают в наш CSS-файл после компиляции. Они используются только внутри SASS-файла, что помогает избежать лишней информации внутри CSS.</p>
11
<p>Многие могут возразить, что переменные уже существуют в CSS и их использование похоже на то, что было описано выше. Вы будете правы - в CSS сейчас возможно управлять цветами точно таким же образом. Но при этом появляются лишние значения и само использование переменных чуть сложнее, чем это происходит в препроцессорах. Также важно понимать разницу переменных в SASS и в CSS. Переменные в CSS существуют в "настоящем времени", то есть они находятся в CSS-файле, их можно менять непосредственно в CSS и браузеры постоянно ссылаются на них, когда это необходимо. Переменные же в SASS исчезают после компиляции, а вместо них в CSS просто подставляются значения.</p>
11
<p>Многие могут возразить, что переменные уже существуют в CSS и их использование похоже на то, что было описано выше. Вы будете правы - в CSS сейчас возможно управлять цветами точно таким же образом. Но при этом появляются лишние значения и само использование переменных чуть сложнее, чем это происходит в препроцессорах. Также важно понимать разницу переменных в SASS и в CSS. Переменные в CSS существуют в "настоящем времени", то есть они находятся в CSS-файле, их можно менять непосредственно в CSS и браузеры постоянно ссылаются на них, когда это необходимо. Переменные же в SASS исчезают после компиляции, а вместо них в CSS просто подставляются значения.</p>
12
<h2>Область видимости</h2>
12
<h2>Область видимости</h2>
13
<p>Переменная может быть объявлена как внутри селектора, так и вне его. В зависимости от того, где была объявлена переменная, ей можно пользоваться или во всём проекте или только внутри определённого селектора. Посмотрите на пример такого кода:</p>
13
<p>Переменная может быть объявлена как внутри селектора, так и вне его. В зависимости от того, где была объявлена переменная, ей можно пользоваться или во всём проекте или только внутри определённого селектора. Посмотрите на пример такого кода:</p>
14
<p>В данном случае мы объявили две переменные:<em>$margin-top</em>и<em>$bg-color</em>. Впоследствии обе переменные были использованы в селекторе<em>.wrapper</em>. Что произойдёт после компиляции? На самом деле никакой компиляции не произойдёт. Мы получим сообщение об ошибке:</p>
14
<p>В данном случае мы объявили две переменные:<em>$margin-top</em>и<em>$bg-color</em>. Впоследствии обе переменные были использованы в селекторе<em>.wrapper</em>. Что произойдёт после компиляции? На самом деле никакой компиляции не произойдёт. Мы получим сообщение об ошибке:</p>
15
<p>Компилятор говорит нам, что на 9 строке используется неизвестная переменная. Но ведь она есть - мы её объявили на 4 строке! Да - в коде действительно существует переменная<em>$bg-color</em>, но она существует только внутри селектора<em>.card</em>и вне этого селектора просто невидна.</p>
15
<p>Компилятор говорит нам, что на 9 строке используется неизвестная переменная. Но ведь она есть - мы её объявили на 4 строке! Да - в коде действительно существует переменная<em>$bg-color</em>, но она существует только внутри селектора<em>.card</em>и вне этого селектора просто невидна.</p>
16
<p>Такое поведение называется<em>областью видимости переменной</em>. В зависимости от того, где мы объявили переменную, мы можем получать доступ к ней или во всём проекте, или только внутри одного селектора. Переменная<em>$margin-top</em>в этом примере является<strong>глобальной переменной</strong>, так как доступ к ней есть в любом участке нашего SASS-файла. Переменная<em>$bg-color</em>в примере является<strong>локальной переменной</strong>и доступна она только внутри того селектора, где была определена.</p>
16
<p>Такое поведение называется<em>областью видимости переменной</em>. В зависимости от того, где мы объявили переменную, мы можем получать доступ к ней или во всём проекте, или только внутри одного селектора. Переменная<em>$margin-top</em>в этом примере является<strong>глобальной переменной</strong>, так как доступ к ней есть в любом участке нашего SASS-файла. Переменная<em>$bg-color</em>в примере является<strong>локальной переменной</strong>и доступна она только внутри того селектора, где была определена.</p>
17
<p>Разберём ещё один пример:</p>
17
<p>Разберём ещё один пример:</p>
18
<p>Обратите внимание, что переменные<em>$main-bg</em>и<em>$header-bg</em>объявлены внутри селектора<em>.card</em>. Так как селекторы<em>.card-header</em>и<em>.card-body</em>лежат внутри селектора<em>.card</em>, то переменные<em>$main-bg</em>и<em>$header-bg</em>будут доступны для этих селекторов. После компиляции мы получим следующий CSS-код:</p>
18
<p>Обратите внимание, что переменные<em>$main-bg</em>и<em>$header-bg</em>объявлены внутри селектора<em>.card</em>. Так как селекторы<em>.card-header</em>и<em>.card-body</em>лежат внутри селектора<em>.card</em>, то переменные<em>$main-bg</em>и<em>$header-bg</em>будут доступны для этих селекторов. После компиляции мы получим следующий CSS-код:</p>
19
<h2>Именование переменных</h2>
19
<h2>Именование переменных</h2>
20
<p>Как говорилось выше, имена переменных должны быть уникальны. Это правило создано для предотвращения возможных ошибок. Ведь на самом деле<em>глобальная</em>и<em>локальная</em>переменная может иметь одно и то же имя. Попробуем в наш последний пример добавить глобальную переменную:</p>
20
<p>Как говорилось выше, имена переменных должны быть уникальны. Это правило создано для предотвращения возможных ошибок. Ведь на самом деле<em>глобальная</em>и<em>локальная</em>переменная может иметь одно и то же имя. Попробуем в наш последний пример добавить глобальную переменную:</p>
21
<p>Заметьте, что переменная<em>$main-bg</em>объявлена и в начале SASS-файла и в селекторе<em>.card</em>. Скорее всего с первого взгляда вы не определите какой<em>$main-bg</em>будет использован в проекте. Попробуем скомпилировать этот код. В этот раз ошибок не будет:</p>
21
<p>Заметьте, что переменная<em>$main-bg</em>объявлена и в начале SASS-файла и в селекторе<em>.card</em>. Скорее всего с первого взгляда вы не определите какой<em>$main-bg</em>будет использован в проекте. Попробуем скомпилировать этот код. В этот раз ошибок не будет:</p>
22
<p>Созданная внутри селектора<em>.card</em>переменная<em>$main-bg</em>на самом деле не имеет ничего общего с глобальной переменной<em>$main-bg</em>. Даже при условии того, что они имеют одинаковые имена. Но вот путаницу это может внести, поэтому никогда не используйте одинаковые имена для глобальных и локальных переменных.</p>
22
<p>Созданная внутри селектора<em>.card</em>переменная<em>$main-bg</em>на самом деле не имеет ничего общего с глобальной переменной<em>$main-bg</em>. Даже при условии того, что они имеют одинаковые имена. Но вот путаницу это может внести, поэтому никогда не используйте одинаковые имена для глобальных и локальных переменных.</p>
23
<h2>Подключение переменных из другого файла</h2>
23
<h2>Подключение переменных из другого файла</h2>
24
<p>Часто для удобной организации SASS стили разбиваются на несколько независимых файлов, в зависимости от их назначения. Например, у нас может быть следующая структура файлов:</p>
24
<p>Часто для удобной организации SASS стили разбиваются на несколько независимых файлов, в зависимости от их назначения. Например, у нас может быть следующая структура файлов:</p>
25
<p>└── scss/ ├── config.scss ├── default_variables.scss └── app.scss</p>
25
<p>└── scss/ ├── config.scss ├── default_variables.scss └── app.scss</p>
26
<p>В данной структуре у нас есть главный файл<em>app.scss</em>, в котором мы хотим подключить настройки из файла<em>config.scss</em>и стандартные настройки переменных из файла<em>default_variables.scss</em>. Подключить эти файлы в файл<em>app.scss</em>можно с помощью директив<strong>@use</strong>и<strong>@forward</strong>, указав путь к необходимому файлу:</p>
26
<p>В данной структуре у нас есть главный файл<em>app.scss</em>, в котором мы хотим подключить настройки из файла<em>config.scss</em>и стандартные настройки переменных из файла<em>default_variables.scss</em>. Подключить эти файлы в файл<em>app.scss</em>можно с помощью директив<strong>@use</strong>и<strong>@forward</strong>, указав путь к необходимому файлу:</p>
27
<p>Также при подключении SASS-файлов необязательно указывать расширение. Компилятор найдёт необходимый файл в указанной директории и подключит его. Значит, мы можем немного переписать код и не указывать лишнее расширение:</p>
27
<p>Также при подключении SASS-файлов необязательно указывать расширение. Компилятор найдёт необходимый файл в указанной директории и подключит его. Значит, мы можем немного переписать код и не указывать лишнее расширение:</p>
28
<p>Директивы<strong>@use</strong>и<strong>@forward</strong>загружают файл стилей и делает доступными его переменные:</p>
28
<p>Директивы<strong>@use</strong>и<strong>@forward</strong>загружают файл стилей и делает доступными его переменные:</p>
29
<p>Директива загружает переменные в определенное пространство имен, которое доступно по имени файла. Если мы подключим несколько файлов, в которых определена переменная с одним и тем же именем, то в каждом из них будет свое значение:</p>
29
<p>Директива загружает переменные в определенное пространство имен, которое доступно по имени файла. Если мы подключим несколько файлов, в которых определена переменная с одним и тем же именем, то в каждом из них будет свое значение:</p>
30
<p>При желании, можно импортировать переменные так, чтобы они были доступны без указания имени файла, в котором определены:</p>
30
<p>При желании, можно импортировать переменные так, чтобы они были доступны без указания имени файла, в котором определены:</p>
31
<p>Но если в нескольких файлах будет несколько переменных с одним именем, то такой импорт не будет работать сразу для всех этих файлов. Они должны импортировать так, чтобы имена не пересекались:</p>
31
<p>Но если в нескольких файлах будет несколько переменных с одним именем, то такой импорт не будет работать сразу для всех этих файлов. Они должны импортировать так, чтобы имена не пересекались:</p>
32
<p>Вернёмся к структуре нашего проекта. В<em>default_variables.scss</em>запишем базовые цвета для нашего проекта:</p>
32
<p>Вернёмся к структуре нашего проекта. В<em>default_variables.scss</em>запишем базовые цвета для нашего проекта:</p>
33
<p>Теперь, подключим этот файл к нашему основному файлу с переменными:</p>
33
<p>Теперь, подключим этот файл к нашему основному файлу с переменными:</p>
34
<p>Здесь используется директива<strong>@forward</strong>. Она позволяет передать все содержимое файла дальше по цепочке, куда будет импортироваться текущий файл. В нашем случае это позволяет использовать переменные из<em>default_variables.scss</em>в файле<em>app.scss</em>через импорт<em>config.scss</em>:</p>
34
<p>Здесь используется директива<strong>@forward</strong>. Она позволяет передать все содержимое файла дальше по цепочке, куда будет импортироваться текущий файл. В нашем случае это позволяет использовать переменные из<em>default_variables.scss</em>в файле<em>app.scss</em>через импорт<em>config.scss</em>:</p>
35
<p>После компиляции получим следующий CSS-код:</p>
35
<p>После компиляции получим следующий CSS-код:</p>
36
<p>Обратите внимание, что итоговое значение<em>$primary</em>появилось именно из файла<em>config.scss</em>.</p>
36
<p>Обратите внимание, что итоговое значение<em>$primary</em>появилось именно из файла<em>config.scss</em>.</p>