(56) 【Sass入門#1】sassでcssを簡潔に書く。

投稿者: | 2018年9月3日

この記事は最終更新から 1147日 が経過しています。

1. やりたいこと

大きなサイトを書くと、必然的にCSSも大きく複雑になる。

こんなとき…
「CSSで変数が使えたらなぁ…」
「速度のロスなくCSSの中で別のCSSをインポート出来たらなぁ…」
「似たような記述を共通関数で書けたらなぁ…」

など、普通のプログラミングと同じことが出来れば便利だなぁと思う。

同じことを考える先人たちが当然のごとく存在しており、この思いを具現化してくれていた。

それが Sass なのだそうだ。
※Syntactically Awesome Stylesheets サースと読む。

2. Sassのメカニズム

当然ながら WEBブラウザは CSSは理解できても SASSなどは全く知らない。
従って、WEBサーバーがファイルを拾いに来る場所には、CSSファイルを置いておかなければならない。

つまり…
1) Sass言語で CSSの元ネタとなるものを書く。
2) Sassプログラムで CSSファイルにコンバートする。
3) 生成された CSSファイルを WEBサーバーの見える場所に置く。

のような使い方になる。

3. やってみる

(1) Sassをインストール

Sassは Ruby上で動くプログラムなので、まずは Rubyをインストールする。
私は CentOS7を使っているので yum でインストールする。

yum install ruby ruby-devel

次にSassをインストールする。

gem install sass

Sassのバージョンを確認。

# sass -v
Ruby Sass 3.5.7

(2) 入れ子構造を書いてみる。

こんな SCSSファイルを作成した。
style.scss

div#box{
  display: inline-block;
  padding: 1rem;
  p {
    font-size: 1rem;
    padding: 0.5rem;
  }
}

このファイルを SASSで CSSに変換してみる。

sass style.scss:style.css

入れ子構造が展開されて、こんな CSSファイルが出来た。
style.css

div#box {
  display: inline-block;
  padding: 1rem;
}
div#box p {
  font-size: 1rem;
  padding: 0.5rem;
}

期待通りに出来上がっている。

(3) 他ファイルを import してみる。

こんな SCSSファイルを作成した。
style.scss

@import "child1.scss";
@import "child2.scss";

child1.scss

div#id1{
  padding: 1rem;
  p {
    line-height: 1.5rem;
  }
}

child2.scss

div#id2{
  padding: 1.2rem;
  p {
    line-height: 1.7rem;
  }
}

これらのファイルを SASSで CSSに変換してみる。

sass style.scss:style.css

こんな CSSファイルが出来た。
style.css

div#id1 {
  padding: 1rem; }
  div#id1 p {
    line-height: 1.5rem; }

div#id2 {
  padding: 1.2rem; }
  div#id2 p {
    line-height: 1.7rem; }

期待通りに出来上がっている。

ついでに (50) Node.js + gulpでcssファイルを自動圧縮 でインストールした cleancss で minify してみる。

cleancss -o ./style.css ./style.css

こんな風になった。

div#id1{padding:1rem}div#id1 p{line-height:1.5rem}div#id2{padding:1.2rem}div#id2 p{line-height:1.7rem}

(3) -t オプションで出力形式を指定する。

1) expanded

expandedオプション指定で sassコマンドを実行する。

sass -t expanded style.scss:style.css

普通のCSS形式で出力される。
手書きと同じなのでこれが一番見やすいかもしれない。
が…

目視して編集するのは SASS形式、WEBサーバーへのアップ時には minifyの後、
なので、この中間生成物的な位置づけの Sass出力ファイルのフォーマットは気にする必要がない。

div#id1 {
  padding: 1rem;
}
div#id1 p {
  line-height: 1.5rem;
}

2) compact

compactオプション指定で sassコマンドを実行する。

sass -t compact style.scss:style.css

こんな風に出力される。

div#id1 { padding: 1rem; }
div#id1 p { line-height: 1.5rem; }

3) compressed

compressedオプション指定で sassコマンドを実行する。

sass -t compressed style.scss:style.css

こんな風に出力される。
cleancssで minifyする必要がない。
これが一番実用的かもしれない。

div#id1{padding:1rem}div#id1 p{line-height:1.5rem}div#id2{padding:1.2rem}div#id2 p{line-height:1.7rem}

4) nested (default)

nestedオプション指定で sassコマンドを実行する。
-tオプションを指定しない場合のデフォルトがこれだ。

sass -t nested style.scss:style.css

こんな風に出力される。

div#id1 {
  padding: 1rem; }
  div#id1 p {
    line-height: 1.5rem; }

本投稿がてんこ盛りになってしまいそうなので、この他の Sassの使い方は次回投稿以降で書くことにする。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)