LESS 使用指南

简介

Less 是一个Css 预编译器,意思指的是它可以扩展Css语言。
它的功能如允许变量(variables),混合(mixins),函数(functions) 和许多其他的技术,让Css更具维护性,主题性,扩展性。
Less 可运行在 Node 环境、浏览器环境和Rhino环境,同时也有3种可选工具供你编译文件和监视任何改变。
安装请至底部查看
本文参考了 w3cschool-less

使用-语言特性

  1. Mixins (混合函数)
    Mixin是一组CSS属性,混合类似于编程语言中的函数,允许将一个类的属性用于另一个类,可以使用类或id选择器与CSS添加样式的方式来声明一个Mixin,它可以储存多个属性,并且可以在代码中复用。
    ex:声明一个Mixin,.sbox { color: #992e2e; }

    • 使用()不输出Mixins:定义的时候加上括号,在使用时生成后的文件中即不显示 .sbox() { color: #992e2e; }
    • 内部层级选择器:在Mixin内部可以使用选择器 .sbox { &:hover { color: #f00; } }
    • 命名空间妙用:命名空间用于在通用名称下对mixin进行分组。 使用命名空间可以避免名称冲突,并从外部封装mixin组。.sbox { .pic { xx } } .bbox { .pic { xx } }
    • !important:对所有继承的属性加上!important,.bbox { .sbox !important; }
    • 多个混合函数合并:如果有多个同名的混合函数在同层级下,他们会合并不会覆盖
    • 代表所有参数的@arguments:绑定所有参数(代表了括号里所有内容),.sbox( @fz, @lh, @fm ) { font: @fz / @lh @fm; } .box { .sbox( 12px,20px,"Arial" ); }
    • 代表部分参数的@rest :绑定部分参数,.sbox( @a, @rest... ) { box-shadow: @a @rest; } .box { .sbox ( 1px, 0px, #000 );},别忘了加 ...
    • 在多个同名的混合函数中选定想要的那个(和if判断神似):.tbox(one) { font-size: 12px; } .tbox(two) { font-size: 14px; } .ckbox { .tbox(two); }
    • 变量与函数混用:将变量以返回值的形式输出,.box() { @bgcolor #000; },可能在一些场合有用吧,大概。。使用时注意变量的特性
    • 混合函数是可以任意嵌套的
  2. 变量
    LESS允许使用 @ 符号定义变量。 变量分配使用冒号(:)完成。
    LESS中声明变量的格式为“@变量名:变量值”。

    • 最常用的就是定义和引用
    • 选择器:编译时构建的。变量名称必须放在用@符号前缀的花括号({})内: @select: h2; @{select} { color: #992e2e; } -> h2 { color: #992e2e; }
    • url:@link: "http://xxx.com; .boxs { background: ("@link/pic.jpg"); } "
    • import:@link: "http://xxx.com; @import "@link/box.less";
    • 由值组成:@col: "#992e2e"; @color: "col"; .sbox { color: @@color; }
    • 延迟加载:延迟加载中,即使它们尚未声明,也可以使用变量(先使用,后声明)。.sbox { color: @color; } @color: "#992e2e";
  3. 操作
    加减乘除可以对数字、颜色、变量任意操作,
    font-size: 24px/2*2+2-2;

  4. 导入
    @import 可用于导入LESS或CSS文件的内容,默认是less,所以less文件可以不写后缀,比如 @import "less/box",需加分号结尾,下同
    @import ( reference ) 用于导入内容,但会将成品样式排除在外(感觉很实用),注意括号内部最好加空格进行分隔,下同
    @import ( inline ) 将内容复制到输出css文件中,不进行处理,注意使用此参数时需加后缀
    @import ( optional ) 导入可选的文件,加了此参数后就算该文件不存在也不会报错
    @import ( once ) 在该文件中只导入一次,在该文件中执行第一次以后,还有导入的话,一概忽略
    @import ( less ) 不管后缀定义为什么,都把导入文件以less文件处理
    @import (css) 不管后缀定义为什么,都把导入文件以css文件处理
    @import (multiple) 可导入多次

  5. 父选择器

  • &代表父级元素,它的用法很多
  • 直接用 & ,代表父级
  • 和选择器一起用,& + & ,&:hover ,&:first-child
  • 字符串拼接,&_lf , 纯粹的字符串拼接
  • 与产生列表中选择器的所有可能性排列,会用逗号分隔
    div,p {
      & + & {
        font-size: 12px;
      }
    }
    //生成 - >
    div + div,
    div + p,
    p + div,
    p + p {
        font-size: 12px;
    }
    
  1. 注释
    // 编译后消失
    /**/ 编译后保留

  2. 规则集
    规则集相当于定制作用域
    @rule: {
    //可以包含很多东西,比如变量,函数等
    };
    调用:

@fonts: {
  font-size: 12px;
  .sbox() { color: #992e2e; }
};
//使用时注意:  定义结尾花括号外要加分号,使用时要加括号分号,如果要引用混合函数还需另外定义引用
.box { @fonts(); .sbox; }
  1. 扩展
    Extend是一个Less伪类,它通过使用:extend 选择器在一个选择器中扩展其他选择器的样式
.sbox {
    color: #992e2e;
    font-size: 12px;
}

.bbox:extend(.sbox) {
    line-height: 24px;
}
#生成
.sbox,
.bbox {
  color: #992e2e;
  font-size: 12px;
}
.bbox {
  line-height: 24px;
}
  1. Mixin Guards
    用于匹配简单的值或参数数量,可以使用Guards,他与mixin声明相关联,Guard必须括在括号里,效果类似于 if 效果
  • 比较运算符: = > < >= <=
    .minx1 ( @fz ) when ( @fz = 12 ) {
        font-size: 12px;
    }
    .minx2 ( @fz ) when ( @fz > 12 ) {
        font-size: 13px;
    }
    .minx3 ( @fz ) when ( @fz < 12 ) {
        font-size: 11px;
    }
    
    .boxs {
        .minx1(12);
        .minx2(14);
        .minx3(10);
    }
    //结果
    .boxs {
      font-size: 12px;
      font-size: 13px;
      font-size: 11px;
    }
    
  • 逻辑运算符,使用 and 和 not
     .minx4 ( @fz ) when ( @fz > 11 ) and ( @fz < 15 ) and not ( @fz = 13 ) {
         font-size: @fz/1px;
     }
    
     .boxs2 {
         .minx4(12);
                 .minx4(13);
     }
         //结果
     .boxs2 {
         font-size: 12px;
     }
    
  • 类型检查函数 (返回值为 ture / false)
    常见的有:iscolorisnumberisstringiskeywordisurl
    ex: .minx5 ( @color ) when ( iscolor(@color) ) { color: @color; }
    iskeyword不知道是啥,isurl在使用的时候有url才为true: isurl(url(...));
  1. loops循环,允许多次执行一个语句或一组语句
.minx ( @num ) when ( @num > 2 ) {
    .minx( @num - 1 );
    font-size: @num * 12px;
}
.box {
    .minx(7);
}
//结果
.box {
  font-size: 36px;
  font-size: 48px;
  font-size: 60px;
  font-size: 72px;
  font-size: 84px;
}
  1. 合并
  • 用逗号合并相同的属性,语法是在属性名后分号前加上加号:.box { box-shadow+: 1px 1px #fff; box-shadow+: 0px 2px #000; } 结果是: .box { box-shadow: 1px 1px #fff, 0px 2px #000; }
  • 用空格合并相同的属性,语法是在属性名后分号前加上加号和下划线,.box { font+_: 12px; font+_: "Microsoft YaHei"; } 结果是: .box { font: 12px "Microsoft YaHei"; }

未完待续

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

推荐阅读更多精彩内容