美文网首页
Less学习笔记

Less学习笔记

作者: zhangivon | 来源:发表于2017-07-02 20:58 被阅读73次

Less作为 CSS 的一种扩展,不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法,你可以在任何时候回退到 CSS的写法。 大家可以通过以下两个地址,快速的学习Less。

变量

只能定义一次,其本质就是“常量”。

  • 变量的定义:

@nice-blue: #5B83AD; @light-blue: @nice-blue + #111; @div-width: 13px;

  • 变量的使用与编译:

#header { color: @light-blue; width: @div-width; }

编译为:

#header { color: #6c94be; width: 13px; }

混合(Mixin)

  • 混合允许将一个属性集合整块替换到另一个属性集合中。如:

.bordered { border-top: dotted 1px black; border-bottom: solid 2px black; }
我们可以将这个css属性集合,mixin到另一个css属性集中,如:
#menu a { color: #111; .bordered;//或者写为.bordered() } .post a { color: red; .bordered;//或者写为.bordered() }

经过编译后:

#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;//替换后 }

  • 使mixin变量不作为css输出
    只需要添加一对圆括号就可以了,这是该mixin将不被输出在编译后的css文件中,如:

.my-mixin { color: black; } .my-other-mixin() { background: white; } .class { .my-mixin; .my-other-mixin; }

编译后:

.my-mixin { color: black; } // 这里不编译输出.my-other-mixin .class { color: black; background: white; }

  • 在mixin中使用选择器selector
    除了处理属性外,mixin还可以使用css选择器,如:

.my-hover-mixin() { &:hover { border: 1px solid red; } } button { .my-hover-mixin(); }

编译后:

button:hover {// 定义的伪类选择器hover被应用 border: 1px solid red; }

  • 命名空间
    想如果你想混合属性在一个更复杂的选择器,可以叠放多个id或类。如下:

    #outer {
      .inner {
        color: red;
      }
    }
    .c {
      #outer > .inner;
    }
    

那么,#outer和.c就作为一个命名空间了。对于#outer来说,.inner就作为它的一个属性值,访问的时候可以使用#outer.inner来访问,以下这几种写法是等价的:
// all do the same thing
#outer > .inner;
#outer > .inner();
#outer.inner;
#outer.inner();
举例:
#my-library {
.my-mixin() {
color: black;
}
}
// which can be used like this
.class {
#my-library > .my-mixin();
}
编译为:
.class { color: black; }

  • 关键字!important
    在使用混合属性后面加上!important关键字,则混合中的所有属性都会加上关键字!important。例如:

.foo (@bg: #f5f5f5, @color: #900) { background: @bg; color: @color; } .unimportant { .foo(1); } .important { .foo(2) !important; }

编译后:

.unimportant { background: #f5f5f5; color: #900; } .important { background: #f5f5f5 !important; color: #900 !important; }

带参数的Mixin

  • mixin可以通过括号传递参数,也可以带默认参数:

.border-radius(@radius) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; }

编译后

带默认参数:

.border-radius(@radius: 5px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; }
`#header {
.border-radius;//与上图的效果差不错,默认为5px

}`

  • mixin多参数:
    mixin允许带多个参数,也有类似于Java中函数重载的特性:

.mixin(@color) { color-1: @color; } .mixin(@color; @padding:2) { color-2: @color; padding-2: @padding; } .mixin(@color; @padding; @margin: 2) { color-3: @color; padding-3: @padding; margin: @margin @margin @margin @margin; } .some .selector div { .mixin(#008000); }

编译后:

.some .selector div { color-1: #008000; color-2: #008000; padding-2: 2; }

当我们定义相同混合属性名,参数不同,然后.mixin(#008000);调用,第一和第二混合都能匹配,但是第三个缺少参数@padding的值,所以不会引用第三个混合属性。

  • 指定参数名传值

`.mixin(@color: black; @margin: 10px; @padding: 20px) {
color: @color;
margin: @margin;
padding: @padding;
}
.class1 {
.mixin(@margin: 20px; @color: #33acfe);

}
.class2 {
.mixin(#efca44; @padding: 40px);
}`

编译后:

.class1 { color: #33acfe; margin: 20px; padding: 20px; } .class2 { color: #efca44; margin: 10px; padding: 40px; }

关键字@arguments

@arguments有特殊的含义,类似于JavaScript中的arguments,他包含了传递给混合属性的所有参数,如下:

.box-shadow(@x: 0; @y: 0; @blur: 1px; @color: #000) { -webkit-box-shadow: @arguments; -moz-box-shadow: @arguments; box-shadow: @arguments; } .big-block { .box-shadow(2px; 5px); }

编译后:

.big-block { -webkit-box-shadow: 2px 5px 1px #000; -moz-box-shadow: 2px 5px 1px #000; box-shadow: 2px 5px 1px #000; }

关键字@reset

类似于ES6中的剩余参数...,如下:

.mixin(...) { // matches 0-N arguments .mixin() { // matches exactly 0 arguments .mixin(@a: 1) { // matches 0-1 arguments .mixin(@a: 1; ...) { // matches 0-N arguments .mixin(@a; ...) { // matches 1-N arguments
.mixin(@a; @rest...) { // @rest is bound to arguments after @a // @arguments is bound to all arguments }

  • 模式匹配
    有时候,你想让你的mixin可以处理不同的情况,有点类似于switch语句,如下:

.mixin(dark; @color) { color: darken(@color, 10%); } .mixin(light; @color) { color: lighten(@color, 10%); } .mixin(@_; @color) {//通配,这样所有的情况都能拥有display:block这个属性设置 display: block; } //使用该模式匹配 @switch: light; .class { .mixin(@switch; #888); }

编译后:

.class { color: #a2a2a2; display: block; }

作为函数使用的Mixin

当我们把混合当做函数使用时,在调用函数之后,函数中的变量是可以使用的,除非调用混合属性的元素自己也定义了同样的变量。比如:

.mixin() { @width: 100%; @height: 200px; } .caller { .mixin(); width: @width; height: @height; }

编译后:

.caller { width: 100%; height: 200px; }

作为表达式使用

.average(@x, @y) { @average: ((@x + @y) / 2); } div { .average(16px, 50px); // "call" the mixin padding: @average; // use its "return" value }

编译后:

`div {

padding: 33px;
}`

import指令

具体可以参看文档:http://less.bootcss.com/features/#import-directives-feature

Mixin Gurads

带条件的mixin,使用关键字when来定义不同的条件。具体可以参看文档:http://less.bootcss.com/features/#mixin-guards-feature

CSS Guards

同理,css也可以使用guards,它标志在选择器之后,也是使用关键字when,如下:

.my-optional-style() when (@my-option = true) { button { color: white; } } .my-optional-style(); //也可以直接在css样式上写guards button when (@my-option = true) { color: white; }

更多可以参看http://less.bootcss.com/features/#css-guards-feature

循环

在 Less 中,mixin 可以被自己调用。当这种递归形式的 mixin 与 Guard ExpressionsPattern Matching 一起联合使用的话,就可以创造出各种迭代/循环结构。如下就是一个用于生成 CSS 栅格类的递归循环的实例:

.generate-columns(4); .generate-columns(@n, @i: 1) when (@i =< @n) { .column-@{i} { width: (@i * 100% / @n); } .generate-columns(@n, (@i + 1)); }

编译后:

.column-1 { width: 25%; } .column-2 { width: 50%; } .column-3 { width: 75%; } .column-4 { width: 100%; }

合并

merge 特性能够聚合多个属性从而形成一个用逗号分隔的单一属性。merge 对于像 background 和 transform 这类属性非常有用。为了避免意外的合并,merge 需要在每个需要合并的属性名后面添加一个 + 以作标示。

.mixin() { box-shadow+: inset 0 0 10px #555; } .myclass { .mixin(); box-shadow+: 0 0 20px black; }

合并后:

.myclass { box-shadow: inset 0 0 10px #555, 0 0 20px black; }

父选择符

&用于指代父选择器以及当前规则的别名,如下:

`a {
color: blue;

&:hover {
color: green;
}
}
//规则的别名
.button {
&-ok {
background-image: url("ok.png");
}
&-cancel {
background-image: url("cancel.png");
}
&-custom {
background-image: url("custom.png");
}
}`

编译后:

a { color: blue; } a:hover { color: green; } //规则的别名,这里代表button .button-ok { background-image: url("ok.png"); } .button-cancel { background-image: url("cancel.png"); } .button-custom { background-image: url("custom.png"); }

  • Multiple &
    &可以出现多次,比如:

.link { & + & { color: red; } & & { color: green; } && { color: blue; } &, &ish { color: cyan; } }

编译后:

.link + .link { color: red; } .link .link { color: green; } .link.link { color: blue; } .link, .linkish { color: cyan; }

更多关于&的请参考文档:http://less.bootcss.com/features/#features-overview-feature-nested-rules

内置函数

关于Less的内置函数,可以参看文档http://less.bootcss.com/functions/#functions-overview

相关文章

  • less学习笔记

    less学习笔记 导入 可以通过下面的形势引入 .less 文件, .less 后缀可带可不带: 如果导入一个CS...

  • 一小时学会less

    less学习(学习笔记,取所需即可) 写在前面:Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加...

  • less学习笔记

    点击查看

  • less学习笔记

    1、 less执行命令:$ lessc styles.less styles.css 输出最小文件: $ l...

  • Less学习笔记

    less是什么 Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、...

  • LESS 学习笔记

    编译器 koala 编译器创建一个 style 文件夹,在其中创建 .less 文件,将文件夹拖入 koala 编...

  • less学习笔记

    一、什么是less less是一种动态样式语言,属于css预处理语言的一种,它使用类似css的语法,为css赋予了...

  • Less 学习笔记

    1. 介绍 Less是一直CSS的预编译语言,是CSS的扩展。使用Less我们也可以对css进行编程,可以定义变量...

  • Less学习笔记

    Less作为 CSS 的一种扩展,不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法,你可以在任何...

  • Less学习笔记

    一、简介二、编译工具kaola(推荐)、node.js、浏览器三、用法(一)变量@变量名:值;(二)混合将一个包含...

网友评论

      本文标题:Less学习笔记

      本文链接:https://www.haomeiwen.com/subject/nhqocxtx.html