先日、とある仕事でブログ記事のコーディングをしておりまして、「各見出しに連番を振りたい」というニーズが出てきました。
ol
要素を使い、<ol><li><h2>...
みたいな書き方をすればできるのですが、ちょっとかったるいし、文書構造的にどうよということで、前に見かけて気になっていたけど使う機会がなかったCSSのcounterというものを調べて使ってみました。
その感想は、
「めっちゃ便利…」
ということで勢い余ってここで紹介してみたいと思います。
今回のゴール
今回のゴールのイメージはこんな感じです。見出しに1〜の番号を振りたいと。
でも手打ちするんではなく、平日の昼間からゴロゴロしつつ、寝ている間に誰かが勝手に連番振ってくれないかな~というのが今回のポイントです。
指定方法
自動連番を振るための設定はこんな感じ。
連番を振りたい要素の親要素か先祖の要素にカウンターを設置します。カウンターの初期値は0
にします。
今回の例ではh2
要素が出現する度に、カウンターの数値を1ずつアップしていき、見出し文字の手前に疑似要素を用いて付与していきます。
まずはHTMLのコードサンプル。
<div class="parent">
<h2>最初の見出し</h2>
<p>ダミー文章、ダミー文章、ダミー文章、ダミー文章、ダミー文章...</p>
<h2>次の見出し</h2>
<p><img src="https://via.placeholder.com/200x140/ddd/fff" alt=""></p>
<p>ダミー文章、ダミー文章、ダミー文章、ダミー文章、ダミー文章...</p>
<h2>最後の見出し</h2>
<p>ダミー文章、ダミー文章、ダミー文章、ダミー文章、ダミー文章...</p>
</div>
続いてCSSのコードサンプル
.parent {
counter-reset: my-counter 0;
}
.parent h2:before {
counter-increment: my-counter
content: counter(my-counter) '. ';
}
- カウンターの設置場所は
div.parent
。counter-reset
プロパティを使用し、カウンター名(任意)を決める。例としてmy-counter
とする。 - カウンター名の横に半角スペースを空け、初期値として
0
を指定。0
の場合は省略OK。(ちなみに0
の部分を他の数字にすればその数字からカウントアップする) - カウンターの数値を使用する場所(今回は
h2
のbefore
疑似要素)で、counter-increment
プロパティを使用し、my-counter
の数値を1アップさせる。 counter
関数を使いmy-counter
の数値をcontent
プロパティの値として設定する。counter
関数の後の'. '
は、数字と見出し文字との間に入る文字。
「文字で説明されてもわかりにくいんじゃ!図をよこせ、図を!」という方へ。
CSSの内訳をこちらにご用意させていただきました。
結果。
See the Pen CSS counter by Nori (@nori2tae) on CodePen.
ちなみにこのdiv.parent
がもう1セット出現する場合は、その最初の見出し要素の数字はまた1〜表示されます。
だからプロパティ名がcounter-reset
(カウンターリセット)なわけでごザーマスのよ奥様。
カウンターの入れ子
ちなみに1-2.
とか2-3-1.
といった具合に、多次元的に連番を振りたいという場合はcounters
という関数があります。
この説明はMDNの記事に譲りたいと思います(他力本願脳)
カウンターの入れ子[MDN]
さいごに
指定方法はちょっと癖がありますが、覚えちゃえば便利ということで。
ご活用あれ。