Sassの@forでループ処理を行う際、連番の数値は通常1,2,3のようになりますが、01,02,03や001,002,003など値の桁数を調整したいことがあるので、その実装方法をメモ。
サンプルコード
まずは@forで普通にループ処理を行なってみます。
@for $i from 1 through 20 { .test#{$i} { background-image: url(img#{$i}.jpg); } }
出力結果は以下のようになります。
.test1 { background-image: url(img1.jpg); } .test2 { background-image: url(img2.jpg); } 〜 略 〜 .test20 { background-image: url(img20.jpg); }
次に数値の桁数を揃える関数を作成してみます。
@function adjust_digits($num, $digit: 2) { $no: ""+$num; @while str-length($no) < $digit { $no: "0"+$no; } @return $no; }
$numに0以上の整数、$digitに桁数を指定します。
関数内の処理の仕組みは以前に作成したJavaScriptで桁数を揃える関数を作成すると同じです。
実際に関数を使ってみます。
@for $i from 1 through 20 { $no: adjust_digits($i, 2); .test#{$no} { background-image: url(img#{$no}.jpg); } }
これで2桁の連番で出力することができました。
.test01 { background-image: url(img01.jpg); } .test02 { background-image: url(img02.jpg); } 〜 略 〜 .test20 { background-image: url(img20.jpg); }
関数の第二引数の値を変更することで、桁数の変更もできます。
@for $i from 1 through 20 { $no: adjust_digits($i, 5); .test#{$no} { background-image: url(img#{$no}.jpg); } }
5桁の連番で出力できました。
.test00001 { background-image: url(img00001.jpg); } .test00002 { background-image: url(img00002.jpg); } 〜 略 〜 .test00020 { background-image: url(img00020.jpg); }
コメントが承認されるまで時間がかかります。