本文へスキップ
HTML / CSS 基礎 CSS 疑似要素 before・after

疑似要素 before / after を使ってみよう

更新日:2026-08-02

ここまでで、

  • transform
  • transition
  • opacity
  • z-index

などを使って、動きや重なりを学びました。

今回は、

HTMLを書かずに装飾を追加する

ための、

::before
::after

を学びます。

実際のWeb制作では、かなり大量に使われています。


今回使用するファイル構成

この回では、次のファイルを使用します。

html-practice/
├── index.html
└── css/
    └── style.css

疑似要素とは?

疑似要素は、

「存在しない要素」をCSSで作る

イメージです。

例えば、

  • 装飾線
  • アイコン
  • 背景
  • オーバーレイ
  • 吹き出しの三角

などを作れます。


before と after

主に使うのは以下です。

::before
::after

名前の通り、

  • before = 要素の前
  • after = 要素の後

へ追加されます。


最初のサンプル

<p class="sample">
  サンプルテキスト
</p>
.sample::before {
  content: "注:";
}

すると、

注:サンプルテキスト

のように表示されます。


content が必要

ここは超重要です。

疑似要素は、

content

を書かないと表示されません。

.sample::before {
  content: "";
}

空文字でも必要です。

初心者がかなりハマるポイントです。


after の例

.sample::after {
  content: "!";
}

すると、

サンプルテキスト!

になります。


装飾線を作る

実務ではこちらが超頻出です。

<h2 class="title">
  タイトル
</h2>
.title {
  position: relative;
  display: inline-block;
}

.title::after {
  content: "";

  position: absolute;

  left: 0;
  bottom: -8px;

  width: 100%;
  height: 4px;

  background-color: #2563eb;
}

なぜ position が必要?

これもかなり重要です。

position: absolute;

を使うため、

親側に、

position: relative;

が必要です。

つまり、

before / after は position とセットで使われることが多い

です。


display: inline-block が必要な理由

h2 は初期状態で、

display: block;

です。

そのままだと、

下線が横幅いっぱい

になることがあります。

display: inline-block;

にすると、

文字幅に合わせられる

ようになります。


hover と組み合わせる

ここからかなりWeb制作っぽくなります。


下線アニメーション

<a href="#" class="link">
  ABOUT
</a>
.link {
  position: relative;
  color: #111;
  text-decoration: none;
}

.link::after {
  content: "";

  position: absolute;

  left: 0;
  bottom: -4px;

  width: 0;
  height: 2px;

  background-color: #2563eb;

  transition: 0.3s;
}

.link:hover::after {
  width: 100%;
}

何が起きている?

最初は、

width: 0;

なので線が見えません。

hoverすると、

width: 100%;

になり、

左から線が伸びる

アニメーションになります。


overlay を作る

画像の上に黒い半透明を重ねるのもよくあります。

<div class="card">
  <img src="image.jpg" alt="">
</div>
.card {
  position: relative;
}

.card::after {
  content: "";

  position: absolute;

  inset: 0;

  background-color: rgba(0,0,0,0.4);
}

inset: 0 とは?

これは、

top: 0;
right: 0;
bottom: 0;
left: 0;

の省略です。

最近かなり使われています。


before / after は重なる

疑似要素は、

要素の上に重なる

ことがあります。

そのため、

z-index

を使うことも多いです。


ボタンに光を流す

実際のサイトではかなりよくあります。

.button {
  position: relative;
  overflow: hidden;
}
.button::before {
  content: "";

  position: absolute;

  top: 0;
  left: -100%;

  width: 100%;
  height: 100%;

  background-color: rgba(255,255,255,0.3);

  transition: 0.5s;
}
.button:hover::before {
  left: 100%;
}

overflow: hidden が必要

これがないと、

光がはみ出して見える

ことがあります。

ここでも overflow が活躍しています。


実際かなり使われる

before / after は本当に頻出です。

例えば、

  • ハンバーガーメニュー
  • カード装飾
  • ボーダーアニメーション
  • 吹き出し
  • モーダル背景
  • hover演出

など。


まとめ

今回は、

::before
::after

を学びました。

  • HTMLを書かずに装飾できる
  • content が必要
  • position と組み合わせることが多い
  • hover
  • transition
  • transform

と組み合わせると、一気にWeb制作っぽくなります。