YaCSSは以下のような構造化されたCSSを、通常のCSSに変換するためのプログラムです。
通常のCSSでは、以下のように同じ.pageを何度も書かなければなりません。
.page .title{ ... }
.page .navigation{ ... }
.page .entry{ ... }
しかし、YaCSSを使うと以下のように書けます。
.page{
.title{ ... }
.navigation{ ... }
.entry{ ... }
}
このプログラムは、名前の通り Smart*CSSをマネしたものです。 しかし、以下のような違いがあります。
ビルド時に以下の環境が必要になります。
使用しているライブラリはParsecだけなので、ソースを修正すればHugs等でも動くかもしれません。
実行時にcpp(C Preprocessor)と併用すると、以下のことが可能になります。
以下のアーカイブを適当なディレクトリに解凍してください。
yacss-1.0.2-bin.zip(Fri Jul 10 19:22:21 2009)
ビルドには GHCが必要です。
yacss-1.0.2-src.tar.bz2(Fri Jul 10 19:22:21 2009)
上記のファイルをダウンロードし、以下のようにすることでインストールできます。
$ tar xvjf yacss-X.Y.Z-src.tar.bz2 $ cd yacss-X.Y.Z/ $ ghc --make css $ (sudo) cp css /usr/local/bin
foo.scssからbar.cssを作る場合は次のようにします。
$ css foo.scss > bar.css
変数などを使用するためにcppと併用する場合は、次のようにします。
$ cpp -P foo.scss | css > bar.css
変数の使用方法以外は、 Smart*CSSと同様です。
Before:
.page{
margin: 10px;
.title{
font-size:150%;
}
.entry{
border: 1px solid black;
}
}
After:
.page {
margin: 10px;
}
.page .title {
font-size: 150%;
}
.page .entry {
border: 1px solid black;
}
最も基本的な書き方です。入れ子構造を展開して、普通のCSSを出力します。
Before:
.page{
pre,blockquote{
margin-left:10px;
}
}
/* 親要素もカンマで区切れます */
.header,.footer{
p{
text-align:right;
}
}
After:
.page pre {
margin-left: 10px;
}
.page blockquote {
margin-left: 10px;
}
.header p {
text-align: right;
}
.footer p {
text-align: right;
}
複数のセレクタをカンマで区切ると、それを展開します。 末端の場合でも展開してしまいます。
Before:
#define MainColor #333
body{
color: MainColor;
}
h1{
color: MainColor;
}
After:
body {
color: #333;
}
h1 {
color: #333;
}
Smart*CSSと最も違う部分です。 YaCSSは変数を自分では扱えないので、cppのマクロを利用します。 そのため、この機能を利用するには、以下のようにcppを通す必要があります。
$ cpp foo.scss | css > bar.css
プロパティ末尾のセミコロン(;)を省略できません。 そのため次のような書き方は許されていません。
p{ margin:0 }
/* p{ margin:0; } と書く必要がある */
MIT Licenseに準じます。