1
1

More than 3 years have passed since last update.

HTMLで動的にクラス名をつける

Last updated at Posted at 2020-08-07

HTMLでeachやtimesで同じクラスを複数個作成した時に一つだけに別のcssを当てたくなるような状況が出てきたので、いっそのこと繰り返し処理中に異なるクラス名を動的に作成できないかと思ってやってみました。

どんな状況か


よく見ると、2つの箱の重なる部分の線が太くなっています。
cssは箱のborderを囲うものを当てています。
この2つの箱は同じクラス名で、cssも同じものを当てているためこうなってしまいました。

実際のコード

sample.html.haml
 - 2.times do |number|
   .history_single__category
     - case number
     - when 0
       = rec.donation_day
     - when 1
       = rec.inspection_method

このように、timesで2回同じクラスを作成しています。
そのため、上の図のようなことになっているので、動的にクラス名をつけてみたいと思います。

対策

sample.html.haml
 - 2.times do |number|
   .history_single__category{class: "category#{number}"}
     - case number
     - when 0
       = rec.donation_day
     - when 1
       = rec.inspection_method
sample.scss
 .category1 {
   border-left: none;
 }

今回の場合は、timesでnumberという変数を宣言しているので、それを使って2行目のようにクラスを動的に作成しています。
あとは、cssで2番目のクラス(今回の場合だとcategory1)に左のボーダーを消すようなcssを当てると、

このように他の部分と同じ線の太さにすることができました。

他にも

sample.html.haml
 - @records.each.with_index(1) do |record, i|
   .sample{class: "result#{i}"}

each_with_indexでも同じように使うことができます。
また、番号が0から始まるのがわかりづらいときはこのように1から始まるように指定してあげたほうが良いのかもしれません。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1