【CSS】modifierをカスタムデータ属性で指定

どうも、くまだです。

FLOCSSやBEMで使うmodifierの書き方を、CSSのカスタムデータ属性で指定するメモ。

カスタムプロパティについては前にも書きました。

modifierをカスタムデータ属性で指定

例えば普通に書くと、

<div class="boxWrap boxWrap--col3">
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
</div>
.boxWrap {
  inline-size: 100%;
  --gridGap:20px;

  display: grid;
  grid-template-columns: repeat(var(--gridCol),1fr);
  gap: var(--gridGap);
}


.boxWrap.boxWrap--col3 {
  --gridCol:3;
}

.box {
  inline-size: 100%;
  block-size: 100px;
  background-color: red;
}

modifierの部分「boxWrap–col3」のところをCSSのカスタムデータ属性に置き換えます。

<!-- カスタムデータ属性 -->
<div class="boxWrap" data-col="col-3">
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
</div>
.boxWrap {
  inline-size: 100%;
  --gridGap:20px;

  display: grid;
  grid-template-columns: repeat(var(--gridCol),1fr);
  gap: var(--gridGap);

}

.boxWrap[data-col ="col-3"] { /* カスタムデータ属性で指定*/
  --gridCol:3;
}

.box {
  inline-size: 100%;
  block-size: 100px;
  background-color: red;
}

modifierが複数、つまりカスタムデータ属性に複数指定する場合は、

<div class="boxWrap" data-col="col-2 col-3 col-4">
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
</div>
.boxWrap {
  inline-size: 100%;
  --gridGap:20px;

  display: grid;
  grid-template-columns: repeat(var(--gridCol),1fr);
  gap: var(--gridGap);

}

.boxWrap[data-col ~="col-2"] {
  --gridCol:2;
}

@media (min-width: 768px) {
  .boxWrap[data-col ~="col-3"] {
    --gridCol:3;
  }
}

@media (min-width: 992px) {
  .boxWrap[data-col ~="col-4"] {
    --gridCol:4;
  }
}


.box {
  inline-size: 100%;
  block-size: 100px;
  background-color: red;
}

という感じ。

modifierのクラスが複数つくとコードが見にくいので、カスタムデータ属性を使うのもあり。

ここまで読んでくださりありがとうございました。

この記事を書いた人