zoukankan      html  css  js  c++  java
  • Less学习笔记

    LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性。
     
    LESSCSS可以在多种语言、环境中使用,包括浏览器端、桌面客户端、服务端。
     
    编译方法:
     1、浏览器编译
          下载LESSCSS的.js文件,下载地址
      在页面引入:
    1 <link rel="stylesheet/less" href="example.less" />
    2 <script src="lesscss-1.4.0.min.js"></script>
    (LESS文件要在LESS脚本之前引用
      官网上说浏览器端是使用ajax拉取的.less文件,因此要将网站放在服务器端打开,而不能直接在本机打开。
     2、GUI编译工具
          我使用的是koala,一款国人开发的LESSCSS/SASS编译工具。下载地址:http://koala-app.com/index-zh.html
          将less文件编译为对应的.css文件,并由页面引入。
     3、Node.js编译
    1  npm install -g less
    2  lessc xxx.less xxx.css

    LESS 拥有四大特性:变量、混合、嵌套、函数。另外,LESS 还拥有一些很有趣的特性有助于我们的开发,例如模式匹配、条件表达式、命名空间和作用域,以及 JavaScript 赋值等等。

    变量:
    1  @padding-none: 0;
    2  .page {
    3    padding: @padding-none;
    4  }
    编译后结果:
    1  .page {
    2    padding: 0;
    3  }
    变量可以进行运算:
    1  @the-border: 1px;
    2  @base-color: #111;
    3  #header {
    4      background: (@base-color * 13);
    5      border-left: @the-border;
    6      border-right: (@the-border * 2);
    7  }
    编译后:
    1  #header {
    2      background: #dddddd;
    3      border-left: 1px;
    4      border-right: 2px;
    5  }
    变量也可以进行插值:
    1  @theURL: "./images";
    2  .test2 {
    3      background: url("@{theURL}/bg2.jpg");
    4  }
    编译后:
    1 .test2 {
    2    background: url("images/bg2.jpg");
    3 }
     
     
    变量是“按需加载”(lazy loaded)的,因此不必强制在使用之前声明。见下例:
    1  .page {
    2      width: @width-page ;
    3      @width-page: 400px;
    4      margin: 0 auto;
    5  }
    编译结果:
    1  .page {
    2        width: 400px;
    3        margin: 0 auto;
    4  }
    混合(Mixins):
    在Less中我们可以定义一些通用的属性,然后在其他属性中使用这些通用属性。
    例如:
    1  .page {
    2       width: 400px ;
    3       margin: 0 auto;
    4       padding: 0;
    5       background: #dddddd;
    6  }
    7  #header {
    8       .page;
    9  }
    编译后:
    1  #header {
    2      width: 400px;
    3      margin: 0 auto;
    4      padding: 0;
    5      background: #dddddd;
    6  }
     
     
    带参数混合,在混合的使用中,我们可以像定义函数一样定义一个可以传入参数的通用属性:
    1  .border-radius (@radius) {
    2      border-radius: @radius;
    3      -moz-border-radius: @radius;
    4      -webkit-border-radius: @radius;
    5  }
    6  .test {
    7       .border-radius (50px);
    8  }
    编译后:
    1  .test {
    2      border-radius: 50px;
    3      -moz-border-radius: 50px;
    4      -webkit-border-radius: 50px;
    5  }
    另外可以给出参数的默认值:
    1  .border-radius (@radius: 25px) {
    2      border-radius: @radius;
    3      -moz-border-radius: @radius;
    4      -webkit-border-radius: @radius;
    5  }
    6  .test2 {
    7      .border-radius ();
    8  }
    编译后:
    1  .test {
    2      border-radius: 25px;
    3      -moz-border-radius: 25px;
    4      -webkit-border-radius: 25px;
    5  }
     
     
    如果不希望将通用的属性类暴露,在定义的通用属性的时候加上括号:
    1  .page () {
    2      width: 400px ;
    3      margin: 0 auto;
    4      padding: 0;
    5      background: #dddddd;
    6  }
     
     
    如果参数很多,可以用arguments的方法一次调用:
    1  .box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #888) {
    2      box-shadow: @arguments;
    3      -moz-box-shadow: @arguments;
    4      -webkit-box-shadow: @arguments;
    5  }
    6  .test2 {
    7      .box-shadow(2px, 5px);
    8  }
    编译结果:
    1  .test2 {
    2      box-shadow: 2px 5px 1px #888888;
    3      -moz-box-shadow: 2px 5px 1px #888888;
    4      -webkit-box-shadow: 2px 5px 1px #888888;
    5  }
     
     
    如果不想限制参数的数量,可以在括号内填...,表示N个参数
    1  .margin (...) {
    2      margin: @arguments;
    3  }
    4  .test {
    5      .margin(10px 20px);
    6  }
    编译结果:
    1  .test {
    2      margin: 10px 20px;
    3  }
     
     
    LESS 提供了通过参数值控制 mixin 行为的功能:
     1  .radius (big, @radius) {
     2      border-radius: ( @radius + 10 );
     3      -moz-border-radius: ( @radius + 10 );
     4      -webkit-border-radius: ( @radius + 10 );
     5  }
     6  .radius (small, @radius) {
     7      border-radius: ( @radius - 10 );
     8      -moz-border-radius: ( @radius - 10 );
     9      -webkit-border-radius: ( @radius - 10 );
    10  }
    11  
    12  .test3 {
    13      @switch: small;
    14      .radius(@switch, 20px);
    15  }
    16  .test3 {
    17      @switch: big;
    18      .radius(@switch, 20px);
    19  } 
    编译结果:
     1  .test3 {
     2      border-radius: 10px;
     3      -moz-border-radius: 10px;
     4      -webkit-border-radius: 10px;
     5  }
     6  .test4 {
     7      border-radius: 30px;
     8      -moz-border-radius: 30px;
     9      -webkit-border-radius: 30px;
    10  }
    且参数是有域的:
    1  @switch: big;
    2  .test3 {
    3      @switch: small;
    4      .radius(@switch, 20px);
    5  }
    6  .test4 {
    7      .radius(@switch, 20px);
    8  }
    编译结果依然是:
     1  .test3 {
     2      border-radius: 10px;
     3      -moz-border-radius: 10px;
     4      -webkit-border-radius: 10px;
     5  }
     6  .test4 {
     7      border-radius: 30px;
     8      -moz-border-radius: 30px;
     9      -webkit-border-radius: 30px;
    10  }
     
     
     
    Guards:
    Guards 被用来匹配表达式 (expressions)
     1  .test-guards (@height) when (@height >=100px){
     2      background: red;
     3  }
     4  .test-guards (@height) when (@height <100px){
     5      background: green;
     6  }
     7  .test-guards (@height) {
     8      height: @height;
     9  }
    10  
    11  .test5 {
    12      .test-guards(110px;);
    13  }
    14  .test6 {
    15      .test-guards(90px;);
    16  }
    编译后:
    1  .test5 {
    2      background: red;
    3      height: 110px;
    4  }
    5  .test6 {
    6      background: green;
    7      height: 90px;
    8  } 
     
     
    Guards 支持的运算符包括:> >= = =< <。
    另外,true关键字是唯一被判断为真的值,也就是这两个混合是相等的:
    1  .truth (@a) when (@a) { ... }
    2  .truth (@a) when (@a = true) { ... }
    而其他不为true的值都会判为假
    如  .truth(1) .truth(40)  都不会匹配。
     
     
    如果需要根据值的类型匹配混合,可以使用 is* 函数:
    1  .mixin (@a, @b: 0) when (isnumber(@b)) { ... }
    2  .mixin (@a, @b: black) when (iscolor(@b)) { ... }
    几个检查基本类型的函数:
    • iscolor
    • isnumber
    • isstring
    • iskeyword
    • isurl
    如果需要检查一个值(数字)使用了哪个单位,可以使用下面三个函数:
    • ispixel
    • ispercentage
    • isem
    最后,你可以使用关键词 and 在 guard 中加入额外的条件:
    .mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }
    或者,使用关键词 not 否定条件:
    1  .mixin (@b) when not (@b > 0) { ... }
    嵌套规则:
    LESS 可以让我们以嵌套的方式编写层叠样式,如下例:
     1  #content {
     2      -webkit-box-shadow: 1px 1px  1px  #ccc;
     3      -moz-box-shadow: 1px 1px  1px  #ccc;
     4      box-shadow: 1px 1px  1px  #ccc;
     5 
     6     .test6{
     7          -webkit-box-shadow: 3px 4px 2px  #ccc;
     8          -moz-box-shadow: 3px 4px 2px  #ccc;
     9          box-shadow: 3px 4px 2px  #ccc;
    10      }
    11      &:hover{
    12          background: #ddd;
    13      };
    14  }    
    编译结果:
     1  #content {
     2      -webkit-box-shadow: 1px 1px  1px  #ccc;
     3      -moz-box-shadow: 1px 1px  1px  #ccc;
     4      box-shadow: 1px 1px  1px  #ccc;
     5  }
     6  #content .test6 {
     7      -webkit-box-shadow: 3px 4px 2px  #ccc;
     8      -moz-box-shadow: 3px 4px 2px  #ccc;
     9      box-shadow: 3px 4px 2px  #ccc;
    10  }
    11  #content:hover {
    12      background: #ccc;
    13  }

    函数:

     LESS提供了多种函数用于控制颜色变化、处理字符串、算术运算等等。这些函数在函数手册中有详细介绍,手册地址

    参考资料 LessCss中的语言特性

     
     
     
  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/oneX/p/3639320.html
Copyright © 2011-2022 走看看