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

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

投稿日:

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

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

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

広告
広告

最近になって、contentプロパティのcounter関数を使えばCSSだけで要素をカウントして連番を表示できることを知りました。本記事ではcounter関数の使い方を備忘録としてまとめます。

counter関数の使い方

CSSのcontentプロパティでcounter関数を使うと、カウンターを作成し要素に連番を付与することができます。

下図の例のように接頭語接尾語を付けたり、0埋めをしたりなど表示させる際のカスタマイズも可能です。

カウンターの例

contentプロパティとは?

contentプロパティは、擬似要素(beforeやafter)を使って、テキストや画像などのコンテンツを表示させるプロパティです。アイコンなど主に装飾のために用いられます。

疑似要素についてはこちらのページにまとめています。

counter関数でカウントを行うためには以下の3つのプロパティが必要です。

  • contentプロパティ(counter関数)
  • counter-incrementプロパティ
  • counter-resetプロパティ

counter-resetプロパティで定義

counter-resetプロパティは、カウンターを定義(任意の名前を設定)し初期化するプロパティです。

はじめに、カウントしたい要素の親要素(body要素など)に対して設定します。

カウンターを初期化

下記の例ではカウンター名を「myCounter」に設定しました。

CSS

body{
    counter-reset: myCounter;
}
/*以下省略*/

半角スペースを空けてカウンター名を記述すれば複数のカウンターをまとめて定義できます。

ページ内に異なる複数のカウンターを設置したい場合はそれぞれに重複しない名前を付けます。

counter-incrementプロパティでカウントを実行する

counter-incrementプロパティは、カウントを実行(増やす)するプロパティです。

こちらは実際にカウントしたい要素(セレクター)に対して設定することで、その数をカウントします。

増加数も設定ができ「2づつ」や「3づつ」というようなカウントも可能です(数値は省略可能で、省略した場合は1づつカウントします)。

増加数設定

CSS

body{
    counter-reset: myCounter;
}
section::before{
    counter-increment: myCounter 1;
}

counter関数でカウントを表示する

counter-resetで定義したカウンター名を呼び出して疑似要素に現在のカウントを表示させます。

カウンターを表示

HTML

<body>
    <section></section>
    <section></section>
    <section></section>
</body>        

CSS

body{
    counter-reset: myCounter;
}
section::before{
    content:counter(myCounter);
    counter-increment: myCounter 1;
}

プレビュー

カウントを表示する例

カウンターのカスタマイズ

counter関数では、接頭語接尾語を付けたり、0埋めをしたりなど表示させる際のカスタマイズが可能です。

接頭語や接尾語を付与する

番号の前後に文字を追加し、「その1 その2 その3」や「1. 2. 3.」というような任意の形式でカウントを表示させます。

方法は簡単で、下記のように表示させたい文字をcounter関数に直接記述するだけです。接頭語(接尾語)とcounter関数の間には半角スペースを入れます。

接頭語や接尾語を付与

下記の例では、カウントの前に「No.」という接頭語を付与しています。

CSS

section::before{
    content:"No." counter(c_parent);
    /*以下省略*/
}

プレビュー

接頭語や接尾語を付与する例

数字の表記を変更する

counter関数の第二引数を使うことで、数字の表記を漢数字やローマ数字に変更ができます。

数字の表記を変更
説明
decimal 10進法(デフォルト) 1 2 3 4 5
decimal-leading-zero 先頭を0で埋める 01 02 03 04 05
cjk-decimal 漢数字 一 二 三 四 五
upper-roman ローマ数字 Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ

下記の例では番号の0埋めを行っています。

CSS

section::before{
    content:"No." counter(c_parent,decimal-leading-zero);
    /*以下省略*/
}

プレビュー

番号の0埋め例

入れ子のカウンター

counter関数では、下図の例のように複数のカウンターを入れ子にして設置することも可能です。

カウンターの例

HTMLは以下の通りです。

HTML

<body>
    <section>
        <div class="myCounter_child">
            <div class="myBox">apple</div>
            <div class="myBox">strawberry</div>
            <div class="myBox">orange</div>
        </div><
    </section>
    <section>
        <div class="myCounter_child">
            <div class="myBox">black</div>
            <div class="myBox">white</div>
            <div class="myBox">red</div>
        </div><
    </section>
    <section>
        <div class="myCounter_child">
            <div class="myBox">tokyo</div>
            <div class="myBox">saitama</div>
            <div class="myBox">kanagawa</div>
        </div><
    </section>
</body>

counter関数を使って「section要素」とクラス「myBox」の数をそれぞれカウントし表示させます。

CSS

body{
    counter-reset: myCounter;
}
section::before{
    content:"No." counter(myCounter,decimal-leading-zero);
    counter-increment: myCounter;
}
.myCounter_child{
    counter-reset: myCounter_child;
}
.myCounter_child .myBox::before{
    content:counter(myCounter_child,decimal-leading-zero) ".";
    counter-increment: myCounter_child;
}

9行目「myBox」の方はセクションごとにカウントを行いたいので、counter-resetをbody要素ではなく、親要素であるクラス「myCounter_child」に設定しています。これによりセクションごとにカウントがリセットされ1から数えなおされます。

動的に増減する要素に対する挙動は?

JavaScriptのappend()とremove()を使って、ボタンを押したら要素を追加・削除する仕組みを作って検証してみました。

下図のように動的に要素が増減したとしても、counter関数は連動してくれることが確認できます。

動的に増減する要素に対する挙動

まとめ

以上がCSSのcounter関数でカウントを行って連番を表示する方法です。

これまで連番を付けるときは「nth-of-child」「attr関数」を使っていたので、counter関数の便利さを痛感しています。

広告
広告

関連する記事

サムネイル

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

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

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

2025年02月06日
最近になって疑似要素で使うことができるCSSのattr関数の存在を知りました。コーディングの幅を広げる便利な関数だと感じましたので学んだ内容を備忘録としてまとめ […]
サムネイル

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()関数を使うと、画像(要素)にぼかしを加えることができます。 画像編集ソフトを使うことな […]