SassScript

SassScriptとは、素のCSSでは出来ない算術や、プログラミングではおなじみの変数や関数といった、Sassが拡張している部分のこと。これは場所を問わず様々なところで活用できます。

データ型

プロパティに設定出来る値にはそれぞれ「型(タイプ)」があります。
SassScriptは6つのデータ型をサポートしています。

名称 概要
数値 number 単位がついているものも含む 1.2、13、10px、1em、100%
文字列 string 引用符の有無は問わない "foo"、'bar'、baz
color 色名、HEX、rgb、hslなどすべて blue、#ffffff、rgba(0,0,0,0.6
真偽値 boolean 真=true 偽=false true、false
null null 何の値も含まれない状態。「ヌル」または「ナル」
リスト list 値をスペースやカンマで区切って並べたもの 0 auto、 10px 5px 15px 5px、Arial, Sans-serif

データ型なんて大層な言い方をすると小難しそうな感じですが、使えるものに関しては素のCSSと同じです。
上で挙げた中では真偽値とnullがScriptならではの型です。

string型

CSSでは2種類の文字列を使用することができます。
ひとつは "Lucida Grande"'http://sass-lang.com'などの引用符がついているもの。
もうひとつは、boldsans-serifなどの引用符がついていないものです。
Sassはどちらの文字列も認識するので、コンパイル後のCSSではSassファイルで使用したものがそのまま出力されます。

list型

marginやpaddingの指定でよくある0 autoや、フォントを指定するときのHelvetica, Arial, sans-serifといった、スペースやカンマで値を区切って並べたものがリスト型です。
(これを読んでいるあなたがプログラマなら配列をイメージしてください。ほとんど同じようなものです)
ではfont-weight:boldmargin:10px;のようなものはどうなるのかというと、SassScriptは値が1つしかなくてもカウントしているので、これらも実際は「値が1つしかないリスト」となります。

リストそのものは機能を持っていませんが、Sassのリスト関数を使えば様々な操作ができるようになります。詳しくは関数のページに書いていますので、そちらを御覧ください。

変数:$

プログラミングではおなじみの「変数」が最も簡単なSassScriptです。
とはいえ、ノンプログラマな方には馴染みが薄いと思うのでどういうものかというのを簡単に紹介します。

変数をざっくり言うと「好きなものを入れておける箱」です。
Sassの変数にはCSSのプロパティで指定する時と同じ「値」を入れることができます。

Sassで変数を使うときの構文は

$名前:値;

です。

たとえばscssファイルに

$width: 960px;

と書くと、「$widthという名前の変数に、960pxという値を入れておく」という意味になります。
変数に値を入れる時はCSSのプロパティに値を指定するのと同じ書き方をします。

名前が$widthなので、この変数を横幅の指定で使ってみることにします。

$width: 960px;

#main {
  width: $width;
}

使う時はそのまま値の代わりに変数を書くだけです。
これで#mainのwidthには960pxが指定されたことになります。

もっと使ってみます。

$width: 960px;

header {
  width:$width;
  margin:0 auto;
}

#main {
  width: $width;
  margin:20px auto;
}

footer {
  width:$width;
  margin:0 auto;
}

同じ変数をheader、#main、footerのwidthに使ってみました。
こういうソースに見覚えはありませんか?

header {
  width: 960px;
  margin: 0 auto; }

#main {
  width: 960px;
  margin: 20px auto; }

footer {
  width: 960px;
  margin: 0 auto; }

コンパイルすると変数を使った所に同じ値が出力されます。

変数の値を変えると、その変数を使っているプロパティの値が変更されます。
サイトのレイアウトやデザインについての設定を変数にしてまとめておけば、諸々の変更作業の手間がかなり軽減されることでしょう。

使っているメタ言語が異なりますが、Bootstrapは変数の値を変えることでカスタマイズができるようになっています。

変数の有効範囲

変数には有効範囲があります。
前の例ではファイルの中のトップレベルの位置で$widthという変数を書いた(という想定でした)ので、その下にあるheader、#main、footer全てで使うことができていました。
波カッコの中で変数を定義するとどうなるかというと、そのカッコの中が有効範囲になります。

トップレベルで定義されたものをグローバル変数、波括弧の中で定義されたものをローカル変数と呼びます。

以下は前のサンプルに新しいローカル変数$colorを追加したものです。

$width: 960px;

header {
  width:$width;
  margin:0 auto;
}

#main {
  $color:#333;   //<- New!
  width: $width;
  margin:20px auto;
  color: $color; //<- Use!
}

footer {
  width:$width;
  margin:0 auto;
  color: $color; //<- Use!
}

これをコンパイルするとfooterで変数を使用しているところでUndefined variable: "$color"というエラーが出ます。

#mainで定義した$colorは、#mainのローカル変数となっているため波括弧の外からはアクセスできませんが、ネストではどれだけ入れ子が深くなっても利用することができます。

$width: 960px;

header {
  width:$width;
  margin:0 auto;
}

#main {
  $color:#333;
  width: $width;
  margin:20px auto;
  color: $color; //<- Use!

  section {
    p {
      color: $color; //<- Use!

      a:link {
        color: $color;//<- Use!
      }
    }
  }

  blockquote {
    color: $color; //<- Use!
  }
}

footer {
  width:$width;
  margin:0 auto;
}

#mainでネストした中で変数を乱用してみました。a:linkが一番深いですが、問題なくコンパイルできます。< /p>

header {
  width: 960px;
  margin: 0 auto; }

#main {
  width: 960px;
  margin: 20px auto;
  color: #333333; }
  #main section p {
    color: #333333; }
    #main section p a:link {
      color: #333333; }
  #main blockquote {
    color: #333333; }

footer {
  width: 960px;
  margin: 0 auto; }