Stylus入門
StylusはSASSやLESSのようなCSSメタ言語。某所で話題にあがったのでどんなことができるのか一通り触ってみました。
実行環境ですが通常はnode.jsなどのインストールが必要です。私の場合、CodeKitを利用しているので特になにもインストールせずに利用できました。
stylus用のファイルをstylus/○○.stylとして保存すると、css/○○.cssと書き出されます。それではざっくりと基本機能の紹介します。
Selectors(セレクタ)
stylusはPythonようにインデントベースの記述を行います。
.hoge
color blue
font-weight bold
と記述すると以下のようなCSSが出力されます。
.hoge {
color: #00f;
font-weight: bold;
}
このように基本的に括弧やセミコロン、コロンなどは省略して記述します。また値などのフォーマットもそろえて出力されます。
セレクタをネストすることで複数のセレクタを出力することができます。
body
color red
p
color black
body {
color: #f00;
}
body p {
color: #000;
}
&をつけて記述することで親要素を参照するセレクタを出力できます。
body
color red
&.hoge
color black
body {
color: #f00;
}
body.hoge {
color: #000;
}
Variables(変数)
font-size = 14px
body
font font-size Arial, sans-serif
変数「font-size」を作成し、以降のCSSで利用が可能です。
body {
font: 14px Arial, sans-serif;
}
コロンを利用すると値の設定と同時に変数の宣言が可能です。
#logo
width: w = 150px
margin-left: -(w / 2)
#logo {
width: 150px;
margin-left: -75px;
}
これは@を利用して次のように記述することも可能です。
#logo
width: 150px
margin-left: -(@width / 2)
次のようにmixinをベースにした拡張も可能です。
position()
position: arguments
z-index: 1 unless @z-index
#logo
z-index: 20
position: absolute
#logo2
position: absolute
この場合、positionが指定されていてz-indexの指定がない場合は「z-index: 1」が出力されます。
#logo {
z-index: 20;
position: absolute;
}
#logo2 {
position: absolute;
z-index: 1;
}
Interpolation
vendor(prop, args)
-webkit-{prop} args
-moz-{prop} args
{prop} args
.hoge
vendor('box-shadow', 1px 0 0 #CCC)
このようにvendor()を定義しておくとベンダープリフィックスの定義が簡単です。
.hoge {
-webkit-box-shadow: 1px 0 0 #ccc;
-moz-box-shadow: 1px 0 0 #ccc;
box-shadow: 1px 0 0 #ccc;
}
ループ
table
for row in 1 2 3 4 5
tr:nth-child({row})
height: 10px * row
for文を利用することもできます。
table tr:nth-child(1) {
height: 10px;
}
table tr:nth-child(2) {
height: 20px;
}
table tr:nth-child(3) {
height: 30px;
}
table tr:nth-child(4) {
height: 40px;
}
table tr:nth-child(5) {
height: 50px;
}
Mixins
ミックスインで様々な定義が可能。
box-shadow()
-webkit-box-shadow arguments
-moz-box-shadow arguments
box-shadow arguments
.ie8 &
border 1px solid arguments[length(arguments) - 1]
.box
box-shadow 1px 1px 3px #eee
次のようにie8用に別のスタイルを定義もできます。
.box {
-webkit-box-shadow: 1px 1px 3px #eee;
-moz-box-shadow: 1px 1px 3px #eee;
box-shadow: 1px 1px 3px #eee;
}
.ie8 .box {
border: 1px solid #eee;
}
演算もできるのでプラスマイナスを変換することも可能です。
pad(n)
padding (- n)
body
pad(5px)
演算
他にも様々な計算が可能です。
body
foo: 5px + 10
foo: 2 ** 8
foo: 5px * 2
foo: !!''
foo: foo and bar and baz
foo: foo or bar or baz
foo: 1..5
foo: 1...5
foo: 'foo' is a 'string'
foo: (1 2 3) == (1 2 3)
foo: (1 2 3) == (1 2)
foo: ((one 1) (two 2)) == ((one 1) (two 2))
foo: ((one 1) (two 2)) == ((one 1) (two))
foo: ((one 1) (two 2))[0]
foo: 3 in (1 2 3 4)
body {
foo: 15px;
foo: 256;
foo: 10px;
foo: false;
foo: baz;
foo: foo;
foo: 1 2 3 4 5;
foo: 1 2 3 4;
foo: true;
foo: true;
foo: false;
foo: true;
foo: false;
foo: one 1;
foo: true;
}
演算だけでなく値や文字列に関しても操作可能です。
body
foo: foo + bar
foo: 'foo ' + bar
foo: 'foo ' + 'bar'
foo: 'foo ' + 5px
foo: 2s - 500ms
foo: 5000ms == 5s
foo: 50deg
body {
foo: foobar;
foo: "foo bar";
foo: "foo bar";
foo: "foo 5px";
foo: 1.5s;
foo: true;
foo: 50deg;
}
文字列の置き換え
文字列の置き換えも可能。もうCSSというより完全にプログラム言語
body
foo: '%s / %s' % (5px 10px)
foo: 'MS:WeirdStuff(opacity=%s)' % 1
foo: unquote('MS:WeirdStuff(opacity=1)')
body {
foo: 5px / 10px;
foo: MS:WeirdStuff(opacity=1);
foo: MS:WeirdStuff(opacity=1);
}
色に関する操作
色に関しても様々な操作が可能です。
body
foo: white - 50%
foo: black + 50%
foo: #eee - #f00
foo: #eee - rgba(black,.5)
foo: #cc0000 + 30deg
body {
foo: #808080;
foo: #808080;
foo: #0ee;
foo: rgba(238,238,238,0.5);
foo: #c60;
}
他にも様々な機能があるみたいです。
すごくシンプルに書けて高機能なのですが、シンプルすぎて可読性が落ちる気もします(慣れの問題かも)。
スポンサードリンク
«iOSシミュレータでWebインスペクタが利用できる「iWebInspector」 | メイン | Proxyデバッグソフト「Charles」がすごい»