Sassで見出しデザインの@mixinを作ろう！

こんにちは、@pompom0c0 です。
この記事は Enigmo Advent Calendar 2018 の18日目の記事です。
17日目の記事は @natten の はじめてのキーボード設計におけるアンチパターン でした。

今日はBUYMA内で使用している見出しデザインついて紹介して行こうと思います。

## 前置き

### 今回この記事を書こうと思った経緯
- Sassの`@mixin`を実践でどんな風に使っているか知ってほしい！
- 使う見出しデザインがパターン化されているので、デフォルトであると便利だと思ったから

### 想定読者
- LPの実装をするデザイナーの方
- `@mixin`は自分から書いたことがない人。

### 今回扱わないこと
- FLOCSSの設計について
- `@extend`や`@content`での書き方紹介

## mixinのおさらい
- 別で定義したスタイルを`@include`でなんども呼び出すことができます。
- 引数を指定して、関数的な使い方もできます。

``` css:Sass記述
@mixin hoge($color: #fff, $size: 1rem) {
  color: $color;
  font-size: $size;
}
.ttl__1 {
  @include hoge(#000, 2rem);
}
.ttl__2 {
  // 引数は初期値のを使用
  @include hoge();
}
```

``` css:CSS出力結果
.ttl__1 {
  color: #000;
  font-size: 2rem;
}
.ttl__2 {
  color: #fff;
  font-size: 1rem;
}
```

引数を使えば初期値で出力するだけでなく、「今回はもう少し違った雰囲気で見せたいな...」という際には値を変えれば
デフォルトでCSSを設定していても、出力結果を冗長させることなく記述することができます。

あとはよくある見出しデザインをSassでまとめて記述しておきます。

## よく使う見出しデザインSass

### 縦線

``` css:縦線
@mixin line--ver($color: #000, $size: 30px) {
  &::after {
    content: '';
    width: 1px;
    margin-top: 1em;
    margin-bottom: .5em;
    display: inline-block;
    // 線の色と長さを引数にする
    height: $size;
    border-right: solid 1px $color;
  }
}
```

![アートボード 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/83113/133fae8b-160c-dd97-fc95-da18e97a8cbf.jpeg)



### 横線

``` css:横線
@mixin line--under($color: #000, $size: 1px) {
  position: relative;
  &::before {
    content: '';
    position: absolute;
    left: 50%;
    bottom: -15px;
    display: inline-block;
    width: 60px;
    -moz-transform: translateX(-50%);
    -webkit-transform: translateX(-50%);
    -ms-transform: translateX(-50%);
    transform: translateX(-50%);
    // 線の色と長さを引数にする
    height: $size;
    background-color: $color;
  }
}
```

![アートボード 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/83113/d04700fc-f1e3-aa78-fe5b-5d2c94a7332d.jpeg)


### 文字横に線

``` css:文字横に線
@mixin line--side($color: #000, $size: 1px) {
  border-left: solid $size;
  border-right: solid $size;
  width: 45%;
  margin: 0 auto 1em;
  padding-bottom: 0;
  border-color: $color;
}
```

![アートボード 3.jpg](https://qiita-image-store.s3.amazonaws.com/0/83113/4c6b50a9-7a3b-7321-af52-787793b951f6.jpeg)


### 文字下に蛍光ペンでマーキング

``` css:文字下に蛍光ペンでマーキング
@mixin line--maker($color: #ffc63b, $size: .2rem) {
  background: linear-gradient(transparent 60%, $color 60%);
  padding: 0 $size;
}
```

コンテンツの幅の分だけ色がついてしまうので、マーキングしたい箇所にのみ`span`タグでclass指定してください。

``` html
<div class="framework__ttl">
  <h2><span class="ttl">タイトル</span></h2>
</div>
```

![アートボード 4.jpg](https://qiita-image-store.s3.amazonaws.com/0/83113/6ee82921-32d5-195d-d64d-f895588b5e5d.jpeg)


### 鍵カッコ

``` css:鍵カッコ
@mixin mark--quo($color: #000, $size: 1px) {
  position: relative;
  padding: 1rem;
  &::before, &::after {
      content:'';
      width: 20px;
      height: 30px;
      position: absolute;
      display: inline-block;
  }
  &::before {
      border-left: solid $size $color;
      border-top: solid $size $color;
      top: 0;
      left: 0;
  }
  &::after {
      border-right: solid $size $color;
      border-bottom: solid $size $color;
      bottom: 0;
      right: 0;
  }
}
```

![アートボード 5.jpg](https://qiita-image-store.s3.amazonaws.com/0/83113/3264bdec-94ab-f725-fb8f-95c19cfc1d27.jpeg)


## まとめ
久しぶりに使う見出しデザインを実装する直前になって
「あ、これどうやって書くんだっけ・・・」とググるのは生産的じゃないな〜と思ってまとめてみました。
`@mixin`使ってるけど引数までは使ってない！使いこなしてみたい！って方に参考になればと思います。

## 参考サイト
<a href="https://qiita.com/one-a/items/2758511326c09200fded" alt="Sass(SCSS)のmixin, extendなどまとめ">Sass(SCSS)のmixin, extendなどまとめ</a>
<a href="https://qiita.com/nekoneko-wanwan/items/c8498a21ae0e2b2198be" alt="Sassで@mixinを作る時に知っておきたい基礎知識">Sassで@mixinを作る時に知っておきたい基礎知識</a>
<a href="https://www.webcreatorbox.com/tech/sass-mixin" alt="より素早くCSSコーディングするための、Sass（SCSS）のmixinスニペット集">より素早くCSSコーディングするための、Sass（SCSS）のmixinスニペット集</a>