• HOME > 
  • CSS > 
  • CSSのattr関数でHTMLの属性値を取得・表示する【ツー...

CSSのattr関数でHTMLの属性値を取得・表示する【ツールチップなど】

投稿日:

このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。

カテゴリー記事のアイキャッチ画像

本記事は執筆時点(2025年02月06日)の情報をベースにしております。掲載している情報が最新ではない可能性がありますので何卒ご容赦ください。

広告
広告

最近になって疑似要素で使うことができるCSSのattr関数の存在を知りました。コーディングの幅を広げる便利な関数だと感じましたので学んだ内容を備忘録としてまとめてみます。

attr関数とは?

CSSのattr関数は、HTML側で設定した要素の属性値をCSS内で参照し取得できる関数です(「attr」は属性を意味する「attribute」の略)。現在は疑似要素(before、after)におけるcontentプロパティでのみ利用可能となっています。

attr関数とは

例えば下記のようなツールチップ内のテキストの取得・表示にattr関数がよく用いられます。

attr関数を使ったツールチップの例

attr関数を使いこなすことで、表示させるコンテンツはHTML、デザインはCSSという両者の切り分けが実現できるので、コーディング時間を短縮したりソースコードの視認性向上が期待できます。

「class」や「id」、アンカー要素で使う「href」、input要素で使う「type」など、HTML要素に付加情報を与えるものを属性値と言います。独自のカスタムデータを持たせたい場合はdata属性を利用し、「data-〇〇」という形式で記述します。

CSSの疑似要素の使い方について詳しくはこちらのページにまとめています。

attr関数の使い方

attr関数は疑似要素(beforeもしくはaftre)のcontentプロパティで、下記のように記述して使用します。

attr関数の使い方

使い方の例として、下図のような日本語+英語の見出しタイトルのデザインをattr関数を用いて作ってみます。

日本語+英語の見出しタイトルのデザイン

はじめにHTMLのソースコードは以下の通りです。

それぞれ英語表記のデータを「data-en」というデータ属性に持たせています。

HTML

<h2 data-en="first">見出しタイトル</h2>
<h2 data-en="second">見出しタイトル</h2>

次にCSSでattr関数を使って「data-en」の属性値を取得・表示します(フォントや配置は別途設定)。

CSS

h2::before{
    content:attr(data-en);
    /*以下、英語装飾のデザインを任意に設定*/
}

表示させるテキストはHTML側に記述しているので、一度CSSでデザインを作ればその後CSSは触らずに済みます。これがattr関数のメリットと言えますね。

attr関数でツールチップを表示する

続いては冒頭に例として載せたツールチップの作り方です。

attr関数を使ったツールチップの例

HTMLでは要素にデータ属性「data-tt」を用意し、それぞれツールチップに表示させたいテキストを埋め込みます。

HTML

<p>詳しくは<a href="###" data-tt="別のページを開きます">こちら</a>をご覧ください。</p>
<p>詳しくは<a href="###" data-tt="外部サイトを開きます">こちら</a>をご覧ください。</p>

次に、マウスホバーされたらツールチップが表示されるようCSSを記述していきます。

CSS

a[data-tt]{
    font-weight:bold;
    position: relative;
}
a[data-tt]:hover::before{/*テキスト*/
    content:attr(data-tt);
    display: block;
    width:150px;
    background-color: #e9e9e9;
    color:#111;
    font-size:12px;
    padding:.25em .5em;
    border-radius:2px;
    position: absolute;
    top:calc(-100% - .5em);
    left:0;
}
a[data-tt]:hover::after{/*矢印*/
    content: "";
    width: 10px;
    height: 10px;
    background: #e9e9e9;
    clip-path: polygon(0 0, 100% 0, 50% 100%);
    position: absolute;
    top: -10px;
    left: 10px;
}

1行目a[data-tt]と書くことで、データ属性「data-tt」を持つ要素のみにツールチップのスタイルが適用されるようにしています。

5行目~要素がマウスホバーされたら、attr関数を使って「data-tt」を取得し、ツールチップとして表示させています。

18行目~ツールチップの矢印の部分です。

接頭語接尾語を付け加える

attr関数では属性値を表示する際に、接頭語接尾語を付け加えることが可能です。

ここでは先ほどのツールチップを例に、テキストの「を開きます」の部分を接尾語として表示させるように修正します。

HTML

<p>詳しくは<a href="###" data-tt="別のページ">こちら</a>をご覧ください。</p>
<p>詳しくは<a href="###" data-tt="外部サイト">こちら</a>をご覧ください。</p>

HTMLの方ではリンク先が「別ページ」なのか「外部サイト」なのかだけを記述すれば済むので、ソースコードはより簡潔になります。

CSS

a[data-tt]:hover::before{
    content:attr(data-tt) "を開きます";
    /*以下省略*/
}

2行目attr関数「attr(data-tt)」の後に半角スペースを空けて接尾語として加えたいテキストを記述します(接頭語の場合はattr関数の前に記述)。

その他attr関数の活用例

疑似要素自体が装飾を目的としているのでattr関数の用途も必然的に限定されますが、それ以外の活用方法としては以下が挙げられます。

attr関数でhref属性を取得する

下記のようなURLを書いたハイパーリンクを設置する場合、

URLを書いたハイパーリンクの例

従来であれば同じURLをテキストとして表示する部分とhref属性の部分との2回記述が必要になります。

URLを書いたハイパーリンクのコード

もしリンクを大量に掲載するページだとすれば、コーディングの手間も増え、コードの視認性も悪くなります。訂正が発生すれば2つとも直さなければいけません。

この時attr関数を使ってhref属性値を表示させれば、HTML側でのURLの記述は1回で済ませることが可能です。

HTML

<ul>
    <li><a href="https://hogehoge.com/news/20XX/01/helloworld.html">ブログ記事A</a></li>
    <li><a href="https://hogehoge.com/news/20XX/03/hogehoge.html">ブログ記事B</a></li>
</ul>

HTMLにはhref属性にだけURLを記述すればOKです。

CSS

a:after{
    content:"(" attr(href) ")";
}

2行目attr関数でhref属性を取得し、括弧をつけて表示させます。

tableのレスポンシブ化にattr関数を用いる

最後はtable要素をスマホなどで表示する際にattr関数を使って見出しを表示させる方法です。

表のレスポンシブ化として、スマホで表示する時に縦並びにレイアウトを変更するという手段を用いる場合、下図のような1行目に項目名があるタイプだと、項目名と表のコンテンツが離れてしまうので、分かりづらくなってしまいます。

表のレスポンシブ化としてスマホで表示する時に縦並びにレイアウトを変更する

そこで、スマホ時だけattr関数を利用して行見出しを表示するようにしてみます。

HTML

<table class="myTbl">
    <thead>
        <tr>
            <th>会社名</th>
            <th>都道府県</th>
            <th>電話番号</th>
            <th>メールアドレス</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <th data-label="会社名">(株)サンプル</th>
            <td data-label="都道府県">東京都</td>
            <td data-label="電話番号">03-1234-5678</td>
            <td data-label="メールアドレス">info@example.com</td>
        </tr>
        <tr>
            <th data-label="会社名">(株)hogehoge</th>
            <td data-label="都道府県">埼玉県</td>
            <td data-label="電話番号">04-2345-6789</td>
            <td data-label="メールアドレス">info@hogehoge.com</td>
        </tr>
    </tbody>
</table>

データ属性「data-label」にスマホ用の項目名を記述しています。

CSS

.myTbl{
    border:none;
    border-collapse: collapse;
    margin:1em auto;
    padding:.5em;
    background-color:#f9f9f9;
}
.myTbl th,.myTbl td{
    border:solid 1px #333;
    padding:.5em 1.5em;
    font-size:14px;
    text-align: center;
    font-weight: 400;
}
.myTbl th{
    background-color: #a0a0a0;
}
@media only screen and (max-width:600px){
    .myTbl,.myTbl thead,.myTbl tbody,.myTbl,.myTbl tr,.myTbl,.myTbl th,.myTbl,.myTbl td{
        display: block;
        width:100%;
    }
    .myTbl thead{
        display: none;
    }
    .myTbl tr{
        margin-bottom: .5em;
    }
    .myTbl th,.myTbl td{
        text-align: left;
        padding:0;
    }
    .myTbl th:before,.myTbl td:before{
        content:attr(data-label);
        display: inline-block;
        width:25%;
        color:#333;
        font-size:12px;
        font-weight: bold;
        text-align: left;
        padding: 1em;
        border-right: solid 1px #666;
        margin-right:1em;
    } 
}

19行目表を縦並びにします。

24行目theadは非表示にします。

33行目attr関数を使って項目名を表示、borderなどでデザインを調整しています。

attrを使った表のレスポンシブ化

行数が多いとデータ属性の記述も膨大になるので、ループでHTMLを生成するケースを除き、あまりスマートな方法とは言えないかもしれません(項目名を修正が発生したら、全て訂正しなければいけないので…)。

まとめ

以上が、CSSのattr関数を使って要素の属性値を取得・表示する方法です。

アイデア次第でいろいろと活用できそうなので、覚えておいて損はないと思います。

広告
広告

関連する記事

サムネイル

CSS内で独自の変数を定義・参照する方法【カスタムプロパティ……

2025年02月06日
今更ながらCSSで変数を使えることを知ったので、今回はカスタムプロパティの使い方について備忘録としてまとめてみます。 CSSのカスタムプロパティとは? CSSの […]
サムネイル

CSSのcounter関数でカウントを行って連番を表示する

2025年02月06日
最近になって、contentプロパティのcounter関数を使えばCSSだけで要素をカウントして連番を表示できることを知りました。本記事ではcounter関数の […]
サムネイル

CSSのoutlineプロパティの使い方【borderとの違……

2025年02月06日
CSSのoutlineプロパティについて学び直す機会がありましたので、borderとの使い分けを含めて備忘録としてまとめます。 outlineプロパティとは? […]
サムネイル

CSSでPNG画像に影を落とす方法【filterプロパティd……

2025年01月15日
CSSでドロップシャドウをつけるには? CSSで要素に影(ドロップシャドウ)を付ける手段としては「box-shadow」や「text-shadow(テキストの場 […]
サムネイル

CSSのfilterプロパティの関数の種類と効果をまとめ【フ……

2025年01月06日
最終更新日:2025年01月15日
IEのサポートが終了したので、これまで使う機会の少なかったfilterプロパティを改めて調べたところ、CSSでの表現の幅を広げてくれる画期的なプロパティだと気づ […]
サムネイル

CSSで写真にぼかし加工を加える方法【filterプロパティ……

2025年01月06日
CSSだけで写真をぼかせる? CSSのfilterプロパティのblur()関数を使うと、画像(要素)にぼかしを加えることができます。 画像編集ソフトを使うことな […]