[css]Sassの便利な点をまとめてみた 〜Sassの便利な機能(mixin, extend, etc…)〜

2019.04.04

Sassの便利な点をまとめてみた~Sassの便利な機能(mixin, extend, etc...)編〜

 

ども、「六崎」改め「むったん」です!

 

弟(むつたく)が入社して1ヶ月が経ちましたが、名前被る問題により改名しました(◍˃̶ᗜ˂̶◍)ノ”
ちなみに、今まで呼ばれてた私の珍しいあだ名は…

  • ろくちゃん(先に「むっくん」と呼ばれてた人がいたから
  • ほーちゃん(高校時代1人だけ呼んでくれてた
  • ムッソリーニさん(「むっつり」から由来して大学時代の先輩達が呼んでた…むっつりじゃないけど 笑

です!

 

 

では、前回に引き続き「Sassの便利な点をまとめてみた」ということで、便利な機能を紹介していこうと思います!

 

 

Sassの便利な点をまとめてみた

  • SASSとSCSSの違い
  • Sassの便利な機能 ←今回はこれ
  • Sassのコンパイルと出力形式

 

さて、前回Sassには2種類の記法があることを説明しました。
今回は「便利な機能」ということで、Sassの機能について紹介していきます!
ちなみに、記法はSCSSで行いたいと思います。

 

 

Sassの便利な機能

  1. ネスト(入れ子)
  2. 親参照セレクタ(&)
  3. 変数($)
  4. コードの再利用(extend)
  5. コードの再利用(mixin)
  6. 演算子

 

1.ネスト(入れ子)

 

style.scss

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ul {
  list-style: none;
  margin: 10px 0;

  li {
    color: #4286f4;
    border-bottom: 1px solid #ccc;
    padding-bottom: 5px;
    margin-bottom: 5px;

    a {
      color: #41f4a3;
    }
  }
}

 

style.css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ul {
    list-style: none;
    margin: 10px 0;
}

ul li {
    color: #4286f4;
    border-bottom: 1px solid #ccc;
    padding-bottom: 5px;
    margin-bottom: 5px;
}

ul li a {
    color: #41f4a3;
}

a {
    color: #4286f4;
    text-decoration: underline;
}

 

コンパイル時に親セレクタを頭にcssを生成してくれる機能です。
ただし、ネストし過ぎるとセレクタが長くなってしまうので2つくらいまでがオススメです!

 

2.親参照セレクタ(&)

 

style.scss

1
2
3
4
5
6
7
8
9
10
11
12
13
a {
  color: #4286f4;
  text-decoration: underline;

  &:hover {
    color: #41f4a3;
    background-color: #fcfcf7;
  }

  &:first-of-type {
    text-decoration: none;
  }
}

 

style.css

1
2
3
4
5
6
7
8
9
10
11
12
13
a {
    color: #4286f4;
    text-decoration: underline;
}

a:hover {
    color: #41f4a3;
    background-color: #fcfcf7;
}

a:first-of-type {
    text-decoration: none;
}

 

(&)を使うことで、親セレクタを自動付与してくれます。
擬似要素等に使うとメッチャ便利!

 

3.変数($)

 

style.scss

1
2
3
4
5
6
7
8
9
$red: #bc0d4a;

.attention-box {
  background-color: lighten($red, 15%);

  p {
    color: $red;
  }
}

 

style.css

1
2
3
4
5
6
7
.attention-box {
    background-color: #f0266c;
}

.attention-box p {
    color: #bc0d4a;
}

 

共通して使う値を変数にしておくとメッチャ便利です!
最初にセットしておけば生のカンプデータとの行ったり来たりをしなくて済むー✧٩(ˊωˋ*)و✧

 

ちなみに、ここで使用しているlighten
輝度の変更をしているのですが、彩度や透明度なども同じ様に簡単に変更できるので、私はよく使っています。

 

4.コードの再利用(extend)

 

style.scss

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.button-yellow {
  width: 100px;
  height: 30px;
  border-radius: 15px;
  background-color: #bc7b0d;
  color: #fff;
}

.form {
  border: 1px solid #333;

  .form-button {
    @extend .button-yellow;
  }
}

 

style.css

1
2
3
4
5
6
7
8
9
10
11
.button-yellow, .form .form-button {
    width: 100px;
    height: 30px;
    border-radius: 15px;
    background-color: #bc7b0d;
    color: #fff;
}

.form {
    border: 1px solid #333;
}

 

コードの再利用が簡単にできます。
@extendは、スタイルをそのまま継承します。
mixinとの使い分けは、私の中でも議論(1人で議論してるw)になりますが
「絶対的にプロパティや値が変わらないのであれば、extendを利用する」としています。

 

5.コードの再利用(mixin)

 

style.scss

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@mixin button-blue($background: #0d70bc, $width: 100px) {
  width: $width;
  height: 30px;
  border-radius: 15px;
  background-color: $background;
  color: #fff;
}

.form {
  border: 1px solid #333;

  .form-button {
    @include button-blue();
  }

  .thx-button {
    @include button-blue($background: #bc530d, $width: 150px)
  }
}

 

style.css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.form {
    border: 1px solid #333;
}

.form .form-button {
    width: 100px;
    height: 30px;
    border-radius: 15px;
    background-color: #0d70bc;
    color: #fff;
}

.form .thx-button {
    width: 150px;
    height: 30px;
    border-radius: 15px;
    background-color: #bc530d;
    color: #fff;
}

 

extendと同様に、コードの再利用が簡単にできます。
extendとの違いを上げると、変数によってプロパティや値を変えられることですね。
上記同様、使い分けをする際は
「ベースは変わらないけど、たまにプロパティや値が変わることがあるものは、mixinを利用する」としています。

 

6.演算子

こちらは、cssでも利用できると社内でも半年ぐらいにザワッとした記憶があるのですが…
ちょっとご紹介です。

 

style.scss

1
2
3
4
5
6
7
$side-padding: 10px;
.wrapper {
  width: calc(100% - ( #{$side-padding} * 2 ));
  height: auto;
  margin: 0 auto;
  padding: 0 $side-padding;
}

 

style.css

1
2
3
4
5
6
.wrapper {
    width: calc(100% - ( 10px * 2 ));
    height: auto;
    margin: 0 auto;
    padding: 0 10px;
}

 

レスポンシブになってくると、固定値より%で決めた方が楽だったりします。
その際、足したり引いたり割ったり掛けたり…私の頭の中はパニックになるので、よく使ってます!
この演算子のおかげで、電卓を使わなくなったし、コンパイルすると計算式ではなく値になってるのがメッチャありがたい所。

 

 

ちなみに、SCSSの変数とCSS3のcalc()を一緒に使うときには#{変数名}とすることもポイントですヾ(*´∀`*)ノ
なぜかというのは…実践してみると分かるよ!(そりゃそうだw

 

 

いかがでしたでしょうか?
ちなみに、今回いきなりSassシリーズについて書き始めたのは…
一緒に作業する千ちゃんとたくやに「ぜひ!!読んでもらいたい」から、愛を込めてしたためているのですが…
読んでくれてるのかな(●´^`●)
読んでくれてるといいな…。

 

ではっ!


Top