【アウトプット㊺】-Sass- ミックスインの引数に初期値を定義する

毎回値を定義するのは手間がかかるので、頻繁に使う値を引数の初期値として定義しておくと、初期値を変えたいときだけ値を書けば済むようになる。

▼SASS

//引数を使ったミックスインを定義する
@mixin box ($value: 3px) {
   padding: $value;
   background: #999;
   color: white;
}

//定義したミックスインを呼び出す
.note {
   @include box;
}

.noteA {
   @include box();
}


▼CSS

.note {
   padding: 3px;
   background: #999;
   color: white;
}
.noteA {
   padding: 3px;
   background: #999;
   color: white;
}

引数の初期値を定義したことで@includeでミックスインを呼び出す際に、その都度値を書かなくてもよくなる。
初期値の定義している場合は、「@include box;」でも、「@include box();」でもどちらでも可能。

引数を複数指定する

▼SASS

//引数を使ったミックスインを定義する
@mixin box ($margin: 30px 0, $padding: 10px 0) {
   margin:$margin;
   padding: $padding;
}
.note {
   @include box;
   border: 1px solid #ccc;
}
.item {
   @include box(0 0 50px, 20px);
   background: #eee;
}


▼CSS

.note {
   margin: 30px 0;
   padding: 10px 0;
   border: 1px solid #ccc;
}
.item  {
   margin: 0 0 50px;
   padding: 20px;
   background: #eee;
} 

.noteでは初期値がそのまま適用され、.itemでは初期値を上書きしてmarginとpaddingの値が適用された。

引数を複数指定しているとき、どちらか一方の値を変更したい

★第一引数だけ値を変更する

.item  {
   @include box(0 0 50px);
   background: #eee;
}

第一引数を変更する場合は、第二引数を省略して書けばOK!

★第二引数だけ値を変更する

.item {
   @include box($padding: 10px 0);
   background: #eee;
}

カンマを使用するプロパティには可変長引数を使用する

CSSにはプロパティによってはカンマを使用するものがある。
例)text-shadow, box-shadow
これらを値としてそのまま使うとエラーになってしまうので、以下のようなコードを書く必要がある。

▼SASS

//引数を使ったミックスインを定義する
@mixin box ($value) {
   text-shadow: $value;
}
.note {
   @include box((8px 8px 0 #999, 15px -10px 0 #eee));
}

//または

.note {
   @include box(unquote("8px 8px 0 #999, 15px -10px 0 #eee"));
}

▼CSS

.note {
   text-shadow:8px 8px 0 #999, 15px -10px 0 #eee;
}

text-shadoeの値をカンマ区切りで複数指定するとエラーになってしまうので、複数の値を()で囲うか、””で囲って文字列にする必要がある。
※””で囲うとコンパイルした時にそのまま残ってしまうのでunquote関数でクォーテーションを削除する必要がある。

カンマ区切りで複数指定をするとエラーになるのか。。

ミックスインには引数1つにつき1つの値しか渡すことができないので、カンマ区切りを使うと渡した値が複数になってしまうため、エラーになってしまうのが原因。

可読性をもっと上げるためには。。

引数の数を固定しないようにする可変長引数を使用すれば、複数指定をすることができる。
可変長引数は、引数の後に「…」と書けばOK!

@mixin box ($value…) {
   text-shadow: $value;
}
.note {
   @include box(8px 8px 0 #999, 15px -10px 0 #eee);
}

//または

.note {
   @include box(8px 8px 0 #999, 15px -10px 0 #eee);
}

いいなと思ったら応援しよう!