Sassの基礎、@mixin(ミックスイン)の使い方
CSSでデザインを構築していく中でSassを利用していくと、作業効率とメンテナンス性の高いコードを書いていくことができます。
Sassでのコードの書き方はいろいろありますが、ここでは「@mixin(ミックスイン)」のコードの書き方についてご紹介していきます。
@mixinとは、よく利用するCSSのスタイルを定義しておいて、別の場所で使い回せるようにする機能のことです。
また、その定義のスタイルに「値」を「引き渡す」ことができる引数も使えます。
プログラミングでいうところの、ユーザー定義関数(独自関数)のように、プログラムをまとめて定義しておいて、使いたい時に関数を呼び出して処理を実行するのと同じです。
CSSでもプログラミングのように、要素にあてるスタイルを管理していくことができます。
ネストや変数を扱う基礎については、無料で人気のコードエディタ「Visual Studio Code」のターミナルを利用した、手軽にコンパイルする方法と一緒に、以下の記事でご紹介しています。
それでは、@mixinの使い方を見ていきましょう。
@mixinの使い方
まずは、@mixinの基本的な書き方です。
@mixinと宣言してから、半角スペースを空けてmixinの名前を決めます。
その後に波括弧「{ }」のブロック内にスタイルを定義します。
@mixin mixinの名前 {
//スタイルを定義
}
セレクタ {
@include mixinの名前;
}
では、サンプルコードで見ていきましょう。
コンテンツを覆うブロックをいくつか用意してみます。
HTML
<section>
<div class="block01"></div>
<div class="block02"></div>
<div class="block03"></div>
</section>
続いて、Sassファイルに使い回せるCSSスタイルを定義していきます。
Sass(style.scss)
@mixin baseBlock {
width: 100%;
max-width: 800px;
height: 100%;
min-height: 200px;
margin: 2em auto 0;
border: 5px solid #bbb;
}
.block01 {
@include baseBlock;
background: #d8bebe;
}
.block02 {
@include baseBlock;
background: #b3b4e6;
}
.block03 {
@include baseBlock;
background: #bae6b6;
}
mixinの名前はわかりやすく「baseBlock」としました。
mixinの宣言の後、mixinのブロック内にベースとなるスタイルを定義します。
そして、コンテンツを覆うクラス名を付けた要素に対して、「@include」でmixinの定義を呼び出します。
あとは、ベースとなるスタイルに各要素に違う背景色を指定しました。
以下、コンパイル後のCSSになります。
CSS(style.css)
.block01 {
width: 100%;
max-width: 800px;
height: 100%;
min-height: 200px;
margin: 2em auto 0;
border: 5px solid #bbb;
background: #d8bebe;
}
.block02 {
width: 100%;
max-width: 800px;
height: 100%;
min-height: 200px;
margin: 2em auto 0;
border: 5px solid #bbb;
background: #b3b4e6;
}
.block03 {
width: 100%;
max-width: 800px;
height: 100%;
min-height: 200px;
margin: 2em auto 0;
border: 5px solid #bbb;
background: #bae6b6;
}
CSSファイルのコードは上から適応されますので、@mixinの宣言は先に記述してください。
mixinでスタイルを定義した後に、そのmixin名の定義が利用できます。
@mixinで引数を使う
mixinは引数を扱うこともできます。
mixinの名前の後、括弧「( )」内に定義のスタイルに引き渡すための引数(変数)を設定します。
そして、スタイルの定義内で引数を使っていきます。
@mixin mixinの名前($引数名) {
//スタイルを定義
}
セレクタ {
@include mixinの名前(引数の値);
}
引数には、初期値も設定できます。
また、カンマ(,)区切りで複数指定することも可能です。
@mixin mixinの名前($引数名:初期値) {
//スタイルを定義
}
セレクタ {
@include mixinの名前;
}
@mixin mixinの名前($引数名1:初期値, $引数名2:初期値) {
//スタイルを定義
}
セレクタ {
@include mixinの名前(引数名1の値, 引数名2の値);
}
@includeで呼び出す際に、変数の値を設定していきます。
サンプルとして、borderプロパティの値を引数を使って設定してみます。
Sass(style.scss)
@mixin baseBlock($bWeight, $bStyle, $bColor) {
width: 100%;
max-width: 800px;
height: 100%;
min-height: 200px;
margin: 2em auto 0;
border: $bWeight $bStyle $bColor;
}
.block01 {
@include baseBlock(5px, solid, #d86767);
background: #d8bebe;
}
.block02 {
@include baseBlock(5px, solid, #5c5ee4);
background: #b3b4e6;
}
.block03 {
@include baseBlock(5px, solid, #59e74c);
background: #bae6b6;
}
borderプロパティに設定する線の太さと種類、色に対して、引数名の値で引き渡します。
複数の引数を設定したり初期値を設定していく場合は、宣言した引数の順番で値を設定します。
初期値を設定している場合は、設定する引数の数が少ないと、宣言した引数の順番の最初の引数から設定となり、設定しなかった引数については、初期値が適応されます。
Sass(style.scss)
@mixin baseBlock($bWeight: 2px, $bStyle: solid, $bColor: #777) {
width: 100%;
max-width: 800px;
height: 100%;
min-height: 200px;
margin: 2em auto 0;
border: $bWeight $bStyle $bColor;
}
.block01 {
@include baseBlock;
background: #d8bebe;
}
.block02 {
@include baseBlock(5px, dashed);
background: #b3b4e6;
}
.block03 {
@include baseBlock(5px, solid, #59e74c);
background: #bae6b6;
}
引数を何も設定していなければ、すべて初期値となります。
以下、複数の引数を初期値と一緒に設定したSassファイルのコンパイル後のCSSになります。
CSS(style.css)
.block01 {
width: 100%;
max-width: 800px;
height: 100%;
min-height: 200px;
margin: 2em auto 0;
border: 2px solid #777;
background: #d8bebe;
}
.block02 {
width: 100%;
max-width: 800px;
height: 100%;
min-height: 200px;
margin: 2em auto 0;
border: 5px dashed #777;
background: #b3b4e6;
}
.block03 {
width: 100%;
max-width: 800px;
height: 100%;
min-height: 200px;
margin: 2em auto 0;
border: 5px solid #59e74c;
background: #bae6b6;
}
初期値のままでいくのか、または少し調整するのかはmixinの定義をうまく活用しながら、うまくコントロールしていくことができます。
以下、ここまでの実装結果になります。
動画(4分ほど)
動画では、コンパイル作業をSassファイルの保存のタイミングで、自動で行っています。
無料で便利なコードエディタ「Visual Studio Code」での自動コンパイル方法については、以下の記事でご紹介しています。
Webデザインの中で統一のスタイルを使っていく場合は、mixinの機能はとても便利です。
Sassでデザインしていく際は、ぜひ使ってみてください。