Syntactically Awesome StyleSheets
SassでCSSの弱点を克服しよう
maedana
SonicGarden
SUG(SKIP User Group)/日本Hamlの会
2009/5/22
Sassの基本文法
原則として、セレクタに対してプロパティと値を半角スペース2文字のインデントすることで表現します。
簡潔にまとめると、CSSとは以下のような点で異なります。
- { }が不要。代わりに半角スペース2文字のインデントを用いる
- ;(セミコロン)が不要
- プロパティの後ろではなく先頭に:(コロン)を付ける
例えば、リスト7のようなSassは、リスト8のようなCSSと同じ表現になります。
:color #fff
●ネストしたルール
セレクタをネストして記述すると、以下のように内側のセレクタは外側のセレクタの子供になります。
#main p
:color #00ff00
:width 97%
.redbox
:background-color #ff0000
:color #000000
% sass nested.sass -t compact
#main p { color: #00ff00; width: 97%; }
#main p .redbox { background-color: #ff0000; color: #000000; }
●親ルールの参照
&で親のセレクタを展開できます。以下では、&によって親のセレクタである[.rebox]が展開される様子が分かります。
:background-color #ff0000
div&
:color #f6f6f6
% sass referencing_parent_rule.sass -t compact
.redbox { background-color: #ff0000; }
div.redbox { color: #f6f6f6; }
●属性ネームスペース
同一ネームスペースのプロパティ、例えば共通の[font]というネームスペースのプロパティであるfont-familyとfont-sizeなどをネストして記述できます。
.funky
:font
:family fantasy
:size 30em
% sass attribute_namespaces.sass -t compact
.funky { font-family: fantasy; font-size: 30em; }
●CSSに出力しないコメント(Silent Comments)
以下のように生成されるCSSに含めないコメントを記述できます。
// この行は出力されません
#first.rule
// この行も出力されません
:width 100%
#second.rule
// 複数行のコメントを書きたい場合はネストして書きます
2行め
3行め
:width 99%
% sass silent_comments.sass
#first.rule {
width: 100%; }
#second.rule {
width: 99%; }
●CSSに出力するコメント(Loud Comments)
一方、生成されるCSSにコメントを含める記述もできます。
/* この行は出力されます
#first.rule
/* この行も出力されます
:width 100%
#second.rule
/* 複数行のコメントを出力したい場合はネストして書きます
2行め
3行め
:width 99%
% sass silent_comments.sass
/* この行は出力されます */
#first.rule {
/* この行も出力されます */
width: 100%; }
#second.rule {
/* 複数行のコメントを出力したい場合はネストして書きます
* 2行め
* 3行め */
width: 99%; }
Sass独自の文法―定数
Sassでは以下の4種類の定数を利用できます。
- 数値
- 色
- 単位(px、emなど)
- 文字列
例えば、色の定数定義と参照は以下のようになります。
% cat constants.sass
!main_color = #00ff00
#main
:background-color = !main_color
% sass constants.sass -t compact
#main { background-color: #00ff00; }
●定数の演算(数値と単位)
Sassでは数値や単位の演算が可能です。例えば、以下のように演算の様子が確認できます。
!main_width = 10
!unit1 = em
!unit2 = px
#main
p.foo
:width = !main_width + !unit1
p.bar
:width = (!main_width + 15) + !unit2
p.baz
:width = (!main_width / 5) + px
% sass arithmetic_number.sass -t compact
#main p.foo { width: 10em; }
#main p.bar { width: 25px; }
#main p.baz { width: 2px; }
●定数の演算(色)
Sassでは、色に対しての演算が可能となっています。筆者は16進数を見ても、どれが何色かほとんど分かりません。しかし、この仕組みを使えば、背景色より少し濃い罫線を作るといったことが簡単に実現できるので重宝しています。
具体例を示します。!base_colorで定義した#cccから#333を減算することで、少し濃い#999を算出しています。これは簡単な例ですが、うまく使えば基本色を変更するだけでサイト全体の色を調節するといったことも可能になるでしょう。
!base_color = #ccc
div.foo
:color = !base_color
:border = 1px solid (!base_color - #333)
% sass arithmetic_color.sass -t compact
div.foo { color: #cccccc; border: 1px solid #999999; }
Sass独自の文法―Mixins
SassにはMixinsという文法もあります。Mixinsを利用することで、CSSの定義をグループ化し、再利用することが可能となります。
Mixinsの定義は=で行い、+で任意の場所で利用できます。筆者はSassにおける最も特徴的で非常に強力な機能だと考えています。
以下に具体例を示します。=large-textでフォントに関するCSSをグループ化し、.page_titleセレクタの中にMixinしています。複数のセレクタに共通するスタイルのグループに名前を付けて分離するなど、うまく利用すればCSSのメンテナンス性を大きく向上させることができるでしょう。
=large-text
:font
:family Arial
:size 20px
.page-title
:color #fff
+large-text
% sass mixins.sass
.page-title {
color: #fff;
font-family: Arial;
font-size: 20px; }
いくつかのTipsとまとめ
●Sassを利用する上での便利なソフト
筆者はVimというエディタを常用しているため、以下で紹介するVimプラグインを愛用しています。筆者は利用したことがありませんが、EmacsやNetBeansでもSassをサポートしています。これらのエディタやIDEをご利用の方は試してみるとよいでしょう。
●既存のCSSをSass化する方法
Hamlをインストールすることで、css2sassというコマンドが利用できます。リスト9のようなファイルsample1.cssがある場合、リスト10のようにして使います。
.link:hover { color: blue; }
.link
:color #0080DD
&:hover
:color blue
Sassとは何かからSassの文法まで、駆け足で説明しましたがいかがだったでしょうか。SassとRailsの組み合わせが便利なのはもちろんですが、筆者の個人的な意見としては単純にCSSのジェネレータとして非常に使い勝手がいいと感じています。
Sassの文法も慣れるまでは戸惑うかもしれませんが、すでに慣れてしまった筆者にとっては手放せないものとなりました。CSSよりも簡潔に記述できるうえ、書き手による構文のゆれも発生しません。定数やMixinなどの強力な機能は、うまく使えばCSSのメンテナンス性が大きく向上するでしょう。
Sassを導入するにはRubyとRubyGemsが必要ですが、普段お使いの言語やフレームワークに関係なく、CSSのメンテナンスにお困りの方やこれから新規にCSSを作成していかなければいけないような方は一度Sassを試してみてはいかがでしょうか。
最後に参考文献やWebサイトを示します。
●Sass(Syntactically Awesome StyleSheets)
本家のドキュメントです。本稿を読んで、Sassに興味をもたれた方はぜひ一読されることをお勧めします。
●日本Hamlの会(通称:日本ハム)
HamlやSassに関する日本語での情報が満載です。筆者は会長のid:ursm氏のおかげでSassに出会いました。
2/2 |
Index | |
SassでCSSの弱点を克服しよう | |
Page1 かっこいい構文のスタイルシート? Sassの基本を押さえよう |
|
Page2 Sassの基本文法 Sass独自の文法―定数 Sass独自の文法―Mixins いくつかのTipsとまとめ |
Coding Edgeフォーラム トップページ |
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|