Поиск…


Синтаксис

  • @mixin mixin-name ($argument1, $argument, ...){ ... }

Создание и использование микширования

Чтобы создать mixin, используйте директиву @mixin .

@mixin default-box ($color, $borderColor) {
    color: $color;
    border: 1px solid $borderColor;
    clear: both;
    display: block;
    margin: 5px 0;
    padding: 5px 10px;
}

Вы можете указать список аргументов внутри скобок после имени mixin. Не забудьте запустить переменные с помощью $ и разделить их запятыми.

Чтобы использовать mixin в другом селекторе, используйте директиву @include .

footer, header{ @include default-box (#ddd, #ccc); }

Теперь стили из mixin будут использоваться в footer и header со значением #ccc для переменной $color и #ddd для переменной $borderColor .

Mixin с переменным аргументом

Есть несколько случаев в mixins, где во время использования могут быть одиночные или множественные аргументы. Возьмем случай border-radius где может быть один аргумент, такой как border-radius:4px; или несколько аргументов, таких как border-radius:4px 3px 2px 1px; ,

Традиционный с аргументами Keyword Аргументы будут выглядеть следующим образом:

@mixin radius($rad1, $rad2, $rad3, $rad4){
 -webkit-border-radius: $rad1 $rad2 $rad3 $rad4;
 -moz-border-radius: $rad1 $rad2 $rad3 $rad4;
 -ms-border-radius: $rad1 $rad2 $rad3 $rad4;
 -o-border-radius: $rad1 $rad2 $rad3 $rad4;
 border-radius: $rad1 $rad2 $rad3 $rad4;
}

И используется как

.foo{
    @include radius(2px, 3px, 5px, 6px)
}

Вышеприведенный пример является сложным (для кодирования, чтения и обслуживания), и если вы не можете передать только одно значение или два значения, это вызовет ошибку, и для использования одного, двух или там значений вы должны определить три других микса.

Используя переменную Аргумент, вам не нужно беспокоиться о том, сколько аргументов вы можете передать. Переменные аргументы могут быть объявлены путем определения имени переменной, за которым следуют три точки (...) . Ниже приведен пример переменного аргумента.

@mixin radius($radius...)
{  
    -webkit-border-radius: $radius;
    -moz-border-radius: $radius;
    -ms-border-radius: $radius;
    -o-border-radius: $radius;
    border-radius: $radius;
}

И используется как

.foo{
    @include radius(2px 3px 5px 6px)
}
.foo2{
    @include radius(2px 3px)
}
.foo3{
    @include radius(2px)
}

Вышеприведенный пример намного проще (для кодирования, поддержки и чтения), вам не нужно беспокоиться о том, сколько аргументов придет - это один или несколько .

Если имеется более одного аргумента, и в любом случае вы хотите получить доступ ко второму аргументу, вы можете сделать это, записав имя propertyname : nth(variable_name, 2) .

Разумные значения по умолчанию

SASS дает вам возможность опускать любой параметр, кроме тех, которые вы хотите переписать, конечно. Давайте снова возьмем пример по default-box :

@mixin default-box ($color: red, $borderColor: blue) {
    color: $color;
    border: 1px solid $borderColor;
    clear: both;
    display: block;
    margin: 5px 0;
    padding: 5px 10px;
}

Здесь мы теперь будем называть mixin, перезаписав второй параметр

footer, header{ @include default-box ($borderColor: #ccc); }

значение $borderColor равно #ccc , тогда как $color остается red

Дополнительные аргументы

Необязательные аргументы SASS позволяют использовать параметр, только если вы укажете его значение; в противном случае он будет проигнорирован. Возьмем пример следующего mixin:

@mixin galerie-thumbnail ($img-height:14em, $img-width: null) {
    width: $img-width;
    height: $img-height;
    outline: 1px solid lightgray;
    outline-offset: 5px;
}

Поэтому призыв к

.default { 
  @include galerie-thumbnail; 
}
.with-width { 
  @include galerie-thumbnail($img-width: 12em);
}
.without-height { 
  @include galerie-thumbnail($img-height: null);
}

просто выведет в файле CSS следующее:

.default {
  height: 14em;
  outline: 1px solid lightgray;
  outline-offset: 5px;
}

.with-width {
  width: 12em;
  height: 14em;
  outline: 1px solid lightgray;
  outline-offset: 5px;
}

.without-height {
  outline: 1px solid lightgray;
  outline-offset: 5px;
}

SASS не выводит свойства с null значением, что очень полезно, когда нам нужно включить необязательный аргумент в наш вызов или нет.

Директива @content

Mixins может быть передан блок SASS-совместимого кода, который затем становится доступным в mixin как директива @content .

@mixin small-screen {
  @media screen and (min-width: 800px;) {
    @content;
  }
}

@include small-screen {
  .container {
    width: 600px;
  }
}

И это будет выводить:

  @media screen and (min-width: 800px;) {
    .container {
      width: 600px;
    }
  }

Mixins могут использовать директиву @content и все еще принимать параметры.

@mixin small-screen($offset) {...


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow