概要
あるコンポーネントの右上にラベルやバッジをつけるHTML/CSSの書き方を学んだので備忘。 もっと良い方法がある場合は教えて欲しい。 サンプルは以下のようなもの。
HTML
HTMLでは親のDOM(class: badge)に、 - 三角形を描くDOM(class: triangle)と、 - その上に表示するラベルを描くDOM(class: label) をそれぞれ用意する。 子要素をそれぞれ before, after の擬似要素で用意しても書けそう。 必要以上にDOMを増やしたくない場合はその方がいいかも。
<div class="badge"> <span class="triangle"></span> <span class="label">ラベル</span> </div>
CSS(SCSS)
CSS(今回簡略化のためSCSS)は以下。
.badge { position: relative; .triangle { position: absolute; border-bottom: 60px solid transparent; border-left: 60px solid red; } .label { position: absolute; top: 10px; left: 5px; font-size: 14px; color: #fff; transform: rotate(-45deg); } }
まず親となる badge に position: relative を持たす。 そして子要素たちに position: absolute を持たす。
次にtriangleで三角形を作る。 cssで三角形の作り方は下記を参照。
上記に書かれている通り、以下で実現できる。サイズや色は適当。
border-bottom: 60px solid transparent; border-left: 60px solid red;
最後にlabelで文字を上に描く。
.label { position: absolute; top: 10px; left: 5px; font-size: 14px; color: #fff; transform: rotate(-45deg); }
transform: rotate(-45deg);
で45度回転させて文字を表示する。
top, left を使って場所を調節する。
font-size や color は適当。
ラベルは下におかれるコンポーネントの上に載せないといけないので、 必要に応じて z-index を指定する必要があると思われる。
サンプルコード
完成形のサンプルコードは以下。