【CSS】HTMLは汚さない!魔法の要素「::before」「::after」の使い方

Webサイトを作っていて、「見出しの横にアイコンをつけたいな」とか「文字の下におしゃれな線を引きたいな」と思った時、わざわざHTMLに <img><span> を追加していませんか?

デザインのためだけにHTMLのタグを増やすのは、コードが汚くなるのであまり良くありません。

そんな時に活躍するのが、CSSだけで架空の要素を作り出す魔法、「擬似要素(Pseudo-elements)」です。
::before::after。この2つを使いこなせば、あなたのコーディング力は「プロ級」になります!

擬似要素=「CSSで作る幽霊」

擬似要素とは、その名の通り「ニセモノの要素」です。
HTMLには存在しないけれど、画面上には存在する「幽霊(ゴースト)」のようなものを作れます。

  • ::before(ビフォー):要素の直前に幽霊を作る。
  • ::after(アフター):要素の直後に幽霊を作る。

【最重要】幽霊を呼び出す「content」プロパティ

擬似要素を使う時の絶対的なルール。
それは、「content(中身)を指定しないと現れない」ということです。

.box::before {
    content: "★"; /* 星マークを表示 */
    color: red;
}

たとえ中身を空っぽにしたい場合(線や図形を作りたい時)でも、以下のように空文字を指定する必要があります。

.box::after {
    content: ""; /* 空っぽでも必須!これを忘れると何も出ません */
    width: 10px;
    height: 10px;
    background-color: blue;
    display: block; /* 幽霊は初期状態がinlineなので、箱にするならblockかinline-blockにする */
}

初心者が「擬似要素が効かない!」と悩む原因の9割は、この content: ""; の書き忘れです。

実践1:おしゃれな「2色下線」の見出し

では、実務でよく使うテクニックです。
h2 タグそのものにグレーの下線を引き、::after で青い短い線を重ねることで、凝ったデザインを作ります。

ここで、以前習った「position: absolute(絶対配置)」が大活躍します!

<!DOCTYPE html>
<html lang="ja">
<head>
<style>
    h2 {
        position: relative; /* 1. 親(幽霊の基準点)にする */
        padding-bottom: 10px;
        border-bottom: 2px solid #ddd; /* 全体のグレーの下線 */
    }

    h2::after {
        content: ""; /* 2. 必須!中身は空っぽ */
        
        /* 3. 青い線を作る */
        display: block;
        width: 60px;       /* 線の長さ */
        height: 2px;       /* 線の太さ */
        background-color: #00bcd4; /* 線の色 */
        
        /* 4. 配置を決める */
        position: absolute;
        bottom: 0; /* 一番下に配置(グレーの線と重なる) */
        left: 0;   /* 左端に配置 */
    }
</style>
</head>
<body>

    <h2>擬似要素のデザイン</h2>
    <p>↑ 見出しの下線を見てください。左側だけ青くなっていますか?</p>

</body>
</html>

実践2:CSSだけで「吹き出し」を作る

応用編です。LINEのような「吹き出し」のしっぽ(三角形)も、実は擬似要素で作られています。
「border(枠線)」を使った古典的なトリックを使います。

<!DOCTYPE html>
<html lang="ja">
<head>
<style>
    /* 吹き出し本体 */
    .speech-bubble {
        position: relative; /* 基準点 */
        background-color: #81d4fa; /* 水色 */
        padding: 20px;
        border-radius: 10px;
        width: 300px;
        color: #333;
    }

    /* しっぽ(三角形) */
    .speech-bubble::before {
        content: "";
        position: absolute;
        
        /* 本体の上、真ん中あたりに配置 */
        top: -20px; 
        left: 50%;
        transform: translateX(-50%);

        /* 三角形を作る魔法の記述(今はコピペでOK!) */
        border: 10px solid transparent; /* 透明な太い枠線 */
        border-bottom-color: #81d4fa;   /* 下の枠線だけ色をつける */
    }
</style>
</head>
<body>
    <br><br>
    <div class="speech-bubble">
        CSSだけで吹き出しが作れました!<br>
        上の三角形は「::before」で作っています。
    </div>

</body>
</html>

まとめ:HTMLは「構造」、CSSは「装飾」

擬似要素を使うメリットは、HTMLコードがスッキリすることです。
「デザインのための飾り」は、できるだけHTMLに書かず、CSSの ::before::after に任せる。

これができるようになれば、あなたはもう「CSS中級者」です。
色々なサイトを見て、「これ擬似要素かな?」と予想してみるのも楽しいですよ!

タイトルとURLをコピーしました