2024/6/20 (更新日:2024/6/20)
SCSSの効率的な繰り返し処理:forループ内で:nth-child( ) を使う手順
forループを使った効率的な繰り返し処理の手順がわかりますか?
forループ内で、:nth-child()を使い繰り返し処理をする手順を解説します。
煩雑なクラス指定などをせずに、スマートに処理することができるようになります。
ぜひご活用してください。
1.forループ内で:nth-child()を使い繰り返し処理をする手順
例題を使い、はじめに、クラス指定を使った初歩的な処理のやり方を説明し、
次に、for文と:nth-child()を使い繰り返し処理をするやり方について説明します。
例題:五つの円の収縮に遅れを持たせて表示する。
ターゲット動作
See the Pen circle-animation by Seiji Nakamura (@sjnkmr_777) on CodePen.
*画面上部の[HTML][CSS][Result]をクリックすると、プログラミングコードおよび結果が表示されます。
1-1.classを使って個別に遅れを持たせる初歩的な方法
ターゲットの動作になるように、それぞれの円にクラス指定してアニメーション動作をコントロールするコーディングを解説します。
html
<div class="circle-animation">
<div class="item1"></div>
<div class="item2"></div>
<div class="item3"></div>
<div class="item4"></div>
<div class="item5"></div>
</div>
“circle-animation”クラス内に、五つのdivタグを定義
それぞれにクラス名(tem1~item5)をつけます。
後述の5つの円に対応しています。
SCSS
.circle-animation {
text-align: center;
& div{
display: inline-block;
width: 30px;
height: 30px;
background-color: blue;
border-radius: 50%;
animation: sk-circledelay 2s infinite;
}
& .item1 {
animation-delay: -0.2s;
}
& .item2 {
animation-delay: -0.4s;
}
& .item3 {
animation-delay: -0.6s;
}
& .item4 {
animation-delay: -0.8s;
}
& .item5 {
animation-delay: -1.0s;
}
}
@keyframes sk-circledelay {
0% {
transform: scale(0);
}
40% {
transform: scale(1);
}
80% {
transform: scale(0);
}
100% {
transform: scale(0);
}
}
【 緑色部で基本のスタイルを定義 】
青色の30pxの円を中央配置する
【 赤色部の各クラスで、アニメーションの遅れ時間を定義 】
それぞれの item クラスについて
円 のアニメーションの遅れ時間を指定
item1は、-0.2秒の遅れ
item2は、-0.4秒の遅れ
item3は、-0.6秒の遅れ
item4は、-0.8秒の遅れ
item5は、-1.0秒の遅れ
【 青色部で丸印のアニメーションを定義 】
アニメーション周期2秒で連続
0%,80%,100%で、倍率零
40%で、倍率100%
1-2.forと:nth-child()を使って遅れを持たせる方法
クラス指定の表現をリファクタリングします。
for 文と:nth-child()を用いて、アニメーションの遅れ時間を指定します。
html
<div class="circle-animation">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
“circle-animation”クラス内に、五つのdivタグを定義
それぞれが、後述の5つの円に対応しています。
SCSS
.circle-animation {
text-align: center;
& div{
display: inline-block;
width: 30px;
height: 30px;
background-color: blue;
border-radius: 50%;
animation: sk-circledelay 2s infinite;
@for $i from 1 through 5 {
&:nth-child(#{$i}) {
animation-delay: -0.2s*$i;
}
}
}
}
@keyframes sk-circledelay {
0% {
transform: scale(0);
}
40% {
transform: scale(1);
}
80% {
transform: scale(0);
}
100% {
transform: scale(0);
}
}
【 緑色部で基本のスタイルを定義 】
青色の30pxの円を中央配置する
【 赤色部のforループ内で、アニメーションの遅れ時間を定義 】
@for $i from 1 through 5 でi を1 から 5 までインクリメントして、{ }内の処理を五回実行する。
:nth-child(#{$i}) 内で、i 番目の 円 のアニメーションの遅れ時間を、-0.2s*$i 秒にする処理を実行します
【 青色部で丸印のアニメーションを定義 】
アニメーション周期2秒で連続
0%,80%,100%で、倍率零
40%で、倍率100%
*SASSの文法:変数 ” i ” の扱い
&:nth-child(#{$i}) {
animation-delay: -0.2s*$i;
}
セレクタ内:nth-child(#{$i})で変数を使用するためには、「シャープ波括弧で変数を囲む」という表記の方法を取ります。
インターポレーションと呼ばれます。
文字列の中で、変数名を取り出したいときは、「シャープ波括弧で変数を囲む」必要があります。
animation-delay: -0.2s*$i;のように単純に変数に値を設定する場合は、「$i」 で置き換えれば問題ありません。
2.まとめ
for文内で、nth-childを使った表現を解説致しました。
* :nth-child自体の基本的な使い方を理解したい方は、下記を参照ください。
CSSで:nth-child :nth-of typeを使って要素の順番を表す方法とその違い
繰り返し処理ができる部分に使用すると、シンプルなコーディングができますのでやってみてください。
参考にしてもらえれば幸いです。
最後まで読んでいただきありがとうございます。
説明できる内容は限られていますが、極力正確に伝えるように心がけました。
足りない部分、適切でない部分、補足などが有りましたらご指摘等お願いいたします。
Copyright–Seiji Nakamura, 2024 All Rights Reserved.