ハシウェブ

Web制作、プログラミングに関する情報を発信するブログ

【CSS】疑似要素(:before、:after)とは?よくあるミス、使い方

【CSS】疑似要素(:before、:after)とは?よくあるミス、使い方

「疑似要素って何?」
「疑似要素はわかるけど、どう使えばいいかわからない」

悩み

こういった悩みにお答えします。

目次
  1. 疑似要素とは
  2. 疑似要素でよくあるミス
  3. 疑似要素のおもな使い方
    1. アイコン
    2. 図形
    3. 装飾
    4. 連番
  4. まとめ

疑似要素とは

疑似要素とは、HTML要素を追加することなく、CSSで疑似的にHTML要素(「:before」「:after」)を追加して装飾などをする方法です。
HTMLの文書構造に直接関係ない装飾やアイコン、図形などを疑似要素を使って表現することでHTMLが見やすくすることができます。

h2:before{
  content: "●";
}

p:after{
 content: "「";
}
p:after{
 content: "」";
}
メリット
HTMLソースがきれいになる
画像を使わず実現できるデザインの幅が広がる
修正がしやすくなる
デメリット
CSSを書く量が増える
入力ミスが増える

疑似要素でよくあるミス

疑似要素を使うとCSSの記述量が増えるので、自然と入力ミスが増えます。

「ちゃんとCSSを書いたはずなのに疑似要素がなぜか表示されない」
という場合は、以下、書き忘れがないか確認してみてください。

  • 「 :before 」「 :after 」を書き忘れる
  • 「 content: ""; 」を書き忘れる
  • 「 display: block; 」「 display: inline-block; 」を書き忘れる

疑似要素のおもな使い方

アイコン

疑似要素はアイコンでよく使います。
listであれば、list-style-typeである程度、マーカーをつけることができますが、選択肢はとても少ないのです。
疑似要素を使うことでlistだけでなくどんな要素でもアイコンが使えます。
また、FontAwesomeであれば、たくさんのアイコンを使うことができます。

画像を使うこともできますが、修正などに手間がかかるので、できればテキスト、またはFontAwesomeを使うことをおすすめします。

See the Pen アイコン by hashi84 (@hashi84) on CodePen.

図形

図形を作成する場合は疑似要素を使い、「 content: "" 」とすることで図形を作成することができます。
「 :before 」「 :after 」はどちらでもかまいません。
両方を使うことでもっと複雑な画像を実現できます。

See the Pen 図形 by hashi84 (@hashi84) on CodePen.

四角形
四角形は、疑似要素にwidth、height、background-colorを指定することで表現できます。
丸は、四角形をつくった疑似要素に「 border-radius: 50%; 」を指定することで表現できます。
楕円にする場合はborder-radiusの数値を変更します。
矢印
矢印は、四角形を塗りつぶさず2辺にborderを指定します。
このままだと矢印が斜めを向いているので、「 transform: rotate(45deg); 」など角度を変えることで上下左右を向かせることができます。
直角三角形
直角三角形は、borderを使います。
borderのtop、bottom、left、rightのうち2つが交差する部分が斜めに切り替わることを使って表現します。
色のついたborderと透明なborderを指定することで三角形になります。
直角三角形の向きや長さはborderで指定するプロパティや長さ変更しながら指定していくとうまくいくところが見つかります。
二等辺三角形
二等辺三角形も、直角三角形と同じでborderを使います。
borderのうち3つを使い、2つを透明にすることで二等辺三角形になります。
向きや長さは実際にやりながら調整していけばいいのでなんとなく覚えておけば大丈夫です。

装飾

装飾はおもに見出しなどで使います。
日本語と英語をあわせて書くようなデザインのときは、HTMLタグをどうすればいいか悩むことがあるかもしれませんが、日本語をHTMLに書いて、英語を疑似要素に書くとすっきりします。(日本向けのサイトの場合)

See the Pen 見出し by hashi84 (@hashi84) on CodePen.

HTMLにdata属性「data-text」、CSSに「 attr( data-text ) 」とすろことで、属性に指定したテキストを疑似要素として取得、表示させることができます。
ページタイトルなど疑似要素に使うテキストが違って数が多い場合は、これでCSSを書く量が少なくなります。

連番

listでなくても見出しなどに連番をつけることがありますが、これを疑似要素を使って自動的に連番を割り振ることができます。
こうすることで順番を入れ替えたり、追加があったときでも数字を変更する必要がなくなります。

See the Pen 連番 by hashi84 (@hashi84) on CodePen.

まとめ

疑似要素について紹介しました。

画像を使わず疑似要素を使うことで、HTMLソースの可読性がよくなり、読み込み速度も速くなるのでSEOにも好影響が期待できます。