Asial Blog

Recruit! Asialで一緒に働きませんか?

CSSだけで簡単に吹き出しを作成する方法4つ!

カテゴリ :
フロントエンド(HTML5)
タグ :
Tech
HTML
CSS
こんにちは、橋本です。

今日はCSSだけでお手軽に吹き出しを作る方法をご紹介したいと思います。

今回ご紹介するサンプルは4つ


  1. 一般的な三角の吹き出し

  2. 一般的な三角の吹き出し(ボーダー付き)

  3. ぽわわーんとした吹き出し

  4. 丸い(曲線の)吹き出し



4つのサンプルの実行結果は、ここで確認できます。
IE9以上とIE以外のブラウザであればちゃんと表示されるかと思います。
IE8以下はborder-radiusが使用出来ないため、サンプル3とサンプル4がちゃんと表示されません。


それでは1つ1つ見て行きましょう。

1.一般的な三角の吹き出し



まずはソースから。

  1. <!DOCTYPE HTML>
  2. <html lang="ja">
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <style type="text/css">
  6.             * {
  7.                 box-sizing: border-box;
  8.             }
  9.  
  10.             .wrapper {
  11.                 padding: 30px;
  12.                 position: relative;
  13.             } 
  14.  
  15.             .box {
  16.                 position: relative;
  17.                 background: #ccc;
  18.                 height: 50px;
  19.                 width: 100px;
  20.                 margin-bottom: 20px;
  21.             }
  22.  
  23.             .box:after {
  24.                 content: '';
  25.                 position: absolute;
  26.                 border-top: 10px solid #ccc;
  27.                 border-right: 5px solid transparent;
  28.                 border-left: 5px solid transparent;
  29.                 bottom: -9px;
  30.                 left: 5px;
  31.             }
  32.  
  33.         </style>
  34.     </head>
  35.     <body>
  36.         <div class="wrapper">
  37.             <div class="box">
  38.             </div>
  39.         </div>
  40.     </body>
  41. </html>

ベースのHTMLはいたってシンプルです。
boxというクラスがついているdivに対して吹き出しをつけていきます。

吹き出しは、after疑似要素を使って絶対配置で付けます。
そのため、wrapperクラスに対してposition:relativeを指定し、boxクラスのafter擬似要素にposition:absoluteを指定しています。
吹き出しは、borderを使って表示します。
高さと幅が0の要素に対してborderを指定すると、各位置のボーダーが三角形で表示されます。
これを利用して三角形の吹き出しを作成します。

今回のサンプルでは、boxクラスの下に下向きの三角形の吹き出しを作成するため、border-topに下向きの三角形の部分となる指定をいれます。
border-topを指定するだけだと三角にならないので、border-leftとborder-rightを指定して、border-topが三角になるようにします。
colorにtransparent(透過色)を指定することで、border-leftとborder-rightを見えなくし、見事に下向きの三角形が完成します。
あとは、top(bottom)とleft(right)で吹き出しの表示位置を調整してあげれば完成です。

簡単ですね!

上付きの吹き出しや、左右付きの吹き出しを作成したい場合は、表示するborderとtransparentのborderの組み合わせを変えることで簡単に実現することができます。
上付きと左右付きの吹き出しのサンプルは、ここのソースを参照してください。

2.一般的な三角の吹き出し(ボーダー付き)



1で紹介したサンプルにちょっと手を加えることで、ボーダー付きの吹き出しを作ることができます。
ソースはこんな感じです。

  1. <!DOCTYPE HTML>
  2. <html lang="ja">
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <style type="text/css">
  6.             * {
  7.                 box-sizing: border-box;
  8.             }
  9.  
  10.             .wrapper {
  11.                 padding: 30px;
  12.                 position: relative;
  13.             } 
  14.  
  15.             .box {
  16.                 position: relative;
  17.                 background: #ccc;
  18.                 height: 50px;
  19.                 width: 100px;
  20.                 margin-bottom: 20px;
  21.                 border: 1px solid #999;
  22.             }
  23.  
  24.             .box:after {
  25.                 content: '';
  26.                 position: absolute;
  27.                 border-top: 10px solid #ccc;
  28.                 border-right: 5px solid transparent;
  29.                 border-left: 5px solid transparent;
  30.                 bottom: -9px;
  31.                 left: 5px;
  32.             }
  33.  
  34.             .box:before {
  35.                 content: '';
  36.                 position: absolute;
  37.                 border-top: 10px solid #999;
  38.                 border-right: 5px solid transparent;
  39.                 border-left: 5px solid transparent;
  40.                 bottom: -11px;
  41.                 left: 5px;
  42.             }
  43.  
  44.         </style>
  45.     </head>
  46.     <body>
  47.         <div class="wrapper">
  48.             <div class="box">
  49.             </div>
  50.         </div>
  51.     </body>
  52. </html>

1のソースと違うところは、boxクラスにborderを追加したことと、boxクラスのbefore要素を追加したことです。
before要素の指定内容はafter要素の指定内容とほぼ同じです。
違いは、border-topの色をboxクラスのborderの色と合わせたことと、bottomの位置をafter擬似要素よりも下に表示されるようにbottomの値を変更したところです。
仕組みは簡単で、before要素がafter要素からはみ出すように表示することで、あたかもborderが表示されるようにしている。ただ、それだけです。

簡単ですね!

1と同様に、上付きの吹き出しや、左右付きの吹き出しを作成したい場合は、表示するborderとtransparentのborderの組み合わせを変えることで簡単に実現することができます。
上付きと左右付きの吹き出しのサンプルは、ここのソースを参照してください。

3.ぽわわーんとした吹き出し



頭の中で考えていることなどを表示するときによく使われる、「ぽわわーん」とした吹き出しの作成方法です。

まずはソースです。
  1. <!DOCTYPE HTML>
  2. <html lang="ja">
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <title></title>
  6.         <link media="all" rel="stylesheet" href="css/reset.css" type="text/css" />
  7.         <style type="text/css">
  8.             * {
  9.                 box-sizing: border-box;
  10.             }
  11.  
  12.             .wrapper {
  13.                 padding: 30px;
  14.                 position: relative;
  15.             } 
  16.  
  17.             .box {
  18.                 position: relative;
  19.                 background: #ccc;
  20.                 height: 70px;
  21.                 width: 100px;
  22.                 margin-bottom: 20px;
  23.                 border-radius: 50px;
  24.             }
  25.  
  26.             .box:before {
  27.                 content: '';
  28.                 position: absolute;
  29.                 background: #ccc;
  30.                 height: 20px;
  31.                 width: 20px;
  32.                 border-radius: 10px;
  33.                 bottom: -20px;
  34.                 left: 70px;
  35.             }
  36.  
  37.             .box:after {
  38.                 content: '';
  39.                 position: absolute;
  40.                 background: #ccc;
  41.                 height: 10px;
  42.                 width: 10px;
  43.                 border-radius: 5px;
  44.                 bottom: -30px;
  45.                 left: 90px;
  46.             }
  47.  
  48.         </style>
  49.     </head>
  50.     <body>
  51.         <div class="wrapper">
  52.             <div class="box">
  53.             </div>
  54.         </div>
  55.     </body>
  56. </html>

1、2のサンプルと同様に、before擬似要素とafter擬似要素を使って吹き出し部分を作っていきます。
今回のサンプルでは、before要素で大きめの丸を、after要素で小さめの丸を作成しています。
擬似要素で丸を作るのは簡単で、高さと幅を同じ大きさに合わせて、border-radiusに高さ(幅)の半分の大きさを指定してやると丸を作成することができます。
あとは、top(bottom)とleft(right)で丸の表示位置を調整してあげれば完成です。

簡単ですね!

丸の表示位置を変更することで、上付き、左右付きも簡単に作成することができます。

4.丸い(曲線の)吹き出し



最後に丸い(曲線の)吹き出しです。

まずはソース

  1. <!DOCTYPE HTML>
  2. <html lang="ja">
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <title></title>
  6.         <link media="all" rel="stylesheet" href="css/reset.css" type="text/css" />
  7.         <style type="text/css">
  8.             * {
  9.                 box-sizing: border-box;
  10.             }
  11.  
  12.             .wrapper {
  13.                 padding: 30px;
  14.                 position: relative;
  15.             } 
  16.  
  17.             .box {
  18.                 position: relative;
  19.                 background: #ccc;
  20.                 height: 70px;
  21.                 width: 100px;
  22.                 margin-bottom: 20px;
  23.                 border-radius: 50px;
  24.             }
  25.  
  26.             .box:after {
  27.                 content: '';
  28.                 position: absolute;
  29.                 height: 50px;
  30.                 width: 50px;
  31.                 border-radius: 25px;
  32.                 z-index: -1;
  33.                 background: #fff;
  34.                 bottom: -20px;
  35.                 left: 50px;
  36.             }
  37.  
  38.             .box:before {
  39.                 content: '';
  40.                 position: absolute;
  41.                 height: 50px;
  42.                 width: 50px;
  43.                 border-radius: 25px;
  44.                 z-index: -1;
  45.                 background: #ccc;
  46.                 bottom: -15px;
  47.                 left: 35px;
  48.             }
  49.  
  50.         </style>
  51.     </head>
  52.     <body>
  53.         <div class="wrapper">
  54.             <div class="box">
  55.             </div>
  56.         </div>
  57.     </body>
  58. </html>

曲線の吹き出しもafter擬似要素、before擬似要素で作成します。
まずは3のサンプルと同様に、after要素とbefore要素に高さ、幅、border-radiusを指定して、丸を作成します。

次に、after要素とbefore要素の両方にz-index:-1を指定して、boxクラスの要素の後ろに隠れるようにします。

いよいよ曲線の作り方なのですが、after要素には背景色と同じ色(今回のサンプルでは#fff)を指定し、before要素には吹き出しの色を指定します。
そして、before要素とafter要素のtop(bottom)、left(right)の位置を調整して、吹き出し色の丸の上に背景色の丸がずれて重なるようにします。
吹き出し色の丸に背景色の丸を重ねてやることで、あたかも曲線の吹き出しが表示されているように見せるというわけです。

簡単ですね!

背景色の丸の位置を調整することで、吹き出しの太さを変更する事も簡単にできます。


今回紹介した方法は、アシアルブログやアシアルHPの中でも実際に使用しています。
非常に簡単に実装できるのでみなさんもぜひ試してみてください!