以前にCSSで三角形を作る記事を投稿しましたが、疑似要素で三角形を作る機会が度々あるので、Sassのmixinで作成できるようにしてみます。
サンプルコード
まずはmixin部分です。
三角形の方向と底辺、高さ、色を指定できるようにします。
@use "sass:math";
// $direction: 三角形の方向(top, bottom, left, right から選択)
// $base: 三角形の底辺
// $height: 三角形の高さ
// $color: 三角形の色
@mixin triangle($direction, $base, $height, $color) {
width: 0;
height: 0;
border: transparent math.div($base, 2) solid;
@if $direction == top {
border-bottom-color: $color;
border-bottom-width: $height;
} @else if $direction == bottom {
border-top-color: $color;
border-top-width: $height;
} @else if $direction == left {
border-right-color: $color;
border-right-width: $height;
} @else if $direction == right {
border-left-color: $color;
border-left-width: $height;
} @else {
@error "#{$direction}は未定義のdirectionです。top, bottom, left, right から指定してください。";
}
}
三角形の実装自体は以前投稿した記事と同じなので、仕組みに関してはそちらを参照ください。
実際にmixinを使ってみます。
<div class="arrow arrow-top">吹き出しテキスト<br />上向き三角形</div> <div class="arrow arrow-bottom">吹き出しテキスト<br />下向き三角形</div> <div class="arrow arrow-left">吹き出しテキスト<br />左向き三角形</div> <div class="arrow arrow-right">吹き出しテキスト<br />右向き三角形</div>
.arrow {
position: relative;
width: 250px;
margin: 20px auto;
border-radius: 5px;
border: #3498DB 2px solid;
padding: 5px;
}
.arrow:after {
content: '';
display: block;
position: absolute;
}
.arrow-top:after {
top: -18px;
left: 10px;
@include triangle(top, 16px, 8px, #3498DB);
}
.arrow-bottom:after {
bottom: -17px;
right: 10px;
@include triangle(bottom, 10px, 10px, #3498DB);
}
.arrow-left:after {
top: 10px;
left: -28px;
@include triangle(left, 12px, 20px, #3498DB);
}
.arrow-right:after {
bottom: 10px;
right: -22px;
@include triangle(right, 20px, 10px, #3498DB);
}
コメントが承認されるまで時間がかかります。