最低限おさえておくべき6つの記法
前回はLESSが解決してくれる悩みと、
今回はいよいよ実際にLESSを書いていきましょう。
とはいえ、
LESSで基本として押さえておくべきは下記6点です。
- ネスト
- 変数
- ミックスイン
- 演算
- コメント
- インポート
これだけでもCSSのコーディング速度が1.
順番に見ていきましょう。
なお、
// LESS | LESS記法 |
/* Compiled CSS */ 以降 | コンパイルされ、 |
ネスト ~CSSのセレクタを入れ子にする
ネストとは、
// LESS
#header {
h1 {
font-size: 26px;
font-weight: bold;
}
p { font-size: 12px;
a { text-decoration: none;
&:hover { border-width: 1px }
}
}
}
/* Compiled CSS */
#header h1 {
font-size: 26px;
font-weight: bold;
}
#header p {
font-size: 12px;
}
#header p a {
text-decoration: none;
}
#header p a:hover {
border-width: 1px;
}
「こう書ければ楽なのになー」
ネストを使うと、
ネストの落とし穴
ネストは非常に便利なのですが、
たとえば、
// LESS
#entrypage {
#header {
nav {
ul {
li {
a#home {
background: #ff0000;
}
}
}
}
}
}
しかし、
#entrypage #header nav ul li a#home {
background: #ff0000;
}
全体の構成にもよりますが、
#home {
background: #ff0000;
}
idを単体で指定したほうが、
ネストは非常に便利な機能ですが、
変数 ~繰り返す処理を一元管理
デザイナーの方は、
そのような繰り返し宣言をせず、
たとえば以下のように@colorで宣言をした#4D926Fは、
// LESS
@color: #4D926F;
#header {
color: @color;
}
h2 {
color: @color;
}
/* Compiled CSS */
#header {
color: #4D926F;
}
h2 {
color: #4D926F;
}
@colorのように一色に限らず、
- @baseColor
- @accentColor
- @mainColor
筆者の場合は、
これらはクラス名として宣言しておけば機能的には同様のことができるかもしれません。しかし、
また、
変数を使えば、
また、
//LESS
@mainColor: #4D926F;
@accentColor: @mainColor;
このように仮に同じ内容でも書き分けをしておくことで、
ミックスイン ~CSSプロパティの組み合わせをかんたんに呼び出す
ミックスイン
以下の例は、
// LESS
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#menu a {
color: #111;
.bordered;
}
.post a {
color: red;
.bordered;
}
/* Compiled CSS */
#menu a {
color: #111;
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
.post a {
color: red;
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
ミックスインは
ただ、
そして変数の項でもお話ししたように、
そういった意味で、
ミックスインに引数を渡す
先に
// LESS
.border-radius (@radius) {
border-radius: @radius;
-webkit-border-radius: @radius;
}
#header {
.border-radius(4px);
}
/* Compiled CSS */
#header {
border-radius: 4px;
-webkit-border-radius: 4px;
}
具体的な使い方としてまず最初に上げられるのが
今回の連載ではスマートフォンサイトのコーディングのお話を中心にしているので、
しかし、
最近のスマートフォン
引数のデフォルト値を設定する
「引数を指定しなかった場合はこのように動作してほしい」
以下のように、
- 引数を指定しなかった場合 ⇒ デフォルト値を使ってCSSを生成
- 引数を指定した場合 ⇒ 指定した値を使ってCSSを生成
// LESS
.border-radius (@radius:4px) {
border-radius: @radius;
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
}
#header {
.border-radius();
}
#content {
.border-radius(5px);
}
/* Compiled CSS */
#header {
border-radius: 4px;
-webkit-border-radius: 4px;
}
#content{
border-radius: 5px;
-webkit-border-radius: 5px;
}
引数を複数指定する
ミックスインの引数は複数指定することできます。
デフォルト値の指定と組み合わせることにより、
//LESS
.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) {
box-shadow: @x @y @blur@color;
-webkit-box-shadow: @x @y @blur@color;
}
.box-shadow(2px, 5px);
ミックスインはLESSを活用する上でキモとなる機能です。利用頻度の高い記述をいかに使い回しが利きやすい形で書くかがカギになります。具体的な活用方法は次回以降に紹介していきます。
演算
LESSでは、
たとえば以下の変数が宣言してあったとします。
@baseFontSize: 12px;
以下のように、
//LESS
h1 {
font-size: @baseFontSize*2;
}
筆者は
コメント ~CSSより少ない容量に
LESSでは、
これはJavaScriptなどでも用いられる記法ですが、
コメントは同じコードを読む/
//LESS
// Hi, I'm a silent comment, I won't show up in your CSS
.class { color: white }
インポート ~ほかのCSSを読み込む
CSSでも
- CSSの
「@import: url()」 - ⇒あくまで外部から読み出すCSSのファイルを追加しただけ。指定したCSSは別ファイルとしてリクエストされる
- LESSの
「@import」 - ⇒生成の際に
「@import」 を貼りつけた箇所にそのままCSSを貼りつけたような状態になり、 1つのファイルとして扱われる
CSSの
そのため、
以上、
これだけでも、
LESSの魅力はこれだけではありません。次回以降は、