Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
こんにちは『Less & Sass Advent calendar 2011』4日目。Sig.@sigwygがお送りします。「ハードル下げるよ」と言っていたtacamyが文量ある良記事を上げており、高まるハードルに恐々としている今日この頃。皆さん如何お過ごしでしょうか。まあ僕はマイペースで行きます。久しぶりのBlog記事ですしね!(言い訳)
さて、小狡く予防線を張ったところでLESS紹介です。LESSはCSSに変数やら関数やらネストやらを実装します。Sassと同じようなCSS拡張とかメタ言語とか言われるモノです。この辺りの解説はdebiruくんの記事が詳しいので割愛。
要するにhoge.lessとかファイル作って、変数とか織り交ぜて書いておくと...
// ベンダープレフィックスとか書いておく
.rounded-corners (@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
// 呼び出すと1行で終了
#header {
.rounded-corners;
}
// 値も適宜に変更可能
#footer {
.rounded-corners(10px);
}
このファイルを解析して、以下のようなCSSファイルに変換(コンパイル)してくれます。
#header {
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
#footer {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
}
変数を示す記号に@が使われている辺り、@mediaとか@importみたいな@ルールみたいで紛らわしいなとか多少は思ったりしますが、LESSファイルの記述(「LESS記法」って言って良いのかな?)そのものは慣れ親しんだCSSとほとんど同じですし、変数とか関数とかインクルードとか簡単な計算機能とか使ってすっきりと書くことができる。なんだったら、そのまま普通にCSS書いてても良いし。
さて、SassはRubyで書かれていますが、LESSの本体はJavaScriptで作られています。LESS記法?で書かれたファイルをJavaScriptで解析し、CSSファイルとして変換するわけです。なので、実はターミナル(黒い画面)を経由しなくても動作します。
<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript"></script>
HTMLのheadタグでless.jsを読み込めば、あとは.lessファイルにCSSをゴリゴリ書くだけで、ローカルでブラウザ観ながら開発できるわけです。これはデカイ。便利! もちろんコンパイルもできるので、開発が終われば...
$ lessc styles.less > styles.css
...のように変換してやれば良いわけです。とりあえず使ってみましょ!
導入の流れ
...とまあ、ここまで偉そうに解説しましたけど、俺ってLESS使ったことないんですよね。なのでインストールから始めましょうか。まずは公式サイトからless.jsをダウンロードしましょう。
んで、<head>タグ内に以下を記述。
<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript"></script>
rel属性の値が「stylesheet/less」であることが重要です。さて、ここでstyles.lessにゴリゴリ書けばできる筈だ−!
アレ??( ̄▽ ̄;
いきなり躓きました。Chrome/Operaです。
それを確認するためだけに、久しぶりにFirefoxとか起動しちゃいましたよ。Fxならちゃんと動きます。
どうもless.jsはXMLHttpRequestでファイルをゴニョゴニョやっているらしく、Macで普通にローカルのファイルを開くと「file:///Users/...」となるから「HTTPじゃないとダメだぜ?(キリッ」と蹴られているくさい。あるいはXHRは基本的にクロスドメイン通信がダメだし、file://アクセスだとドメインも何もあったもんじゃないから、その辺りかな。とはいえローカルでXHRテストしているときに当たったことはないから、less.jsの実装の問題かも。
追記(2011-12-05): hokaccha+vantguarde多謝!
XMLHttpRequestでローカルファイルにアクセスする際の問題だった模様(参照 » ローカルのHTMLファイルからどこまで読み取れるか選手権 2011)。
- IE9 → 許可すれば問題なし
- Fx → 下位ディレクトリなら問題なし
- Chrome →自分自身のみ
- Opera → 設定を有効にすると読める
- Safari → デフォルトの状態で問題なく読める
Chromeの設定でどうにかできそうな気はしますが、面倒そうなのでローカルにサーバ立てちゃうことにします。Macならもともとapache2が入っているので、5分でできます。
-
「less.com」がローカルを向くように指定 → $ sudo vim /etc/hosts
127.0.0.1 less.com
-
「less.com」でアクセスしたときに読み込むディレクトリ等を指定 → $ sudo vim /etc/apache2/extra/httpd-vhosts.conf
<VirtualHost *:80> ServerName less.com ServerAdmin admin@less.com DocumentRoot "/Users/sigwyg/Dropbox/Library/GitHub/less" ErrorLog "/private/var/log/apache2/less.com-error_log" CustomLog "/private/var/log/apache2/less.com-access_log" common <Directory "/Users/sigwyg/Dropbox/Library/GitHub/less"> AddHandler cgi-script .cgi Options Indexes FollowSymLinks MultiViews +ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
- apache再起動で反映 → $ sudo /usr/sbin/apachectl restart
はい。これでできました。これでChromeで普通に開発できます。
変数
変数使えます。
LESS | コンパイルされたCSS |
---|---|
|
|
Mixins
Mixin(コピペを楽にするコードブロック)できます。
LESS | 変換後のCSS |
---|---|
|
|
ネスト
ネストで記述すると、セレクタの繰り返しを視覚的に判りやすくできます。
LESS | 変換後のCSS |
---|---|
|
|
演算
変数の値を掛け算とか足し算とかできます!
LESS | 変換後のCSS |
---|---|
|
|
おわり
とまあ、こんな感じでいろいろ楽になりますよ、と導入までの流れ。
「黒い画面に一切触れずに使えるよ。凄いねLESSちゃん!」という記事にするつもりだったのに、どうしてこうなった...
LESSについて具体的なことはドキュメント観るか、後続のAdvent Calendarにご期待ください。@importとか便利になってますし、SassにあってLESSになかった@extendって機能も、昨日のSugamoでほかちゃんが作ってました。
LESSはJSなので開発者多いし、足りない機能もすぐ実装されるよ。なんだったら僕が作るし
—いつだかのSugamo.cssにて @hokaccha
...とのことでしたが。有言実行かっこいいね!@hokaccha++
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。