[scss]毎回面倒な吹き出しをmixin化

なんでもっと早くやらなかったのか不思議で仕方ない。
毎回普通にcss書いてたので、流石にめんどくさくてmixin作りました。
単色の吹き出しに使えます。

  1. // mixin
  2. @mixin balloon-arrow($direction, $duration, $color) {
  3. position: absolute;
  4. content: "";
  5. display: block;
  6. width: 0;
  7. height: 0;
  8. border-style: solid;
  9. @if $direction == top {
  10. top: -$duration;
  11. left: 50%;
  12. margin-left: -$duration;
  13. border-width: 0 $duration $duration $duration;
  14. border-color: transparent transparent $color transparent;
  15. }
  16. @if $direction == right {
  17. right: -$duration;
  18. top: 50%;
  19. margin-top: -$duration;
  20. border-width: $duration 0 $duration $duration;
  21. border-color: transparent transparent transparent $color;
  22. }
  23. @if $direction == bottom {
  24. bottom: -$duration;
  25. left: 50%;
  26. margin-left: -$duration;
  27. border-width: $duration $duration 0 $duration;
  28. border-color: $color transparent transparent transparent;
  29. }
  30. @if $direction == left {
  31. left: -$duration;
  32. top: 50%;
  33. margin-top: -$duration;
  34. border-width: $duration $duration $duration 0 ;
  35. border-color: transparent $color transparent transparent;
  36. }
  37. }
// mixin
@mixin balloon-arrow($direction, $duration, $color) {
    position: absolute;
    content: "";
    display: block;
    width: 0;
    height: 0;
    border-style: solid;
    @if $direction == top {
        top: -$duration;
        left: 50%;
        margin-left: -$duration;
        border-width: 0 $duration $duration $duration;
        border-color: transparent transparent $color transparent;
    }
    @if $direction == right {
        right: -$duration;
        top: 50%;
        margin-top: -$duration;
        border-width: $duration 0 $duration $duration;
        border-color: transparent transparent transparent $color;
    }
    @if $direction == bottom {
        bottom: -$duration;
        left: 50%;
        margin-left: -$duration;
        border-width: $duration $duration 0 $duration;
        border-color: $color transparent transparent transparent;
    }
    @if $direction == left {
        left: -$duration;
        top: 50%;
        margin-top: -$duration;
        border-width: $duration $duration $duration 0 ;
        border-color: transparent $color transparent transparent;
    }
}

引数はそれぞれ
$direction 吹き出しの方向、top, right, bottom, leftで指定 bottomだったらボックスの下にくっつく
$duration 吹き出しの大きさ pxで指定
$color 吹き出しの色 hexでもrgbでもrgbaでもok

  1. // scss
  2. .balloon {
  3. background: #000;
  4. border-radius: 20px;
  5. position: relative;
  6. &:after {
  7. @include balloon-arrow(bottom, 20px, #000);
  8. }
  9. }
// scss
.balloon {
    background: #000;
    border-radius: 20px;
    position: relative;
        
    &:after {
        @include balloon-arrow(bottom, 20px, #000);
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です