CSS badge

CSSの「::before疑似要素」、「::after擬似要素」は様々な場面で使える便利な機能です。

しかしながら、スタイルシートを記述している途中で「疑似要素が思ったように反映されない!」という状況にもしばしば遭遇すると思います。
今日はそんなときに確認するべきチェックポイントを紹介します。

contentプロパティを指定しているか?

疑似要素が表示されない理由で、最も多いのはcontentプロパティの設定を忘れているケースだと思います。

例えば以下のようなコードはNGです。

.sample::before {
	background-color:#333;
}

contentプロパティを忘れずに指定しましょう。

.sample::before {
	content:"";
	background-color:#333;
}

positionプロパティは正しく指定されているか?

擬似要素に「position:absolute;」を指定したい場合は、その親要素に「position:relative;」を効かせる必要があります。

.sample{
	position:relative;
}
.sample::before {
	position:absolute;
}

それは疑似要素が使える要素か?

::before疑似要素、::after疑似要素は、<br> <input> <img> などの空要素には使うことができません。

空要素(void要素)とは?
終了タグが存在せず、開始タグのみで記述される要素のこと。
br、hr、img、input、sourceなどがそれにあたります。

疑似要素の指定が重複していないか?

疑似要素は1つの要素に対して「::before」、「::after」のそれぞれ1個ずつ、計2個しか指定できません。

.sample::before {
	content:"あいうえお";
}
.sample::before {
	content:"かきくけこ";
}
.sample::after {
	content:"さしすせそ";
}
.sample::after {
	content:"たちつてと";
}

CSSは前のコードが後ろに書いたコードで上書きされるので、上記の例では「かきくけこ」と「たちつてと」の2つが出力されることになります。

前後の重なり順の指定は間違っていないか?

前後の重なり順を指定するz-indexプロパティは正しく指定されていますか?
z-indexを効かせるには「positionの値がstatic以外」でないといけません。

.sample::before {
	position:relative;
	z-index:99;
}

インライン用そのままになっていないか?

例えば、擬似要素にtransformを効かせたい場合。

疑似要素はデフォルトではインライン要素(display:inline;)として扱われていますが、これを「inline」以外の他の値にする必要があります。

疑似要素をtransformで動かしたい場合はdisplayの値をinline以外にしましょう。


以上。お疲れさまでした!