HTML Diff
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