SassはCSSにはできない、コードを書く手間を減らしたり、運用しやすくする機能などがあります。今回はそういったSassならではの便利な機能を、1つずつ紹介していきたいと思います。
Sassの便利な機能
入れ子(ネスト)が使えるので、記述が省略できる
1 2 3 4 5 6 |
a { color: black; &:hover { color: blue; } } |
通常CSSでは一つのタグやクラス名に対し、一つのカッコで完結するのが普通ですが、Sassだと、上記のコードのように入れ子にして書くことができるので、長々と階層を書かなくても良いのです。
変数を使って同じ値を使いまわすことができる($base-colorなど)
1 2 3 4 5 6 7 8 9 10 11 |
$base_color: #000; p { font-color: $base_color; } .about { .about-text { font-color: $base_color; } } |
変数を使えば、最初に定義したものを何度も使えて、もし色が変わっても$base_colorの一箇所を変えるだけで変更ができ、全部を打ち直す必要がない便利な機能です。
演算を使うことができる(widthからpaddingを引いたり、割ったり)
1 2 3 4 5 6 |
$base_width: 800px; #main-contents { width: $base_width - 100; padding: 10px; } |
CSSでは演算など使えなかったのですが、Sassでは、width(幅)などや文字に演算を使うことができます。スラッシュ(/)などを使って幅などを3分割にすることもできるので、レイアウトなどにも便利です。
CSSのスタイルを継承することができる(@extend)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
.button { display: inline-block; border: 1px solid gray; background-color: #000; color: #fff; } // .button セレクタを継承・拡張したもの .button-submit { @extend .button; // .button を継承 background-color: blue; // プロパティを上書き border-radius: 4px; // 新たなプロパティの追加 } |
buttonというクラスを作って、スタイルを書き、もしそのスタイルに似たものを作りたい場合、再度書くのは文量も増えるし、面倒臭いようなときに@extendが便利です。既存のクラスの引き継いだまま、新しくスタイルを書き加えたりすることができます。
柔軟にスタイルが定義できる(@mixin)
1 2 3 4 5 6 7 8 9 10 |
@mixin border($color:#000) { border-bottom: 1px solid $color; } .header { @include border(#c0c0c0); .nav { @include border; } } |
@mixinを使えば、border($color:#000) のように引数を使うことができます。また、extendと違う点は、CSSファイルに変換されたとき、クラス名がグループ化されないことです。
関数を使うことができる
1 2 3 4 5 6 7 |
@function half-size($value) { @return round($value / 2); } .box-item { width: half-size(300px); } |
関数については, プログラミングの知識が必要ですが、上記のコードを使って説明すると、@functionで定義されたhalf-sizeという関数があって、機能としては$valueという変数に入った数値を2で割って返してくれるようになっています。こうすることで、後にhalf-size()と書いたとき、このカッコにはいる数値に対して同じ処理をしてくれます。このコードだとwidthが150pxになります。
条件分岐や繰り返し処理を行うことができる(ifやforなど)
1 2 3 4 5 6 7 8 9 10 11 12 |
$general-style: true; @if $general-style { .content { float: left; } @else { .content { float: none; } } } |
これもまた、プログラミングの知識が必要ですが、もしAが正の場合B、誤の場合Cなどの条件分岐も可能です。この場合だと真偽値がtrueなので、float: left;といったスタイルが適用されます。
複数のCSSファイルを1つのCSSファイルに圧縮できる
1 2 3 4 5 6 7 |
@import "top.scss"; @import "about.scss"; @import "news.scss"; ... @import "module/button.scss"; @import "module/headline.scss"; |
CSSの場合、複数CSSファイルがあると、<head></head>内に一個ずつ読み込まなければいけませんでした。Sassであれば@importを使い、RubyやKoalaを使うことで1つのCSSファイルとして書き出すことができます。