CSSのカウンターで見出しに「1章・2章・」を自動で付ける方法

CSSカウンターで自動連番

CSSを書いていると、見出しに番号を付けたいことがあります。

例えば、

1章・はじめに
2章・CSSの基本
3章・応用編

のような見出しです。

HTMLに毎回、

<h2>1章・はじめに</h2>
<h2>2章・CSSの基本</h2>
<h2>3章・応用編</h2>

と書く方法もあります。

しかし、見出しが増えたり順番を変更したりすると、番号を手動で修正する必要があります。

そこで使えるのが、CSSのカウンターです。

CSSカウンターを使う

CSSではcounter()を使って、要素の出現回数などを数えることができます。

例えば、次のようにします。

.contents {
  counter-reset: num;
}

h2 {
  counter-increment: num;
}

h2::before {
  content: counter(num) '章・';
}

これだけで、h2に自動的に番号を付けられます。

HTMLは普通に書くだけです。

<div class="contents">
    <h2>はじめに</h2>
    <h2>CSSの基本</h2>
    <h2>応用編</h2>
</div>

すると、

1章・はじめに
2章・CSSの基本
3章・応用編

のように表示されます。

それぞれ何をしているのか

少し分かりにくいので、1つずつ見ていきます。

counter-reset

まず、

.contents {
  counter-reset: num;
}

でnumというカウンターを作り、0にリセットします。

「ここから番号を数え始める」というイメージです。

counter-increment

次に、

h2 {
  counter-increment: num;
}

とします。

これはh2が登場するたびに、numを1つ増やします。

つまり、

h2 → 1
h2 → 2
h2 → 3

というようにカウントされます。

counter()

最後に、

h2::before {
  content: counter(num) '章・';
}

とします。

counter(num)で現在のカウンターの値を取得できます。

その後ろに'章・'という文字列を追加しています。

そのため、

1章・
2章・
3章・

と表示されます。

「章・」以外にも使える

もちろん、'章・'の部分は自由に変更できます。

例えば、

h2::before {
  content: counter(num) '. ';
}

なら、

1. はじめに
2. CSSの基本
3. 応用編

となります。

h2::before {
  content: '第' counter(num) '章 ';
}

なら、

第1章 はじめに
第2章 CSSの基本
第3章 応用編

となります。

まとめ

CSSのcounter()を使うと、見出しに連番を自動で付けることができます。

見出しを追加・削除しても番号を自動で振り直してくれるので、目次のようなデザインや、章立てされたページを作るときに便利なCSS小技です。

おとうふ

田舎で働くWebエンジニア

毎日少しずつ成長中🌱
仕事・学習・暮らしの中で、自分が実際に経験したことを発信