HTML/CSS : データ属性(data-**)の使用

特定のデータが渡された場合に、柔軟にCSSの切り替えを行いたい時がある。

例えば、APIから渡された値に応じて、表示されるアイコンを切り替えたい場合や同じコンポーネント内で用途ごとにデザインを変えたい場合などが挙げられる。

今回は、データ属性を使用して、デザインを変更する方法についてまとめていく。

HTML : データ属性の設定方法

以下のようなソース(HTML)を用意する。

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>DEMO</title>
        <link rel="stylesheet" href="./style.css">
    </head>
    <body>
        <p class="demo" data-num="1">
            テキスト01
        </p>
        <p class="demo" data-num="2">
            テキスト02
        </p>
        <p class="demo" data-num="3">
            テキスト03
        </p>
    </body>
</html>

データ属性は、「data-⚪︎⚪︎」の⚪︎⚪︎に任意の値を設定可能で、設定値については基本文字列で指定する。ReactやNextjsでは、{}で変数等を埋め込むことで使用することがあるため、APIから返却された値をstateで管理し、その変数を設定することも可能である。

以下、例

data-test={変数名}

CSSでデータ属性にアクセス

CSSからHTMLで設定したデータ属性へアクセスするため、style.cssには以下のような記述を追加する。

.demo[data-num="1"] {
    background-color: red;
    color: white;
    width: 80%;
}

.demo[data-num="2"] {
    background-color: blue;
    color: yellow;
    width: 50%;
}

.demo[data-num="3"] {
    background-color: rgb(26, 186, 79);
    color: rgb(0, 0, 0);
    width: 20%;
}

HTMLでdata-numという名前のデータ属性へCSSからアクセスするためには、以下のように記述する必要がある。

HTML要素名[data-**="値"] {
  /* 省略   */
}

.class名[data-**="値"] {
  /* 省略   */
}

#id名[data-**="値"] {
  /* 省略   */
}

動作確認

データ属性の値によってデザインが変化しているか確認する。

以下のようにデザインが値によって変化していればOK。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です