http://www.bootcss.com/p/lesscss/#docs より抜粋
LESS 構文
LESS は CSS の機能を去勢するものではなく、既存の CSS 構文を拡張したものです。には多くの追加機能が追加されているため、学習するのは簡単です。したがって、思い切って学習してください。
わかりやすい:
@nice-blue: #5B83AD;@light-blue: @nice-blue + #111;#header { color: @light-blue; }
出力:
#header { color: #6c94be; }
変数名を使用して変数として定義することもできます:
@fnord: "I am fnord.";@var: 'fnord';content: @@var;
解析後:
content: "I am fnord.";
LESS の変数は完全に「定数」であることに注意してください。したがって、一度だけ定義できます。
LESS では、いくつかの共通の属性セットをクラスとして定義し、これらの属性を別のクラスで呼び出すことができます。以下にそのようなクラスがあります。これらの共通属性セットが他のクラスに導入されている場合、任意のクラスで次のように呼び出すだけで済みます:
.bordered { border-top: dotted 1px black; border-bottom: solid 2px black;}
.border クラスの属性スタイルは #menu a と .post a に反映されます:
#menu a { color: #111; .bordered;}.post a { color: red; .bordered;}
任意の CSS クラス、ID、または要素の属性セットを同じ方法で導入できます
パラメーターとの混合
#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;}
次に、他の呼び出しで。クラスでは次のようになります:
.border-radius (@radius) { border-radius: @radius; -moz-border-radius: @radius; -webkit-border-radius: @radius;}
次のようにパラメータのデフォルト値を設定することもできます:
#header { .border-radius(4px);}.button { .border-radius(6px); }
それでは、次のように呼び出します:
.border-radius (@radius: 5px) { border-radius: @radius; -moz-border-radius: @radius; -webkit-border-radius: @radius;}
半径の値は 5px になります。
次のこともできます:パラメーターなしでプロパティ コレクションを定義します。このプロパティ コレクションを非表示にして CSS に公開されないようにしたいが、他のプロパティ コレクションでも参照したい場合は、このメソッドが非常に簡単に使用できることがわかります:
#header { .border-radius; }
Output :
.wrap () { text-wrap: wrap; white-space: pre-wrap; white-space: -moz-pre-wrap; word-wrap: break-word;}pre { .wrap }
@arguments 変数
pre { text-wrap: wrap; white-space: pre-wrap; white-space: -moz-pre-wrap; word-wrap: break-word;}
は出力されます:
.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) { box-shadow: @arguments; -moz-box-shadow: @arguments; -webkit-box-shadow: @arguments;}.box-shadow(2px, 5px);
パターン マッチングとガイド式 式
box-shadow: 2px 5px 1px #000; -moz-box-shadow: 2px 5px 1px #000; -webkit-box-shadow: 2px 5px 1px #000;
.mixin を異なる @switch 値に従って異なる動作にしたい場合は、次のように設定します。次のようにします:
.mixin (@s, @color) { ... }.class { .mixin(@switch, #888);}
ここで、次を実行すると:
.mixin (dark, @color) { color: darken(@color, 10%);}.mixin (light, @color) { color: lighten(@color, 10%);}.mixin (@_, @color) { display: block;}
次の CSS が得られます:
@switch: light;.class { .mixin(@switch, #888);}
上記のように、.mixin は渡された色の明るい色を取得します。 @switch が dark に設定されている場合、暗い色が表示されます。
具体的な実装は次のとおりです:
最初のパラメータとしてダークのみを受け入れるため、最初の混合定義は一致しません
複数の引数を一致させることもできます:
.class { color: #a2a2a2; display: block;}
ここで、1 つの引数を指定して .mixin を呼び出すと、最初の定義の出力が取得されますが、2 つの引数を指定して呼び出した場合は、2 番目の定義が取得されます。 @a が @b. にフェードアウトしました
Guide
CSS の宣言可能性を可能な限り維持するために、LESS は if/else ステートメントの代わりにガイド付きミックスインを介して条件判断を実装します。これは、前者が @media クエリ属性で定義されているためです。
次の例から始めます:
.mixin (@a) { color: @a;}.mixin (@a, @b) { color: fade(@a, @b);}
when キーワードを使用してブート シーケンスを定義します (この例にはブートが 1 つだけあります)。次に、次のコードを実行します:
.mixin (@a) when (lightness(@a) >= 50%) { background-color: black;}.mixin (@a) when (lightness(@a) < 50%) { background-color: white;}.mixin (@a) { color: @a;}
結果:
.class1 { .mixin(#ddd) }.class2 { .mixin(#555) }
このガイドで使用できるすべての比較演算は次のとおりです:
>= = <。さらに、キーワード true はブール値 true のみを表し、次の 2 つの組み合わせは同じです: .class1 { background-color: black; color: #ddd;}.class2 { background-color: white; color: #555;}
.truth (@a) when (@a) { ... }.truth (@a) when (@a = true) { ... }
先頭のシーケンスはカンマで区切られます ', '?, すべての条件が満たされた場合にのみ、一致は成功したとみなされます。
.class { .truth(40); // Will not match any of the above definitions.}
ガイドにはパラメータを持たせることも、パラメータに対して比較演算を実行することもできます:
.mixin (@a) when (@a > 10), (@a < -10) { ... }
最後に、値の型に基づいて照合したい場合は、is* 関数を使用できます:
@media: mobile;.mixin (@a) when (@media = mobile) { ... }.mixin (@a) when (@media = desktop) { ... }.max (@a, @b) when (@a > @b) { width: @a }.max (@a, @b) when (@a < @b) { width: @b }
以下は一般的な検出関数です:
iscolor
ispixel
キーワードの実装と条件を使用できることを付け加えておきます。 .mixin (@a, @b: 0) when (isnumber(@b)) { ... }.mixin (@a, @b: black) when (iscolor(@b)) { ... }
キーワードの実装または条件を使用します LESS 可以让我们以嵌套的方式编写层叠样式. 让我们先看下下面这段 CSS: 在 LESS 中, 我们就可以这样写: 或者这样写: 代码更简洁了,而且感觉跟DOM结构格式有点像. 注意 & 符号的使用?如果你想写串联选择器,而不是写后代选择器,就可以用到&了. 这点对伪类尤其有用如 :hover 和 :focus. 例如: 会输出 任何数字、颜色或者变量都可以参与运算. 来看一组例子: LESS 的运算已经超出了我们的期望,它能够分辨出颜色和单位。如果像下面这样单位运算的话: LESS 会输出 6px. 括号也同样允许使用: 并且可以在复合属性中进行运算: LESS 提供了一系列的颜色运算函数. 颜色会先被转化成 HSL 色彩空间, 然后在通道级别操作: 使用起来相当简单: 你还可以提取颜色信息: 如果你想在一种颜色的通道上创建另一种颜色,这些函数就显得那么的好用,例如: @new 将会保持 @old的 色调, 但是具有不同的饱和度和亮度. LESS提供了一组方便的数学函数,你可以使用它们处理一些数字类型的值: 如果你想将一个值转化为百分比,你可以使用percentage 函数: 有时候,你可能为了更好组织CSS或者单纯是为了更好的封装,将一些变量或者混合模块打包起来, 你可以像下面这样在#bundle中定义一些属性集之后可以重复使用: 你只需要在 #header a中像这样引入 .button: LESS 中的作用域跟其他编程语言非常类似,首先会从本地查找变量或者混合模块,如果没找到的话会去父级作用域中查找,直到找到为止. CSS 形式的注释在 LESS 中是依然保留的: LESS 同样也支持双斜线的注释, 但是编译成 CSS 的时候自动过滤掉: 你可以在main文件中通过下面的形势引入 .less 文件, .less 后缀可带可不带: 如果你想导入一个CSS文件而且不想LESS对它进行处理,只需要使用.css后缀就可以: 这样LESS就会跳过它不去处理它. 变量可以用类似ruby和php的方式嵌入到字符串中,像@{name}这样的结构: 有时候我们需要输出一些不正确的CSS语法或者使用一些 LESS不认识的专有语法. 要输出这样的值我们可以在字符串前加上一个 ~, 例如: 我们可以将要避免编译的值用 “”包含起来,输出结果为: JavaScript 表达式也可以在.less 文件中使用. 可以通过反引号的方式使用: 输出: 注意你也可以同时使用字符串插值和避免编译: 输出: 它也可以访问JavaScript环境: 如果你想将一个JavaScript字符串解析成16进制的颜色值, 你可以使用 color 函数: .mixin (@b) when not (@b > 0) { ... }
嵌套规则
#header { color: black; }#header .navigation { font-size: 12px;}#header .logo { width: 300px; }#header .logo:hover { text-decoration: none;}
#header { color: black; .navigation { font-size: 12px; } .logo { width: 300px; &:hover { text-decoration: none } }}
#header { color: black; .navigation { font-size: 12px } .logo { width: 300px; &:hover { text-decoration: none } }}
.bordered { &.float { float: left; } .top { margin: 5px; }}
.bordered.float { float: left; }.bordered .top { margin: 5px;}
运算
@base: 5%;@filler: @base * 2;@other: @base + @filler;color: #888 / 4;background-color: @base-color + #111;height: 100% / 2 + @filler;
@var: 1px + 5;
width: (@var + 5) * 2;
border: (@width * 2) solid black;
Color 函数
lighten(@color, 10%); // return a color which is 10% *lighter* than @colordarken(@color, 10%); // return a color which is 10% *darker* than @colorsaturate(@color, 10%); // return a color 10% *more* saturated than @colordesaturate(@color, 10%); // return a color 10% *less* saturated than @colorfadein(@color, 10%); // return a color 10% *less* transparent than @colorfadeout(@color, 10%); // return a color 10% *more* transparent than @colorfade(@color, 50%); // return @color with 50% transparencyspin(@color, 10); // return a color with a 10 degree larger in hue than @colorspin(@color, -10); // return a color with a 10 degree smaller hue than @colormix(@color1, @color2); // return a mix of @color1 and @color2
@base: #f04615;.class { color: saturate(@base, 5%); background-color: lighten(spin(@base, 8), 25%);}
hue(@color); // returns the `hue` channel of @colorsaturation(@color); // returns the `saturation` channel of @colorlightness(@color); // returns the 'lightness' channel of @color
@new: hsl(hue(@old), 45%, 90%);
Math 函数
round(1.67); // returns `2`ceil(2.4); // returns `3`floor(2.6); // returns `2`
percentage(0.5); // returns `50%`
命名空间
#bundle { .button () { display: block; border: 1px solid black; background-color: grey; &:hover { background-color: white } } .tab { ... } .citation { ... }}
#header a { color: orange; #bundle > .button;}
作用域
@var: red;#page { @var: white; #header { color: @var; // white }}#footer { color: @var; // red }
注释
/* Hello, I'm a CSS-style comment */.class { color: black }
// Hi, I'm a silent comment, I won't show up in your CSS.class { color: white }
Importing
@import "lib.less";@import "lib";
@import "lib.css";
字符串插值
@base-url: "http://assets.fnord.com";background-image: url("@{base-url}/images/bg.png");
避免编译
.class { filter: ~"ms:alwaysHasItsOwnSyntax.For.Stuff()";}
.class { filter: ms:alwaysHasItsOwnSyntax.For.Stuff();}
JavaScript 表达式
@var: `"hello".toUpperCase() + '!'`;
@var: "HELLO!";
@str: "hello";@var: ~`"@{str}".toUpperCase() + '!'`;
@var: HELLO!;
@height: `document.body.clientHeight`;
@color: color(`window.colors.baseColor`);@darkcolor: darken(@color, 10%);