LoginSignup
1
5

More than 3 years have passed since last update.

ねんがんの 枠線付き角丸三角 をてにいれる with mixin

Last updated at Posted at 2021-04-04

a.png
Creating rounded triangles in CSS with clip-path | CodyHouse 」という記事で clip-path を使うと三角に枠線どころか角丸も適用できることを知りました。すごい!え、二年前から知ってる?あ、そう…でも専用の Mixin を作ったし、吹き出しも作ってみたので、とりあえず載っけておきますね…。

枠線付き角丸三角で吹き出しを作る

HTML はこんなんです。

<div class="baloon">うんち</div>

Sass の Mixin がこちら。必要最低限です。

@mixin triangle ($direction) {
  clip-path: polygon(0 0, 100% 100%, 0 100%);
  @if $direction == up {
    transform: rotate(135deg);
  }
  @else if $direction == down {
    transform: rotate(-45deg);
  }
  @else if $direction == left {
    transform: rotate(45deg);
  }
  @else if $direction == right {
    transform: rotate(-135deg);
  }
}

ちょっと長くなってしまいましたが、 Sass がこちら。吹き出し用の Mixin を別途用意しても良いかもしれません。

.baloon {
  background-color: #ffffff;
  border: 8px solid #000000;
  border-radius: 1rem;
  box-sizing: border-box;
  margin: 4rem;
  position: relative;
  width: 32rem;
  height: 16rem;

  &::after {
    @include triangle(down);
    background-color: inherit;
    border: inherit;
    border-radius: 0 0 0 1rem;
    box-sizing: border-box;
    content: "";
    display: block;
    margin-left: -2rem;
    position: absolute;
    left: 50%;
    bottom: -2rem;
    width: 4rem;
    height: 4rem;
  }
}

これで扉画像のような吹き出しができるはずです。
ただし、 &::afterwidthheight には同じ値を設定する必要がある…と思います。詳しい説明は こちらの記事 へどうぞ(丸投げ)。
あと px 以外の単位だと、描画に若干のズレが生じるかもしれません。それな。

普通の三角 Mixin

@mixin triangle ($direction) {
  @if $direction == up {
    clip-path: polygon(0 100%, 100% 100%, 50% 0);
  }
  @else if $direction == down {
    clip-path: polygon(0 0, 100% 0, 50% 100%);
  }
  @else if $direction == left {
    clip-path: polygon(100% 0, 100% 100%, 0 50%);
  }
  @else if $direction == right {
    clip-path: polygon(0 0, 0 100%, 100% 50%);
  }
}

この方法だと枠線も角丸も適用できませんが、 widthheight に別々の値を設定できます。適材適所。

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5