
SassはCSSを効率的に記述するために開発されたメタ言語(拡張言語)です。
Sassについての基礎知識は下記の記事で紹介しています。
Sassの@for
、@each
、@while
といった繰り返し処理(ループ構文)が用意されています。
この記事では、@for
の使い方を解説し、スタイルを自動的に生成してコードの重複を減らし、保守性と柔軟性を高める方法を紹介します。
Sassの@forとは?
Sassの@for
ディレクティブは、指定した数値の範囲内でループ処理を行う構文です。@for
のループ回数は常に1ずつ増加し、JavaScriptなどと違って増分をカスタマイズすることはできません。
基本構文
scss
@for $value from $since through | to $until { // 繰り返し処理 }
解説
$value
… ループインデックス※を置く任意の変数名。省略不可$since
… 開始値。through
: 終了値を含むto
:終了値を含まない$until
… 終了値。
※ループインデックス … 現在の回転数
※through
またはto
を利用する。
scss|1~3回目まで繰り返して出力する使用例
@for $i from 1 through 3 { .col-#{$i} { width: 100% / 3 * $i; } }
$i
という変数にループインデックスが順に代入され、それをもとにスタイルが繰り返し出力されます。$i
には、1回転は1、2回転目は2のように、現在の回転数が入ります。
@forのオススメポイント
Sassの@for
ディレクティブは、数値に規則性があるスタイルを効率的に量産したいときに非常に便利です。
- 同じ構造のスタイルを数値ベースで量産できる
例えば
.col-1
,.col-2
〜.col-12
のように、番号付きのクラスを大量に用意するといったケースは、レイアウト設計では頻出です。@for
を使えば、たった数行のコードで規則的なスタイルを自動生成できます。@for $i from 1 through 12 { .col-#{$i} { width: (100% / 12) * $i; } }
- クラス名やプロパティに規則性がある場合に最適
クラス名に連番を付けるだけでなく、
z-index
やfont-size
、opacity
など、数値が段階的に変化するスタイルにも最適です。
@forを使えば、同じ構造で値だけが異なるスタイルの出力をまとめて行えるため、コードの重複を大幅に減らすことができます。@for $i from 1 through 5 { .z-#{$i} { z-index: $i; } .opacity-#{$i} { opacity: $i * 0.2; } }
- 数を変えたいときにもループの範囲を変更するだけで済む
手書きのCSSでは、要素数を増やすたびに新しいクラスをコピペ・修正する必要がありますが、
@for
を使えば、ループの数値を変更するだけでスタイルを簡単に変更できます。
@for利用時の注意点
Sassの@for
は小さなミスが大きな出力ミスにつながることもあります。
便利な分だけ、仕組みを正しく理解して使うことが重要です。
@for
~to
/through
の違いを誤解する@for
は数値の繰り返しで利用するループ構文です。
数値の上限を含めたいのか・含めたくないのかを明確に理解して使い分けましょう。0
から始めたいときの扱いに注意CSS設計によっては、
.index-0
,.col-0
のように0
から始めたいケースもあります。0
をインデックスとして扱う場合、演算の結果が0
になったりfalse
と評価されることもあるので、@for内の処理内容にも気をつけましょう。@for $i from 0 through 2 { // $i = 0, 1, 2 .item-#{$i} { // $i = 0 の時 0px になるので注意 margin-top: (10px * $i); } }
その他の繰り返し構文と使い分け
Sassには、@for
以外に@each
、@while
という繰り返し構文があります。
それぞれ下記の記事で詳細に解説しています。
それぞれの違いと使い分けのポイントは下記の記事にまとめています。
まとめ
この記事では、@for
の使い方を解説し、数値の繰り返しの中でスタイルを自動的に生成してコードの重複を減らし、保守性と柔軟性を高める方法を紹介しました。@each
や@while
といったその他の繰り返し構文について、またそれぞれの使い分けと実用例は他の記事で紹介しています。@for
を使いこなしてスマートなコーディングをしていきましょう。
この記事が気に入ったらシェアしてください