seilog-ger
[ URL:seilog.org ] Writtern by Seiji Nakamura

2024/6/20 (更新日:2024/6/20)

SCSSの効率的な繰り返し処理:forループ内で:nth-child( ) を使う手順

forループを使った効率的な繰り返し処理の手順がわかりますか?

forループ内で、:nth-child()を使い繰り返し処理をする手順を解説します。

煩雑なクラス指定などをせずに、スマートに処理することができるようになります。

ぜひご活用してください。

1.forループ内で:nth-child()を使い繰り返し処理をする手順

by MR_PANDA pixabay

例題を使い、はじめに、クラス指定を使った初歩的な処理のやり方を説明し、

次に、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.まとめ

by D_Van_Rensburg pixabay


for文内で、nth-childを使った表現を解説致しました。

* :nth-child自体の基本的な使い方を理解したい方は、下記を参照ください。

CSSで:nth-child :nth-of typeを使って要素の順番を表す方法とその違い

繰り返し処理ができる部分に使用すると、シンプルなコーディングができますのでやってみてください。

参考にしてもらえれば幸いです。

最後まで読んでいただきありがとうございます。

説明できる内容は限られていますが、極力正確に伝えるように心がけました。

足りない部分、適切でない部分、補足などが有りましたらご指摘等お願いいたします。

Copyright–Seiji Nakamura, 2024 All Rights Reserved.

関連記事