Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【CSS Modules】@counter-styleアットルールの使い方

@counter-styleアットルールの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

@counter-styleインターフェースは、カスタムカウンターのスタイルを定義するためのインターフェースです。このインターフェースは、CSSの標準的なカウンター(例えば、順序付きリストの「1, 2, 3…」)の表示形式を拡張し、開発者がカスタムの numbering や記号パターンを定義できるCSSアットルールです。ウェブページ上のリスト項目などに自動で付与される記号や番号を、デザイン要件に合わせ柔軟に制御する場合に利用されます。

@counter-style内では、カウンターの計算ロジックを定めるsystem、記号や文字列を定義するsymbols、前後の文字列を指定するprefixsuffixを設定します。さらに、適用範囲を限定するrange、表示桁数を揃えるpad、スクリーンリーダーでの読み上げ方を指示するspeak-as、代替スタイルを指定するfallbackといった項目を定義可能です。

定義したカスタムスタイルは、list-style-typeプロパティの値としてリスト項目に適用できます。また、contentプロパティ内でcounter()counters()関数と組み合わせることで、任意のHTML要素に自由なカウンター表現を表示できます。このインターフェースを活用することで、標準機能では難しいユニークな箇条書きデザインなど、多様なカウンター表現をCSSのみで実現し、ウェブコンテンツの表現力を高めます。

公式リファレンス: @counter-style

構文(syntax)

1@counter-style custom-bullet {
2  system: cyclic;
3  symbols: "▶" "▷";
4  suffix: " ";
5}

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

CSSでカスタム画像リストマーカーを定義する

1/*
2 * @counter-styleルールは、カスタムのカウンタスタイルを定義します。
3 * これにより、リストマーカーなどのカウンタの外観を柔軟にカスタマイズできます。
4 */
5@counter-style custom-image-list {
6  /*
7   * `system: symbols`は、指定されたシンボルのリストを循環して使用するカウンタシステムを定義します。
8   * これは、リストアイテムの数に応じて、定義されたシンボルが順番に繰り返し表示されることを意味します。
9   */
10  system: symbols;
11
12  /*
13   * `symbols`プロパティは、カウンタとして使用するシンボルをリストで指定します。
14   * ここでは、3つの異なる画像URLを指定しています。
15   * リストの各項目は、このリストの画像が順番に割り当てられ、リストの最後を超えると最初の画像に戻ります。
16   * 注: 実際の使用では、これらのURLを自身の画像パスに置き換えてください。
17   */
18  symbols: url("https://www.example.com/icon-star.png")
19           url("https://www.example.com/icon-circle.png")
20           url("https://www.example.com/icon-square.png");
21
22  /*
23   * `suffix`プロパティは、各カウンタ値の後に表示される内容を定義します。
24   * ここでは、画像マーカーとリストアイテムのテキストの間に半角スペースを挿入し、
25   * 視覚的な区切りを提供します。
26   */
27  suffix: ' ';
28}
29
30/*
31 * 定義したカスタムカウンタスタイルをHTML要素に適用します。
32 * この例では、`ul`(順序なしリスト)要素の`list-style-type`プロパティに、
33 * 上で定義したカウンタスタイル名 (`custom-image-list`) を指定しています。
34 * `padding-left`は、リストマーカーが適切に表示されるように確保するスペースです。
35 */
36ul {
37  list-style-type: custom-image-list; /* カスタム画像カウンタスタイルを適用 */
38  padding-left: 2.5em;                 /* マーカー表示のための左パディング */
39}

CSSの@counter-styleルールは、ウェブページのリストマーカーなど、カウンタの表示形式を自由に作成できる機能です。このルール自体には、特別な引数や戻り値は定義されていません。

提供されたサンプルコードでは、「custom-image-list」という名前のカスタムカウンタスタイルを定義しています。このスタイル内でsystem: symbolsを設定することで、複数のシンボル(この場合は画像)を順番に循環させて使用するカウンタシステムを指定しています。symbolsプロパティでは、カウンタとして表示したい星、丸、四角の画像URLを具体的に指定しており、リストの各項目にはこれらの画像が最初のものから順に繰り返し割り当てられます。例えば、1つ目のリスト項目には星、2つ目には丸、3つ目には四角の画像が表示され、4つ目の項目には再び星の画像が割り当てられるといった動作です。また、suffix: ' 'は、表示される画像マーカーとリスト項目のテキストの間に半角スペースを挿入し、読みやすさを向上させる役割を果たします。

定義したカスタムカウンタスタイルを実際に適用するには、ul要素のようなリスト要素のlist-style-typeプロパティに、作成したスタイル名「custom-image-list」を指定します。これにより、通常の記号や数字の代わりに、指定した画像がリストマーカーとして表示されます。padding-leftプロパティは、マーカーがテキストと重ならないよう適切な表示スペースを確保するために設定します。このように、@counter-styleルールを活用することで、標準のカウンタスタイルでは実現できない、独自の視覚表現を持つリストをデザインできます。

@counter-styleルールで定義したカスタムカウンタは、list-style-typeプロパティにカスタム名を指定することで適用されます。サンプルコードのsymbolsに記述された画像URLはあくまで例ですので、ご自身のプロジェクト内で使用する実際の画像パスに必ず置き換えてください。

system: symbolssymbolsプロパティの組み合わせにより、指定した画像がリストの項目数に応じて順番に繰り返し表示されることを理解しましょう。画像マーカーがリストのテキストと重なってしまわないよう、リスト要素にはpadding-leftなどの適切な余白を設定することが非常に重要です。この設定がないと、デザインが崩れる原因となります。また、suffixで追加するスペースは、マーカーとテキスト間の視覚的な区切りを明確にする役割があります。

CSSでカスタムカウンタースタイルを定義する

1/*
2 * @counter-style: カスタムカウンタースタイルを定義します。
3 * このルールは、リストのマーカー(例: 箇条書きの記号)を独自の記号や絵文字に
4 * カスタマイズするために使用されます。システムエンジニアを目指す初心者の方向けに、
5 * 既存のリストマーカー(disc, circle, squareなど)にとらわれずに、
6 * 独自のリスト表示を作成する方法を示します。
7 */
8@counter-style custom-emoji-list {
9  /*
10   * system: カウンターがsymbolsで指定された記号をどのように生成するかを定義します。
11   * 'cyclic' は、symbolsで指定された記号を順番に繰り返し使用することを示します。
12   * 他にも 'fixed', 'numeric', 'alphabetic' などがあります。
13   */
14  system: cyclic;
15
16  /*
17   * symbols: リストマーカーとして使用する記号を順番に指定します。
18   * ここでは絵文字を使用しています。リストアイテムの数に応じてこれらの記号が
19   * 順番に、そして循環して表示されます。
20   */
21  symbols: "👍" "👏" "🎉";
22
23  /*
24   * suffix: 各マーカーの記号の後に付加する文字列を定義します。
25   * ここでは半角スペースを追加し、記号とリストアイテムの内容との間に
26   * 読みやすい間隔を設けています。
27   */
28  suffix: " ";
29}
30
31/*
32 * ul.my-custom-list: HTML内で 'my-custom-list' クラスが適用された
33 * 順序なしリスト (<ul>) 要素に対するスタイルを定義します。
34 */
35ul.my-custom-list {
36  /*
37   * list-style-type: リストマーカーの種類を指定します。
38   * ここでは上で定義したカスタムカウンタースタイル 'custom-emoji-list' を
39   * 値として指定し、独自のマーカーを適用しています。
40   */
41  list-style-type: custom-emoji-list;
42
43  /*
44   * padding-left: リストアイテムの内容の左側に余白を追加し、
45   * マーカーとテキストが重ならないように、また読みやすくするために設定します。
46   */
47  padding-left: 2em;
48}

CSSの@counter-styleは、リストのマーカー(箇条書きの記号など)を独自にカスタマイズするためのルールです。このルールを用いることで、既存のdisccircleといったスタイルにとらわれず、絵文字や任意の文字列などをマーカーとして使用できるように定義します。このルール自体には特定の引数や戻り値はありません。

サンプルコードでは、custom-emoji-listという名前のカスタムカウンタースタイルを定義しています。system: cyclic;は、symbolsで指定された記号を順番に繰り返し使用することを示します。symbols: "👍" "👏" "🎉";では、リストアイテムの数に応じて「👍」「👏」「🎉」の絵文字が順番に、そして循環してマーカーとして表示されます。suffix: " ";は、各マーカーの記号の後に半角スペースを追加し、記号とリストアイテムの内容との間に適切な間隔を設ける役割を果たします。

その後、ul.my-custom-listというセレクタで、HTMLの<ul>要素にmy-custom-listクラスが適用された場合に、このカスタムスタイルを適用しています。list-style-type: custom-emoji-list;と記述することで、上で定義した独自のカウンタースタイルが実際に使用されます。padding-left: 2em;は、リストアイテムの左側に余白を追加し、マーカーとテキストが重ならずに読みやすくなるように調整しています。これにより、システムエンジニアを目指す初心者の方も、標準のスタイルでは実現できない表現豊かなリスト表示を作成できるようになります。

@counter-styleルールは、独自のリストマーカーを定義するためのもので、定義したスタイルはlist-style-typeプロパティを使って適用する必要があります。この二段階のプロセスを混同しないよう注意してください。systemプロパティはsymbolsで指定した記号の表示規則を決定するため、cyclic以外の設定も試し、挙動を理解することが重要です。絵文字などをマーカーに使う際は、デフォルトのリストスタイルとは表示サイズや位置が異なるため、ulol要素のpadding-leftを適切に調整しないと、マーカーとテキストが重なって読みにくくなることがあります。この機能は比較的新しいCSSの仕様ですので、対象とするブラウザでのサポート状況も確認し、必要に応じてフォールバックを検討するとより安全です。

関連コンテンツ

関連IT用語