
吹き出しなどの三角形をCSSだけで表現する方法として、borderプロパティが使用されていることが多いです。
一見複雑なことをやっている印象ですが、実はとても単純です。
一目でわかるborder三角形の仕組み
こんなCSSがあります。
.sankaku{
height:0;
width:0;
border-top:50px solid red;
border-bottom:50px solid red;
border-left:50px solid gray;
border-right:50px solid gray;
}
これをdivに適用すると…
<div class="sankaku"> </div>
こうなる。
さらに左右を、transparentしてみる。
.sankaku{
height:0;
width:0;
border-top:50px solid red;
border-bottom:50px solid red;
border-left:50px solid transparent;
border-right:50px solid transparent;
}
さらに、下線を削除する。
.sankaku{
height:0;
width:0;
border-top:50px solid red;
border-left:50px solid transparent;
border-right:50px solid transparent;
}
もうわかりますね!
もう少し詳しく説明してみる
borderを一辺のみに適用した場合、直線が描画されます。
※今後、borderの線種は全てsolidが指定されているものとします。
しかし、隣り合う辺にもborderが適用されると…
上図のように、接する面が、台形に切り取られるのです。
この状態で、内部エリアの幅と高さをゼロにし、一辺をtransparentで透明にすると、三角形が描画されます。
次に、透明にした線の幅を変更してみましょう。
幅 | 描画結果 |
---|---|
50px |
|
75px |
|
100px |
|
150px |
|
次に、表示されている線の幅を変更してみましょう。
幅 | 描画結果 |
---|---|
20px |
|
50px |
|
70px |
|
90px |
|
このように、線の幅を変更することで、多様な三角形を描くことができます。
具体的な三角形のCSS
次に三角形のCSSを8通り紹介します。
左上向き三角形のCSS
左上向きの三角形は、上線を色指定、右線をtransparentで描画します。
(左線色指定・下線transparentで可)
.sankaku{
height:0;
width:0;
border-top:50px solid red;
border-right:50px solid transparent;
}
高さは、上線の幅。
横幅は、右線の幅で指定します。
右上向き三角形のCSS
左上向きの三角形は、上線を色指定、左線をtransparentで描画します。
(右線色指定・下線transparentでも可)
.sankaku{
height:0;
width:0;
border-top:50px solid red;
border-left:50px solid transparent;
}
高さは、上線の幅。
横幅は、左線の幅で指定します。
左下向き三角形のCSS
左下向きの三角形は、下線を色指定、右線をtransparentで描画します。
(左線色指定・上線transparentでも可)
.sankaku{
height:0;
width:0;
border-bottom:50px solid red;
border-right:50px solid transparent;
}
高さは、下線の幅。
横幅は、右線の幅で指定します。
右下向き三角形のCSS
右下向きの三角形は、下線を色指定、左線をtransparentで描画します。
(右線色指定・上線transparentでも可)
.sankaku{
height:0;
width:0;
border-bottom:50px solid red;
border-left:50px solid transparent;
}
高さは、下線の幅。
横幅は、右線の幅で指定します。
上向き三角形のCSS
上向きの三角形は、下線を色指定、左線と右線をtransparentで描画します。
.sankaku{
height:0;
width:0;
border-bottom:50px solid red;
border-left:50px solid transparent;
border-right:50px solid transparent;
}
高さは、下線の幅。
横幅は、右線と左線の幅で指定します。
下向き三角形のCSS
下向きの三角形は、上線を色指定、左線と右線をtransparentで描画します。
.sankaku{
height:0;
width:0;
border-top:50px solid red;
border-left:50px solid transparent;
border-right:50px solid transparent;
}
高さは、上線の幅。
横幅は、右線と左線の幅で指定します。
左向き三角形のCSS
左向きの三角形は、右線を色指定、上線と下線をtransparentで描画します。
.sankaku{
height:0;
width:0;
border-right:50px solid red;
border-top:50px solid transparent;
border-bottom:50px solid transparent;
}
高さは、上線と下線の幅。
横幅は、右線の幅で指定します。
右向き三角形のCSS
右向きの三角形は、左線を色指定、上線と下線をtransparentで描画します。
.sankaku{
height:0;
width:0;
border-left:50px solid red;
border-top:50px solid transparent;
border-bottom:50px solid transparent;
}
高さは、上線と下線の幅。
横幅は、左線の幅で指定します。
三角形に影を付ける
borderで作成した三角形に影を付けてみましょう。
影はbox-shadowプロパティを使用します。
.sankaku{
height:0;
width:0;
border-left:50px solid red;
border-top:50px solid transparent;
border-bottom:50px solid transparent;
box-shadow:5px 5px 5px 0 rgba(0,0,0,.5);
}
どうです?
おかしな影の付き方をしていますね…
transparentで透明にしたとしても、実際には線が存在するので、その部分にも影が描画されてしまうのです。
そこでfilter: drop-shadow()を使用します。
.sankaku{
height:0;
width:0;
border-left:50px solid red;
border-top:50px solid transparent;
border-bottom:50px solid transparent;
filter: drop-shadow(5px 5px 5px rgba(0,0,0,.5));
}
今度は思った通りの影が描画されました。
三角形に影を付けるときは、filter: drop-shadow()を使用しましょう。
番外:borderで三角形にしたくない
隣り合ったボーダーを台形に切り取らないで、次のようにL字に交わる図形を作成してみます。
divを入れ子にします。
<div class="outer_line">
<div class="innner_line">
こんなボックスを作りたい!
</div>
</div>
外側のdivはパディング0。
内側のdivはマージン0に設定して、それぞれborderで枠線セットします。
.outer_line{
padding:0;
border-left:20px solid blue;
border-right:20px solid blue;
}
.innner_line{
margin:0;
border-top:20px solid red;
border-bottom:20px solid red;
width:100%;
height:100%;
}
外側のdivのパディングの上下に対して値をセットすると、少しおもしろい形になります。
.outer_line{
padding:20px 0;
border-left:20px solid blue;
border-right:20px solid blue;
}
.innner_line{
margin:0;
border-top:20px solid red;
border-bottom:20px solid red;
border-left:5px solid white;
border-right:5px solid white;
width:100%;
height:100%;
}
このほかに、議事要素のafterとbeforeを使用する方法もあります。
いろいろ試してみてください。
■Googleで他サイト検索
■僕がおススメするアフィリエイト教材
■マーケティング施策ツール