LESS

变量

@color: #4D926F;

#header {
  color: @color;
}

嵌套

&表示串联选择器

#header {
  h1 {
    font-size: 26px;
    font-weight: bold;
  }
  p { font-size: 12px;
    a { text-decoration: none;
      &:hover { border-width: 1px }
    }
  }
  &.float {
    float: left; 
  }
}

函数运算加减乘除

可以分辨出颜色和单位, 可以在复合属性中进行运算

@the-border: 1px;
@base-color: #111;
@red:        #842210;

#header {
  color: @base-color * 3;
  border-left: @the-border;
  border-right: @the-border * 2;
}
#footer { 
  color: @base-color + #003300;
  border-color: desaturate(@red, 10%);
}

@var: 1px + 5;
border: (@width * 2) solid black;

混合(可带参数混合(参数可设置默认值),可进行模式匹配,可进行表达式匹配) Mixin

普通混合

.bordered {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}
#menu a {
  color: #111;
  .bordered; // <= 混合
}

带参数混合(可设置默认值),特殊参数@arguments包含了所有传递进来的参数

.border-radius (@radius) {
  border-radius: @radius;
  -moz-border-radius: @radius;
  -webkit-border-radius: @radius;
}
#header {
  .border-radius(4px); // <= 混合
}

// 设置默认值
.border-radius (@radius: 5px) {
  border-radius: @radius;
  -moz-border-radius: @radius;
  -webkit-border-radius: @radius;
}

#header {
  .border-radius;  // <= 用默认值混合
}

// @arguments
.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 (@s, @color) { ... }

.class {
  .mixin(@switch, #888);
}

.mixin (dark, @color) {
  color: darken(@color, 10%);
}
.mixin (light, @color) {
  color: lighten(@color, 10%);
}
.mixin (@_, @color) {
  display: block;
}

// 进行模式匹配
@switch: light;

.class {
  .mixin(@switch, #888);
}

// 匹配多个参数
.mixin (@a) {
  color: @a;
}
.mixin (@a, @b) {
  color: fade(@a, @b);
}

匹配表达式

  • 可用的全部比较运算有:> >= = =< `<``
  • 关键字true只表示布尔真值,true以外的值都被视示布尔假
  • 逗号,分割,当且仅当所有条件都符合时,才会被视为匹配成功。
  • 可以无参数,也可以对参数进行比较运算
  • 想基于值的类型进行匹配,我们就可以使用is*函数
  • 可以使用and not 关键字
iscolor
isnumber
isstring
iskeyword
isurl
// 判断数值单位
ispixel
ispercentage
isem
.mixin (@a) when (lightness(@a) >= 50%) {
  background-color: black;
}
.mixin (@a) when (lightness(@a) < 50%) {
  background-color: white;
}
.mixin (@a) {
  color: @a;
}

.truth (@a) when (@a = true) { ... }
.mixin (@a) when (@a > 10), (@a < -10) { ... }
.mixin (@a) when (@media = desktop) { ... }
.max (@a, @b) when (@a > @b) { width: @a }
.mixin (@a, @b: 0) when (isnumber(@b)) { ... }
.mixin (@b) when not (@b > 0) { ... }

函数 及 字符串

Color 函数

颜色会先被转化成HSL色彩空间, 然后在通道级别操作

lighten(@color, 10%); // 颜色变浅
darken(@color, 10%); // 颜色变深

saturate(@color, 10%); // 增加饱和度
desaturate(@color, 10%); // 减少饱和度

fadein(@color, 10%); // 返回透明度比@color小10%的颜色
fadeout(@color, 10%); // 返回透明度比@color大10%的颜色
fade(@color, 50%); // 把颜色调到指定透明度

spin(@color, 10); // 色相高10度的颜色
spin(@color, -10); // 色相低10度的颜色

mix(@color1, @color2); // 两中颜色进行混合后的颜色

hue(@color);        // 返回该颜色的色相
saturation(@color); // 返回该颜色的饱和度
lightness(@color);  // 返回该颜色的明度

// 在一种颜色的通道上创建另一种颜色
@new: hsl(hue(@old), 45%, 90%); // @new 将会保持 @old的 色调, 但是具有不同的饱和度和亮度

Math 函数

round(1.67); // returns `2`
ceil(2.4);   // returns `3`
floor(2.6);  // returns `2`
percentage(0.5); // returns `50%` 转化百分比

javascript 表达式

@var: `"hello".toUpperCase() + '!'`;

// 同时使用字符串插值和避免编译:
@str: "hello";
@var: ~`"@{str}".toUpperCase() + '!'`;

// 访问JavaScript环境:
@height: `document.body.clientHeight`;

// 将一个JavaScript字符串解析成16进制的颜色值,
@color: color(`window.colors.baseColor`);
@darkcolor: darken(@color, 10%);

字符串差值

@base-url: "http://assets.fnord.com";
background-image: url("@{base-url}/images/bg.png");

避免编译 ~

.class {
  filter: ~"ms:alwaysHasItsOwnSyntax.For.Stuff()";
}

注释

  • /**/ 该注释编译后保留
  • // 该注释编译后被过滤掉

模块化

作用域

LESS首先会从本地查找变量或者混合模块,如果没找到的话会去父级作用域中查找,直到找到为止.

命名空间

// 将一些变量或者混合模块打包起来
#bundle {
  .button () {
    display: block;
    border: 1px solid black;
    background-color: grey;
    &:hover { background-color: white }
  }
  .tab { ... }
  .citation { ... }
}

// 在 #header a中像这样引入 .button:
#header a {
  color: orange;
  #bundle > .button; // <= 引入模块中的元素
}

import

.less后缀可不带, .css文件不会被处理

@import "lib.less";
@import "lib";
@import "lib.css";

参考

http://www.bootcss.com/p/lesscss/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容