【2023年】これからブログを始める人へおすすめの書籍

Kissy

CSSをつかって「ふきだし」をつくる | ::before, ::after

作成: 更新:

ふきだしこんにちは!きっしーです。

今日は、CSSの擬似要素をつかってふきだしをつくってみます。 ふきだしをつくるには、CSSで円や三角形をつくる必要があります。

CSSで円や三角形をつくる方法は、こちらの記事を参考にしてください。

CSSをつかって三角形を作るよ! | ::before
CSSをつかって円をつくるよ! | border-radius

擬似要素とはなに?

擬似要素はHTMLにもともと存在しない要素を作るCSSの機能です。

HTMLは本来文章を書くためのもので、デザイン的な要素はCSSの役割です。

擬似要素を使用せずに複雑なデザイン、たとえばふきだしのようなデザインをしようとすると、 画像やdiv要素をHTMLに書く必要がありました。

これでは、HTMLにデザイン目的の要素が入り、HTMLを編集するのが難しくなります。

そこで、擬似要素の登場です。

CSSの擬似要素をつかうと、HTMLにない要素を挿入できます。

これによって、デザイン目的の要素はCSSに追い出すことができ、 HTMLには文書のみを記載すればよくなります。

CSSの擬似要素をつかうと、HTMLの文書構造をたもちつつ、 複雑なデザインを作ることができます。

ふきだし風の見出しをつくる(背景ぬりつぶし)

まずはかんたんな、背景ぬりつぶしのふきだしをつくってみます。

ふきだしのコメントを入れる四角形に、三角形をくっつけてつくります。 この三角形は文書に関係がないので、擬似要素でつくってやるわけです。

<h2>ふきだし風な見出し(背景ぬりつぶし)</h2>
h2 { 
  position: relative; 
  padding:  0.5em; 
  margin-bottom:  15px; 
  border:  2px  #dddddd;  
}

h2::before { 
  position: absolute; 
  content:  ''; 
  left:  30px; 
  bottom:  -15px; 
  width:  0px; 
  height:  0px; 
  border-top: solid 15px  #dddddd;
  border-right: solid 15px transparent; 
  border-bottom: solid 0px transparent; 
  border-left: solid 15px transparent;  
}

考えごと風の見出しをつくる(背景ぬりつぶし)

CSSをつかって円を作るよ! | border-radius 」の記事でつくった円をつかって、考えごと風な見出しを作ってみます。

<h2>考えごと風な見出し(背景ぬりつぶし)</h2>
h2 { 
  position: relative; 
  padding:  0.5em; 
  border-radius:  3px; 
  margin-bottom:  15px; 
  border:  2px  #dddddd;  
}

h2::before { 
  position: absolute; 
  content:  ''; 
  left:  -50px; 
  bottom:  0px; 
  width:  10px; 
  height:  10px; 
  border-radius:  50%; 
  background:  #dddddd;  
}

h2::after {
  position: absolute; 
  content:  ''; 
  left:  -30px; 
  bottom:  0px; 
  width:  15px; 
  height:  15px; 
  border-radius:  50%; 
  background:  #dddddd;  
}

ふきだし風の見出しをつくる(ボーダー)

つぎに、背景を塗りつぶさないボーダーだけのふきだしを作ります。

単純に四角形の背景色をなしにして、ボーダーだけにしてもうまくいきません。 それに、三角形はボーダーで作っているので、ボーダーだけにできませんね。

<h2>ふきだし風な見出し(ボーダー)</h2>
h2 { 
  position: relative; 
  padding:  0.5em; 
  margin-bottom:  15px; 
  border:  2px  #dddddd;  
} 

h2::before { 
  position: absolute; 
  content:  ''; 
  left:  30px; 
  bottom:  -15px; 
  width:  0px; 
  height:  0px; 
  border-top: solid 15px  #dddddd;
  border-right: solid 15px transparent; 
  border-bottom: solid 0px transparent; 
  border-left: solid 15px transparent;  
}

そこで、もうひとつボーダーカラーを白にした三角形をずらして重ねることで、 ボーダーのみを残すという、トリッキーなテクニックをつかいます!

上に重ねるので、::after擬似要素をつかっています。

<h2>ふきだし風な見出し(ボーダー)</h2>
h2 { 
  position: relative; 
  padding:  0.5em; 
  margin-bottom:  15px; 
  border:  2px  #dddddd;  
}

h2::before { 
  position: absolute; 
  content:  ''; 
  left:  30px; 
  bottom:  -15px; 
  width:  0px; 
  height:  0px; 
  border-top: solid 15px  #dddddd;
  border-right: solid 15px transparent; 
  border-bottom: solid 0px transparent; 
  border-left: solid 15px transparent;
}

h2::after { 
  position: absolute; 
  content:  ''; 
  left:  30px; 
  bottom:  -13px; 
  width:  0px; 
  height:  0px; 
  border-top: solid 15px  #ffffff; 
  border-right: solid 15px transparent; 
  border-bottom: solid 0px transparent; 
  border-left: solid 15px transparent;  
}

擬似要素はpositionとmarginに注意

擬似要素はHTMLにもともと存在しない要素をつくります。

さらに、要素どうしを組み合わせるために、top / left / bottom / right プロパティをつかって、 位置を調整します。

これにより、子要素が親要素をはみ出したり、となりの要素と重なったりします。

このようにデザインが崩れないように注意すべきことがあります。 擬似要素をつかう場合は、以下の2つを守るようにしましょう。

  1. 親要素のpositionにはrelativeを、子要素のpositionにはabsoluteを指定する。
  2. 子要素を親要素からはみだす場合、親要素のmarginで子要素の余白を確保する。

擬似要素をつかうときのポイント1

1つめの、「親要素のpositionにrelative、子要素のpositionにabsoluteを指定する」、 これは、子要素の位置を、親要素を基準とした絶対位置で指定するためです。

親要素を基準とした絶対位置にすると、子要素の位置は以下のようになります。

  • 子要素(top=0, left=0)は親要素の左上にぴったりとくっつく。
  • 子要素(bottom=0, right=0)は親要素の右下にぴったりとくっつく。

絶対位置で指定できると、子要素の位置の調整がぐっと楽になります。

擬似要素をつかうときのポイント2

2つめの、「子要素を親要素からはみだす場合、親要素のmarginで子要素の余白を確保する」、 これは、子要素が親要素からはみだしたり、となりの要素と重ならないようにするためです。

親要素のmarginで子要素も含むようなサイズにしておくことで、 親要素のサイズが変わった場合にも、子要素がはみださなくなります。

最後まで読んでいただきありがとうございます。
また読んでくださいませ。
そんじゃーね。

関連記事

SPONSORED LINK
SPONSORED LINK