less

来源:互联网 发布:阿里旺旺软件下载 编辑:程序博客网 时间:2024/05/21 01:28

less:css预编译

  • 变量
@color: #4D926F;   //方便,容易修改,批量#header {    color: @color;   //注意格式}h2 {    color: @color;}

如果对同一个变量定义两次的话,在当前作用域中最后一次定义的将被使用。这与CSS的机制类似,最后一次定义的值会成为这个属性的值。

@var: 0;.class1 {    @var: 1;    .class {        @var: 2;        three: @var;        @var: 3;    }    one: @var;}//被编译成.class1 .class {    three: 3;}.class1 {    one: 1;}

变量提升,可以先声明后使用。也即按需求加载。

lazy-eval {    width: @var;}@var: @a;@a: 9%;
  • 混合
    混合可以将一个定义好的class A轻松的引入到另一个class B中,从而简单实现class B继承class A中的所有属性。我们还可以带参数地调用,就像使用函数一样。
.rounded-corners (@radius: 5px) {    -webkit-border-radius: @radius;    -moz-border-radius: @radius;    -ms-border-radius: @radius;    -o-border-radius: @radius;    border-radius: @radius;}#header {    .rounded-corners;         //默认@radius变量为5px}#footer {    .rounded-corners(10px);  //覆盖,设置@radius变量为10px}

可以定义不带参数属性集合,不让它暴露到 CSS 中去,还可以在其他的属性集合中引用,你会发现这个方法非常的好用:

.wrap () {    text-wrap: wrap;    white-space: pre-wrap;    white-space: -moz-pre-wrap;    word-wrap: break-word;}pre { .wrap }

如果需要在 mixin 中不限制参数的数量,可以在变量名后添加 …,表示这里可以使用 N 个参数。

.mixin (@a, @rest...) {    // @rest 表示 @a 之后的参数    // @arguments 表示所有参数}

!important关键字,在混合后面加此关键字,也就是important关键字的意思。

多参数混合略复杂

  • 模式匹配
    模式匹配:通过参数值控制混合的行为。
.mixin (dark, @color) {    color: darken(@color, 10%);}.mixin (light, @color) {    color: lighten(@color, 10%);}.mixin (@_, @color) {    display: block;}//调用mixin@switch: light;.class {    .mixin(@switch, #888);}

也可以根据参数的数量进行匹配

.mixin (@a) {    color: @a;}.mixin (@a, @b) {    color: fade(@a, @b);}

调用 .mixin 时,如果使用了一个参数,输出第一个 .mixin,使用了两个参数,则输出第二个。

  • Guards
    Guards 被用来匹配表达式 (expressions)
.mixin (@a) when (lightness(@a) >= 50%) {    background-color: black;}.mixin (@a) when (lightness(@a) < 50%) {    background-color: white;}.mixin (@a) {    color: @a;           //公用的css属性}.class1 { .mixin(#ddd) }      // background-color: black;color: #ddd;.class2 { .mixin(#555) }      // background-color: white;color: #555;

Guards 支持的运算符包括:> >= = =< <;还可以使用可以使用 is* 函数。

几个检查基本类型的函数:

iscolor
isnumber
isstring
iskeyword
isurl
如果需要检查一个值(数字)使用了哪个单位,可以使用下面三个函数:

ispixel
ispercentage
isem

.mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }  //可以使用逻辑and 或not
  • @arguments参数
    @arguments参数包含了所有传递进来的参数。在做兼容性的时候比较好用。
.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) {    box-shadow: @arguments;            //2px 5px 1px #000;    -moz-box-shadow: @arguments;    -webkit-box-shadow: @arguments;}.box-shadow(2px, 5px);
  • 选择器嵌套
    在一个选择器中嵌套另一个选择器来实现继承,这样很大程度减少了代码量,并且代码看起来更加的清晰。
#header {    h1 {                      //#header h1        font-size: 26px;        font-weight: bold;    }    p {                       //#header p        font-size: 12px;        a {                   //#header p a            text-decoration: none;            &:hover {         //#header p a:hover                border-width: 1px            }        }    }}

嵌套中注意使用&符号:如果你想写串联选择器,而不是写后代选择器,就可以用到 & 了。这点对伪类尤其有用如 :hover 和 :focus。

  • 函数和运算

可以做属性值和颜色的运算,这样就可以实现属性值之间的复杂关系。LESS中的函数一一映射了JavaScript代码,如果你愿意的话可以操作属性值。

@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%);}
  • 命名空间
    为了更好组织 CSS 或者单纯是为了更好的封装,将一些变量或者混合模块打包起来,你可以像下面这样在 #bundle 中定义一些属性集之后可以重复使用:
#bundle {    .button () {        display: block;        border: 1px solid black;        background-color: grey;        &:hover { background-color: white }    }    .tab { ... }    .citation { ... }}//使用时,如下引用.button#header a {    color: orange;    #bundle > .button;}
  • 作用域
    类似js,现在本地查找变量,没找到再去父级找。

  • 注释
    /**/:可以使用,并且解析出的css文件中显示
    //:也可以使用,但在解析出的css文件中不显示

  • 导入(Import)
    在less文件中既可以导入css文件,也可以导入less文件。区别是,导入css文件不编译,导入less文件会编译。

编译过程中,对导入CSS文件只做一处处理:将导入的语句提到最前,紧跟在@charset之后。

0 0