Chapter02 Sassの便利機能

概要と目標 Sassの便利な機能を覚えて、
もっと効率よくSassを書けるようになろう。

変数演算など、プログラミングでおなじみの機能が使える。
これらを使ってより効率のいいSassの記述の方法を学習しましょう。

変数 よく使う色や数字は、
変数に入れておくと便利。

Sassは変数が使えるので、
よく使う色や、よく使う数値を変数に代入しておくと便利に扱える。

変数の宣言方法

変数の宣言
$変数名: 代入するデータ;

変数を使ってみよう。

下記のCSSは、「#9DBF4A」という色コードを何度も使っている。
この場合はこの色コードを変数に入れておくことで、効率とメンテンス性が向上する。

作りたいCSS
.site-title {
  color: #9DBF4A;
}

.heading {
  background-color: #9DBF4A;
  color: #fff;
}

.button {
  color: #9DBF4A;
  border: 4px solid #9DBF4A;
}
  1. 「chapter02」 › 「variables」 › 「_sass」フォルダ内にある「common.scss」ファイルを開く
  2. 下記のsassのコードを記述する
chapter02/variables/_sass/common.scss
// 変数を宣言
$main-color: #9DBF4A;

.site-title {
  color: $main-color;
}

.heading {
  background-color: $main-color;
  color: #fff;
}

.button {
  color: $main-color;
  border: 4px solid $main-color;
}
  1. 上書き保存
  2. 「chapter02」 › 「variables」 › 「css」フォルダ内に下記の「common.css」ファイルが出来上がっていることを確認
コンパイル結果(chapter02/variables/css/common.css)
.site-title {
  color: #9DBF4A;
}

.heading {
  background-color: #9DBF4A;
  color: #fff;
}

.button {
  color: #9DBF4A;
  border: 4px solid #9DBF4A;
}
変数名命名規則
Sassは変数名のルールがゆるく、全角文字だって使える。
ただし、以下の変数名は使えないので注意する。
  • 数字から始まっている (Ex. $1main-color: #333;)
  • 連続したハイフンから始まっている (Ex. $--main-color: #333;)
  • 使えない記号含まれている (Ex. main@color: #333;)

データ型 Sassで扱えるデータの型

Sassで扱えるデータ型には、以下のものがある

  • Number型 … 数値
    (「px」や「em」などの単位が付いていてもよい)
  • Color型 … 
  • String型 … 文字列
    (「"」や、「'」で囲まれてるものの他に、
    数値や色、「true」、「false」 などに該当しない文字は、 全て String型)
  • Boolean … 真偽値 (true / false)
  • List型 … 配列
  • Map型 … 連想配列
  • Null型 … 
$font-size: 1.5em; // Number

$main-color: #663300; // Color

$text: 'Hello'; // String

$is-ie8: true; // boolean

$gutters: .5em 1em 1.5em; // List

$breakpoints: (
  'sp': 320px,
  'tab': 768px,
  'lap': 960px,
  'desk': 1200px,
); // Map

$height: null; // Null

変数のスコープ ルールセット内の変数は、
外部から参照できない。

変数はルールセットの中にでも宣言することができる。
その場合は、その変数は、そのルールセット内のみで利用できるローカル変数となる。

ローカル変数の例
.card {
  $space: 16px;
  marign-top: $space; // 参照できる
  padding: $space; // 参照できる
}

.media {
  marign-top: $space; // 参照できない
  padding: $space; // 参照できない
}

ローカル変数を使ってみよう。

  1. 「chapter02」 › 「variables」 › 「_sass」フォルダ内にある「common.scss」ファイルを開く
  2. 下記のsassのコードを記述する
chapter02/variables/_sass/common.scss
// 変数を宣言
$main-color: #9DBF4A;

.site-title {
  color: $main-color;
}

.heading {
  $space: 16px; // ローカル変数を宣言
  background-color: $main-color;
  color: #fff;
  padding: $space; // 参照できる
  margin: $space; // 参照できる
}

.button {
  color: $main-color;
  border: 4px solid $main-color;
  padding: $space; // 参照できない
}
  1. 上書き保存
  2. 19行目の「padding: $space;」で ローカル変数を参照できないため、エラーとなりコンパイルできないことを確認。
  3. グローバル変数として「$space: 8px;」を追加する。
chapter02/variables/_sass/common.scss
// 変数を宣言
$main-color: #9DBF4A;
$space: 8px;

.site-title {
  color: $main-color;
}

.heading {
  $space: 16px; // ローカル変数を宣言
  background-color: $main-color;
  color: #fff;
  padding: $space; // 参照できる
  margin: $space; // 参照できる
}

.button {
  color: $main-color;
  border: 4px solid $main-color;
  padding: $space; // 参照できない → グローバル変数を参照
}
  1. 上書き保存
  2. 「chapter02」 › 「variables」 › 「css」フォルダ内に下記の「common.css」ファイルが出来上がっていることを確認
コンパイル結果(chapter02/variables/css/common.css)
.site-title {
  color: #9DBF4A;
}

.heading {
  background-color: #9DBF4A;
  color: #fff;
  padding: 16px;
  margin: 16px;
}

.button {
  color: #9DBF4A;
  border: 4px solid #9DBF4A;
  padding: 8px;
}
「!default」と「!global」
変数の宣言時にオプションを指定することができる。
値の後ろに 「!default」と指定すると、変数にデフォルト値を割り当てることができる。つまり、この設定をしておくと、たとえこの宣言コードよりも前であっても、 同じ名前の変数名があった場合は、そっちの値で上書きされる。
!defaultの例
// グローバル変数を宣言
$space: 8px;

.heading {
  $space: 16px !default; // ローカル変数を宣言
  padding: $space; // グローバル変数で上書きするので、8pxになる
}
また、ローカル変数宣言の値の後ろに 「!global」と指定すると、同じ名前のグローバル変数がある時、この値でグローバル変数を上書きする。
!globalの例

.heading {
  $space: 16px !global; // グローバル変数として宣言
  padding: $space;
}

.button {
  padding: $space; // グローバル変数になったので、16pxになる
}

演算 数値の計算はもちろん。
色コードも計算できる。

Sassの演算は数値の計算はもちろん。
単位付きの数値色コードだって計算できる。

主な算術演算子
算術演算子 説明
+ 加算
- 減算
(マイナスと解釈されないように前後にスペースをつける)
* 掛け算
/ 割り算
(割り算の処理をするには以下の条件のいずれかを満たす必要がある。)
  • 値に変数が使われている場合
  • 値を ( ) で囲んでいる場合
  • 他の演算子 (+ - *)と一緒に使われている場合
% 余り

演算を使ってみよう

  1. 「chapter02」 › 「operation」 › 「_sass」フォルダ内にある「common.scss」ファイルを開く
  2. 下記のsassのコードを記述する
chapter02/operation/_sass/common.scss
.l-section {
  margin: 8px * 2 0;
}

.heading {
  font-size: (24px / 16px) * 1em;
}
  1. 上書き保存
  2. 「chapter02」 › 「operation」 › 「css」フォルダ内に下記の「common.css」ファイルが出来上がっていることを確認
コンパイル結果(chapter02/operation/css/common.css)
.l-section {
  margin: 16px 0;
}

.heading {
  font-size: 1.5em;
}

変数を演算に使ってみよう

変数を演算に使うこともできる。

  1. 「chapter02」 › 「operation」 › 「_sass」フォルダ内にある「common.scss」ファイルを開く
  2. 下記のsassのコードを追加する
chapter02/operation/_sass/common.scss
$content-width: 960px;

.l-section {
  margin: 8px * 2 0;
}

.heading {
  font-size: (24px / 16px) * 1em;
}

.l-main {
  float: left;
  width: (690px / $content-width) * 100%;
}

.l-sidebar {
  float: right;
  width: (240px / $content-width) * 100%;
}
  1. 上書き保存
  2. 「chapter02」 › 「operation」 › 「css」フォルダ内に下記の「common.css」ファイルが出来上がっていることを確認
コンパイル結果(chapter02/operation/css/common.css)
.l-section {
  margin: 16px 0;
}

.heading {
  font-size: 1.5em;
}

.l-main {
  float: left;
  width: 71.875%;
}

.l-sidebar {
  float: right;
  width: 25%;
}

色コードを演算してみよう

色コードも演算することができる。
主に、ホバー時の色を決める時などに使える。

  1. 「chapter02」 › 「operation」 › 「_sass」フォルダ内にある「common.scss」ファイルを開く
  2. 下記のsassのコードを追加する
chapter02/operation/_sass/common.scss
$content-width: 960px;
$main-color: #9DBF4A;

.l-section {
  margin: 8px * 2 0;
}

.heading {
  font-size: (24px / 16px) * 1em;
}

.l-main {
  float: left;
  width: (690px / $content-width) * 100%;
}

.l-sidebar {
  float: right;
  width: (240px / $content-width) * 100%;
}

.button {
  color: $main-color;

  &:hover {
    color: $main-color + #111;
  }
}
  1. 上書き保存
  2. 「chapter02」 › 「operation」 › 「css」フォルダ内に下記の「common.css」ファイルが出来上がっていることを確認
コンパイル結果(chapter02/operation/css/common.css)
.l-section {
  margin: 16px 0;
}

.heading {
  font-size: 1.5em;
}

.l-main {
  float: left;
  width: 71.875%;
}

.l-sidebar {
  float: right;
  width: 25%;
}

.button {
  color: #9DBF4A;
}

.button:hover {
  color: #aed05b;
}

文字列の結合 文字列を連結することもできる。

Sassで文字列を連結する際は「+」を使う。
演算結果に単位を連結する際などに役立つ。

文字列の結合をやってみよう。

  1. 「chapter02」 › 「operation」 › 「_sass」フォルダ内にある「common.scss」ファイルを開く
  2. 下記のsassのコードを変更する
chapter02/operation/_sass/common.scss
$content-width: 960px;
$main-color: #9DBF4A;

.l-section {
  margin: 8px * 2 0;
}

.heading {
  font-size: (24px / 16px) + em;
}

.l-main {
  float: left;
  width: (690px / $content-width) * 100%;
}

.l-sidebar {
  float: right;
  width: (240px / $content-width) * 100%;
}

.button {
  color: $main-color;

  &:hover {
    color: $main-color + #111;
  }
}
  1. 上書き保存
  2. 「chapter02」 › 「operation」 › 「css」フォルダ内に下記の「common.css」ファイルが出来上がっていることを確認
コンパイル結果(chapter02/operation/css/common.css)
.l-section {
  margin: 16px 0;
}

.heading {
  font-size: 1.5em;
}

.l-main {
  float: left;
  width: 71.875%;
}

.l-sidebar {
  float: right;
  width: 25%;
}

.button {
  color: #9DBF4A;
}

.button:hover {
  color: #aed05b;
}

インターポレーションセレクタやURLなどに、
変数を使うときは注意。

変数はプロパティの値に使うことはできるが、セレクタやURLに変数を使おうとするとエラーになる。
その場合は、変数を「#{」〜「 }」で囲むことで普通変数が使えないところで変数を参照できるようになる。

インターポレーションを使ってみよう。

  1. 「chapter02」 › 「interpolate」 › 「_sass」フォルダ内にある「common.scss」ファイルを開く
  2. 下記のsassのコードを追加する
chapter02/interpolate/_sass/common.scss
$file-path: '../assets/images/';
$font-size: 1em;
$line-height: 1.5;
$selector: '.card';

body {
  background-image: url(#{$file-path}bg.png);
  font: #{$font-size}/#{$line-height} sans-serif;
}

#{$selector} {
  display: block;
}
  1. 上書き保存
  2. 「chapter02」 › 「interpolate」 › 「css」フォルダ内に下記の「common.css」ファイルが出来上がっていることを確認
コンパイル結果(chapter02/interpolate/css/common.css)
body {
  background-image: url(../assets/images/bg.png);
  font: 1em/1.5 sans-serif;
}

.card {
  display: block;
}

インポートSassファイルを分割し、
のインポートする。

SassのインポートはCSSと同様「@import」を使う。
なおインポート先のSassファイルをコンパイル時に、CSSファイルを生成したくない場合は、
ファイル名の先頭に「_(アンダースコア)」をつけと、コンパイル後にCSSファイルを生成されない。(パーシャル)

Sassのインポート方法
@import インポートするファイルパス;

先頭の「_」と拡張子は省略できる

Sassファイルをインポートしてみよう。

  1. 「chapter02」 › 「import」 › 「_sass」 › 「inc」フォルダ内に「_settings.scss」ファイルを作成する
  2. 下記のsassのコードをコピペする
chapter02/import/_sass/inc/_settings.scss
// -----------------------------------
//  Layout Settings
//------------------------------------

// Contentの幅
$content-width: 1200px;


//====================================
//  Color Setings
//====================================

// メインカラー
$main-color: #9DBF4A;

// サブカラー
$sub-color: #2C2C31;

// テキストの色
$text-color: #212121;
  1. 「chapter02」 › 「import」 › 「_sass」フォルダ内にある「common.scss」ファイルを開く
  2. 下記のsassのコードを追加する
chapter02/import/_sass/common.scss
@import 'inc/settings';

/* =================================
  Layout
================================= */
@import 'layout/centring';
@import 'layout/header';
@import 'layout/main';
@import 'layout/footer';
  1. 上書き保存
  2. 「chapter02」 › 「import」 › 「css」フォルダ内に下記の「common.css」ファイルが出来上がっていることを確認
コンパイル結果(chapter02/import/css/common.css)
/* =================================
  Layout
================================= */
/*
  Centring
---------------------*/
.l-container {
  width: 95%;
  max-width: 1200px;
  margin: 0 auto;
}

/*
  Header
---------------------*/
.l-header {
  padding: .75em 0;
  overflow: hidden;
  background-color: #9DBF4A;
}

.l-header__title {
  float: left;
}

.l-header__nav {
  float: right;
}

/*
  Header
---------------------*/
.l-main {
  clear: both;
}

/*
  Footer
---------------------*/
.l-footer {
  padding: 1.5em 0;
  background-color: #2C2C31;
}

.l-footer__nav {
  font-size: 0;
}

.l-footer__nav__item {
  display: inline-block;
  font-size: medium;
}

.l-footer__siteinfo {
  padding: 1em 0;
}
Sassファイルの分割例
[_sass]
  |
  |-- [Foundation] (基盤用)
  |    |-- _reset.scss (ブラウザCSSのリセット)
  |    |-- _base.scss (サイト共通のベース設定)
  |
  |-- [Layout] (レイアウト用)
  |    |-- _centering.scss (「.l-container」など)
  |    |-- _header.scss (「.l-header」など)
  |    |-- _main.scss (「.l-main」など)
  |    |-- _footer.scss (「.l-footer」など)
  |
  |-- [Object] (パーツ用)
  |    |-- [Component] (何度も使うコンポーネント用)
  |    |     |-- _grid.scss (「.c-grid」など)
  |    |     |-- _card.scss (「.c-card」など)
  |    |     |-- _media.scss (「.c-media」など)
  |    |     |-- _button.scss (「.c-button」など)
  |    |
  |    |-- [Project] (プロジェクト用)
  |    |     |-- _logo.scss (「.p-logo」など)
  |    |     |-- _profile.scss (「.p-profile」など)
  |    |
  |    |-- [Utility] (調整用)
  |          |-- _margin.scss (「.u-mt」など)
  |          |-- _padding.scss (「.u-pt」など)
  |
  |-- [inc] (読み込み用)
  |    |-- _settings.scss (変数定義用)
  |
  |-- common.scss (インポート元ファイル)
  

まとめ変数や演算など、
便利な機能がある。

Sassは他のプログラミングと同様、変数や演算などが使える。

  • 色コードなどは変数で管理すると便利
  • 演算で数値を計算できる
  • Sassファイル分割し@importで管理すると便利