0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Возможно главной особенностью миксинов является то, что они могут принимать аргументы, которые могут быть использованы внутри. В программировании такие участки кода называются<em>функциями</em>. Они призваны облегчить переиспользование кода. Как же нам использовать это в SASS? Возьмём простой класс mx-10, который делает отступы слева и справа на 10 пикселей.</p>
1
<p>Возможно главной особенностью миксинов является то, что они могут принимать аргументы, которые могут быть использованы внутри. В программировании такие участки кода называются<em>функциями</em>. Они призваны облегчить переиспользование кода. Как же нам использовать это в SASS? Возьмём простой класс mx-10, который делает отступы слева и справа на 10 пикселей.</p>
2
<p>Что делать, если мы захотим добавить больше таких классов? Например mx-5, mx-10, mx-15, mx-20 и так далее. Конечно можно руками прописать все нужные нам классы и задать им свойства. Но это достаточно монотонный и долгий процесс. Попробуем для начала вынести свойства margin-left и margin-right в миксин, чтобы не было необходимости каждый раз их указывать.</p>
2
<p>Что делать, если мы захотим добавить больше таких классов? Например mx-5, mx-10, mx-15, mx-20 и так далее. Конечно можно руками прописать все нужные нам классы и задать им свойства. Но это достаточно монотонный и долгий процесс. Попробуем для начала вынести свойства margin-left и margin-right в миксин, чтобы не было необходимости каждый раз их указывать.</p>
3
<p>Кажется, что мало того, что ничего особо не поменялось, так мы ещё и добавили лишний код. Как нам это поможет в выносе дублирующего кода? Тут на сцену и выходит особенность миксинов принимать аргументы.<em>Аргумент - некая переменная, от которой зависит результат выполнения функции</em>. Аргументы указываются в круглых скобках и могут иметь любое имя. Каждый аргумент указывается с ключевым символом $. Если аргументов несколько, то они перечисляются через запятую. Добавим два аргумента в наш миксин. Первый аргумент будет указывать на значение свойства margin-right, а второй аргумент на значение свойства margin-left.</p>
3
<p>Кажется, что мало того, что ничего особо не поменялось, так мы ещё и добавили лишний код. Как нам это поможет в выносе дублирующего кода? Тут на сцену и выходит особенность миксинов принимать аргументы.<em>Аргумент - некая переменная, от которой зависит результат выполнения функции</em>. Аргументы указываются в круглых скобках и могут иметь любое имя. Каждый аргумент указывается с ключевым символом $. Если аргументов несколько, то они перечисляются через запятую. Добавим два аргумента в наш миксин. Первый аргумент будет указывать на значение свойства margin-right, а второй аргумент на значение свойства margin-left.</p>
4
<p>Вторым шагом по превращению простого миксина в функцию является подстановка аргументов в свойства внутри миксина. Для этого вместо значений свойств подставим нужные нам аргументы.</p>
4
<p>Вторым шагом по превращению простого миксина в функцию является подстановка аргументов в свойства внутри миксина. Для этого вместо значений свойств подставим нужные нам аргументы.</p>
5
<p>Если попробовать сейчас скомпилировать этот код, то получим следующую ошибку:</p>
5
<p>Если попробовать сейчас скомпилировать этот код, то получим следующую ошибку:</p>
6
<p>Препроцессор сообщает нам, что отсутствует аргумент $mr. Это значит, что как только мы в миксин добавляем аргументы, то вызов без них невозможен. Даже если сами аргументы не будут использованы в миксине. Поправим ошибку и добавим 2 аргумента при вызове миксина. Аргументы также указываются в круглых скобках и туда мы помещаем то значение, которое ожидаем. В данном случае 10px.</p>
6
<p>Препроцессор сообщает нам, что отсутствует аргумент $mr. Это значит, что как только мы в миксин добавляем аргументы, то вызов без них невозможен. Даже если сами аргументы не будут использованы в миксине. Поправим ошибку и добавим 2 аргумента при вызове миксина. Аргументы также указываются в круглых скобках и туда мы помещаем то значение, которое ожидаем. В данном случае 10px.</p>
7
<p>После компиляции мы получим именно тот код, который и хотели получить с самого начала:</p>
7
<p>После компиляции мы получим именно тот код, который и хотели получить с самого начала:</p>
8
<p>Разница теперь в том, что мы можем удобно писать новые классы без постоянного дублирования свойств.</p>
8
<p>Разница теперь в том, что мы можем удобно писать новые классы без постоянного дублирования свойств.</p>
9
<p>А в данном случае, так как значения свойств у нас повторяются, то мы можем передавать всего один аргумент и использовать его в двух свойствах сразу.</p>
9
<p>А в данном случае, так как значения свойств у нас повторяются, то мы можем передавать всего один аргумент и использовать его в двух свойствах сразу.</p>
10
<p>Это хорошая практика, если свойства "родственны" друг другу. Использовать один аргумент для передачи, например, свойства height и margin-top не очень хорошая идея, даже если они и имеют одно значение. Так вы внесёте путаницу в код и уменьшите собственные возможности по кастомизации селекторов.</p>
10
<p>Это хорошая практика, если свойства "родственны" друг другу. Использовать один аргумент для передачи, например, свойства height и margin-top не очень хорошая идея, даже если они и имеют одно значение. Так вы внесёте путаницу в код и уменьшите собственные возможности по кастомизации селекторов.</p>
11
<p>В прошлом примере было показано, что случится, если не указать аргумент при вызове миксина. На самом деле это не всегда вызовет ошибку, так как миксины могут принимать<em>аргументы по умолчанию</em>. Если при вызове миксина не было указано никаких аргументов, то препроцессор будет пользоваться именно ими. Эти аргументы указываются непосредственно при создании миксина и перечислении аргументов. Всё, что нам нужно - указать значения, как у простой переменной. Это схоже с тем, как у переменной устанавливался флаг !default.</p>
11
<p>В прошлом примере было показано, что случится, если не указать аргумент при вызове миксина. На самом деле это не всегда вызовет ошибку, так как миксины могут принимать<em>аргументы по умолчанию</em>. Если при вызове миксина не было указано никаких аргументов, то препроцессор будет пользоваться именно ими. Эти аргументы указываются непосредственно при создании миксина и перечислении аргументов. Всё, что нам нужно - указать значения, как у простой переменной. Это схоже с тем, как у переменной устанавливался флаг !default.</p>
12
<p>Так как мы не указали аргументы при вызове миксина, то компилятор заберёт значение по умолчанию, которое было указано при создании миксина. После компиляции получится следующий CSS-код:</p>
12
<p>Так как мы не указали аргументы при вызове миксина, то компилятор заберёт значение по умолчанию, которое было указано при создании миксина. После компиляции получится следующий CSS-код:</p>
13
<p>Использование возможности миксинов принимать аргументы сильно помогает при создании шаблонов свойств с вендорными префиксами. В уроке<a>миксины</a>мы посмотрели, как сделать миксин со свойством box-shadow и его вендорными префиксами:</p>
13
<p>Использование возможности миксинов принимать аргументы сильно помогает при создании шаблонов свойств с вендорными префиксами. В уроке<a>миксины</a>мы посмотрели, как сделать миксин со свойством box-shadow и его вендорными префиксами:</p>
14
<p>Использовав возможность указывать аргументы, мы можем сильно сократить наш код при повторном использовании с другими значениями:</p>
14
<p>Использовав возможность указывать аргументы, мы можем сильно сократить наш код при повторном использовании с другими значениями:</p>
15
<p>После компиляции мы получим следующий CSS:</p>
15
<p>После компиляции мы получим следующий CSS:</p>
16
<h2>Передача свойств в миксин</h2>
16
<h2>Передача свойств в миксин</h2>
17
<p>Помимо аргументов, в миксин мы можем передавать целый CSS-код. Это очень удобно, если помимо каких-то значений нам нужно работать с кастомным<em>CSS</em>, который изначально отстутствует в миксине.</p>
17
<p>Помимо аргументов, в миксин мы можем передавать целый CSS-код. Это очень удобно, если помимо каких-то значений нам нужно работать с кастомным<em>CSS</em>, который изначально отстутствует в миксине.</p>
18
<p>Передать контент в миксин можно следующим образом:</p>
18
<p>Передать контент в миксин можно следующим образом:</p>
19
<p>Получить этот контент внутри миксина можно с помощью конструкции @content, которая возьмёт всё тело из вызова миксина и добавит его туда, где была указана конструкция @content.</p>
19
<p>Получить этот контент внутри миксина можно с помощью конструкции @content, которая возьмёт всё тело из вызова миксина и добавит его туда, где была указана конструкция @content.</p>
20
<p>После компиляции мы получим следующий<em>CSS</em>код:</p>
20
<p>После компиляции мы получим следующий<em>CSS</em>код:</p>
21
21