Translation of Sass: Sass Basics
Sassを使えるようにするには、まずあなたのプロジェクトにSassをセットアップする必要があります。もし単にこの文書を読みに来ただけなら、そのまま読み進めてください。しかしながらまずSassをインストールすることを薦めます。インストール手順の解説を読めば、セットアップに必要なことは全て知ることができるでしょう。
CSSはただそれだけで楽しいものです。しかし、スタイルシートは大きく、より複雑に、そしてメンテナンスしづらくなっていってしまいます。プリプロセッサーが改善するのはそういったところです。SassはまだCSSにない機能、例えば変数やネスト、ミックスイン、そして継承などの機能を使えるようにし、CSSを再び楽しい物にしてくれます。
Sassを使ってスタイルシートをいじくり回し終わったなら、そのあなたの書いたプリプロセスされたSassファイルは、ウェブサイトで使えるように普通のCSSファイルとして保存されます。
スタイルシート全体で何回も使いたい情報を保存できる変数について考えてみてください。色やフォント・スタック他あらゆるCSSの値を再利用できるように保存できるのです。Sassでは$
という記号を使って変数を作成できます。例えば:
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
Sassで処理すると、定義した$font-stack
と$primary-color
という変数を認識し、出力する普通のCSSでその変数の値で置き換えられます。ブランド・カラーを扱う場合や、ウェブサイト全体で一貫性を持たせたい場合にとても強力な味方になってくれます。
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
HTMLを書いていると、それが明確にネストされていて、わかりやすく階層化されていることに気づくことでしょう。一方CSSは……というと……。SassではHTMLと同じようにセレクターをネストさせることができます。ウェブサイトのナビゲーションを例にしてみましょう:
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
ul
とli
、そしてa
というセレクターがnav
というセレクターにネストされていますよね。こうやって読みやすいようにCSSを管理できるようになります。CSSを生成すると以下のような形になるでしょう:
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
パーシャル(訳注: いわゆるライブラリなどと呼ばれるものと同じようなものです)という、CSSの小さなスニペットを、他のSassファイルから読み込めるように作成することが出来ます。CSSをモジュール化し、メンテナンスしやすいようにするにはとても良いでしょう。パーシャルはSassファイルにアンダースコア(_)で始まるファイル名を付けるだけです。例えば_partial.scss
などです。アンダースコアを付けることによってSassにパーシャルのファイルであることを教え、生成するCSSに含めるようにすることができるわけです。Sassのパーシャルは@import
ディレクティブで読み込みます。
CSSにはインポート機能があり、CSSを小さくよりメンテナンスしやすい単位に分割することが可能になっています。しかしこの機能には@import
が使われる度にHTTPリクエストが発生するという欠点があります。Sassでは@import
をCSSのそれの上位互換として実装していますが、余計なHTTPリクエストが発生しないようにインポートしようとしているファイルを連結して取り込み、ブラウザーにはたったひとつのCSSファイルを提供するという形になっています。
例えば_resrt.scss
とbase.scss
という2つのSassファイルがあるとしましょう。そして_reset.scss
をbase.scss
へインポートしたいします。
/* _reset.scss */
html,
body,
ul,
ol {
margin: 0;
padding: 0;
}
/* base.scss */
@import 'reset';
body {
font-size: 100% Helvetica, sans-serif;
background-color: #efefef;
}
ここで@import 'reset';
とbase.scss
に書いているのに気づいたでしょうか。Sassは賢いのでインポートする場合にファイルの拡張子である.scss
は必要ありません。適切に解釈します。生成したCSSは以下のようになるでしょう:
html, body, ul, ol {
margin: 0;
padding: 0;
}
body {
background-color: #efefef;
font-size: 100% Helvetica, sans-serif;
}
CSSでは書くのが面倒だったりすること、特にCSS3においていくつものベンダー拡張プリフィックスが必要であったりする場合があります。ミックスインによってCSSの定義をグルーピングし、ウェブサイト全体で再利用できるようになります。ミックスインには引数を与えることもできるので、柔軟なものを作ることができるでしょう。ミックスインの利用例としてはベンダー拡張プリフィックスの追加が挙げられます。border-radius
を例にしてみましょう。
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
-o-border-radius: $radius;
border-radius: $radius;
}
.box { @include border-radius(10px); }
ミックスインの作成には@mixin
ディレクティブを使い、名前を付けます。ここではborder-radius
としました。カッコ内で$radius
という変数を使っていますが、これによりどんな丸まり度をも引数として与えることが可能になります。ミックスインを作成した後、@include
でミックスインの名前を指定して使うことになります。生成されるCSSは以下のようになるでしょう:
.box {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
-o-border-radius: 10px;
border-radius: 10px;
}
継承はSassの最も便利な機能のひとつです。@extend
を使うことにより、CSSプロパティーをあるセレクターと他のセレクターで共有することが可能になります。SassをDRY(訳注: Don't Repeat Yourself)に保つために非常に助けになるでしょう。以下の例ではエラーと警告、そして成功のメッセージのための一連のスタイルを作ってみます:
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: green;
}
.error {
@extend .message;
border-color: red;
}
.warning {
@extend .message;
border-color: yellow;
}
上記コードがやろうとしていることは.message
で定義されたのCSSプロパティーを.success
や.error
、そして.warning
にも適用しようというものです。生成されたCSSでは魔法のようにうまくいくので、HTML側でいくつものクラス名を指定する必要はなくなります。例えばこのように:
.message, .success, .error, .warning {
border: 1px solid #cccccc;
padding: 10px;
color: #333;
}
.success {
border-color: green;
}
.error {
border-color: red;
}
.warning {
border-color: yellow;
}
計算をCSSの中で行えるととても便利なことでしょう。Sassでは標準的な演算子、+
や-
、*
、/
、そして%
を利用することが出来ます。以下の例ではaside
とarticle
の幅を計算で指定してみたいと思います。
.container { width: 100%; }
article[role="main"] {
float: left;
width: 600px / 960px * 100%;
}
aside[role="complimentary"] {
float: right;
width: 300px / 960px * 100%;
}
これは960pxベースの簡単なパーセント・グリッドを作成しています。こういう計算により、ごく簡単にピクセル単位をパーセントに変換することもできるでしょう。生成されたCSSは以下のようなものになります:
.container {
width: 100%;
}
article[role="main"] {
float: left;
width: 62.5%;
}
aside[role="complimentary"] {
float: right;
width: 31.25%;
}