2021.01.30

HTML・CSS

CSS疑似要素のcontentプロパティにcounter関数で連番を指定

デモページはこちら

CSS疑似要素のcontentプロパティに、CSSのcounter関数で連番を指定します。JavaScriptは使用せず、CSSのみで実装します。以下のhtml構造でテストします。デモページではクラス名boxのdivタグは12個並べています。

<div class="container">
	<div class="box">
		<figure class="photo">
			<img src="images/photo01.jpg" alt="">
		</figure>
		<h3>タイトル01</h3>
		<p>ダミーテキストダミーテキストダミーテキスト</p>
	</div>
	<div class="box">
		<figure class="photo">
			<img src="images/photo02.jpg" alt="">
		</figure>
		<h3>タイトル02<br>タイトル02</h3>
		<p>ダミーテキストダミーテキストダミーテキスト</p>
	</div>
	<div class="box">
		<figure class="photo">
			<img src="images/photo03.jpg" alt="">
		</figure>
		<h3>タイトル03<br>タイトル03<br>タイトル03</h3>
		<p>ダミーテキスト</p>
	</div>
</div>

CSSはまずクラス名boxのdivタグにcounter-incrementプロパティでカウンタ名を設定します。このカウンタ名は同階層の対象の要素の数分だけ連番でインクリメントされます。
次にクラス名photoのfigureタグに疑似要素beforeを設定し、contentプロパティでcounter(index, decimal-leading-zero)'.';のようにcounter関数を指定します。counter関数の第一引数はカウンタ名、第二引数は表示形式です。表示形式のdecimal-leading-zeroは先頭に0を付けた数字です。
counter関数には文字列が結合できます。今回は数字の後に'.'を結合しています。

.box {
	counter-increment: index;
}
.photo {
	position: relative;
}
.photo:before {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	display: flex;
	justify-content: center;
	align-items: center;
	font-family: 'Patua One', cursive;
	font-size: 2rem;
	font-weight: 400;
	color: #fff;
	content: counter(index, decimal-leading-zero)'.';
}

注意点として今回のhtml構造の場合、counter-incrementプロパティはクラス名boxのdivタグに設定する必要があります。クラス名photoのfigureタグ、またはその疑似要素beforeにcounter-incrementプロパティを設定しても、カウンタ名に連番が格納できません。同階層に対象の要素が1つしかないため、カウンタ名に格納される数値は全て1(表示は01)になります。

関連記事

2020.09.18

HTML・CSS

YouTubeの動画からサムネイル画像を取得

YouTubeの動画からサムネイル画像を取得します。取得には半角英数11桁の動画IDが必要です。サムネイル画像は下記の通りサイズ別に分かれていますが、最大サイズ…

2024.08.16

HTML・CSS

flex-shrinkで文字の改行を防ぐ

flexボックスのレイアウトで、flexアイテムにflex-shrinkプロパティを指定してテキストが改行されるのを防ぎます。デモページはこちら 以下のhtml…

2022.08.28

HTML・CSS

親要素にtransformが設定されている場合のposition: fixed;

通常、position: fixed;でtop: 0;left: 0;の場合、画面の左上が基準位置になります。しかし、親要素(先祖を含む)にtransformが…

2025.05.08

HTML・CSS

text-decorationを利用した文字の下線

text-decorationプロパティを利用して複数行の文字に下線を引きます。複数行に対応させるため、inline要素に適用します。デモページはこちら 以下の…

2020.10.16

HTML・CSS

flexboxでCSSのwidthプロパティにcalcを利用

769px以上:4カラム・768px以下:3カラム flexboxでCSSのwidthプロパティにcalcを利用します。以下のhtml構造でテストします。デモペ…

上に戻る