• Less入门


    LESS 原理及使用方式

    本质上,LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。下面是一个简单的例子:

    变量

    使用@符号定义。例如:

    /*变量声明*/
    
    @base: #f938ab;
    @images: "../img";
    @property: color;
    .box {
        /*变量引用*/
        color: @base;
    }
    
    body {
        color: #444;
        /*变量引用*/
        background: url("@{images}/white-sand.png");
    }
    
    .widget {
      @{property}: #0ee;
      background-@{property}: #999;
    }
    /*变量声明*/
    .box {
      /*变量引用*/
      color: #f938ab;
    }
    body {
      color: #444;
      /*变量引用*/
      background: url("../img/white-sand.png");
    }
    .widget {
      color: #0ee;
      background-color: #999;
    }

    混合(Mixin)

    混合就是前面定义的一个样式,后文可以直接引用。示例:

    /*带参数*/
    
    .roundedCorners(@radius: 5px) {
        -moz-border-radius: @radius;
        -webkit-border-radius: @radius;
        border-radius: @radius;
    }
    
    /*
    @arguments 在 Mixins 中具是一个很特别的参数,
    当 Mixins 引用这个参数时,该参数表示所有的变量,
    很多情况下,这个参数可以省去你很多代码。
    */ 
    
    .boxMargin(@up:0,@right:0,@down:0,@left:0){
        margin: @arguments;
    }
    
    // 在另外的样式选择器中使用
    #header {
        .roundedCorners;
        .boxMargin(1px,2px,3px,4px)
    }
    
    #content {
        .roundedCorners();
        .boxMargin;
    }
    
    #footer {
        .roundedCorners(10px);
    }
    /*带参数*/
    /*
    @arguments 在 Mixins 中具是一个很特别的参数,
    当 Mixins 引用这个参数时,该参数表示所有的变量,
    很多情况下,这个参数可以省去你很多代码。
    */
    #header {
      -moz-border-radius: 5px;
      -webkit-border-radius: 5px;
      border-radius: 5px;
      margin: 1px 2px 3px 4px;
    }
    #content {
      -moz-border-radius: 5px;
      -webkit-border-radius: 5px;
      border-radius: 5px;
      margin: 0 0 0 0;
    }
    #footer {
      -moz-border-radius: 10px;
      -webkit-border-radius: 10px;
      border-radius: 10px;
    }

    嵌套

    可以在一个css里有多个css块,以方便我们更好的组织代码,编写css模板。

    #header {
        color: black;
        .navigation {
            font-size: 12px;
        }
        .logo {
            width: 300px;
        }
    }
    
    
    /*
    有&时,解析的是同一个元素或此元素的伪类
    没有&时, 解析是后代元素
    */
    
    #header {
        color: black;
        &-navigation {
            font-size: 12px;
        }
        &-logo {
            width: 300px;
        }
        &:hover {
            color: #ccc;
        }
    }
    
    div {
        color: black;
        &-navigation {
            font-size: 12px;
        }
        &-logo {
            width: 300px;
        }
        &:hover {
            color: #ccc;
        }
    }
    #header {
      color: black;
    }
    #header .navigation {
      font-size: 12px;
    }
    #header .logo {
      width: 300px;
    }
    /*
    有&时,解析的是同一个元素或此元素的伪类
    没有&时, 解析是后代元素
    */
    #header {
      color: black;
    }
    #header-navigation {
      font-size: 12px;
    }
    #header-logo {
      width: 300px;
    }
    #header:hover {
      color: #ccc;
    }
    div {
      color: black;
    }
    div-navigation {
      font-size: 12px;
    }
    div-logo {
      width: 300px;
    }
    div:hover {
      color: #ccc;
    }

    运算

    任何数字、颜色或者变量都可以参与运算。下面是一组案例:

     @init: #111111;
     @19px;
     @height:100%;
     @transition: @init*2;
     .switchColor {
         color: @transition;
         width: @width/2;
         height: @height;
     }
    .switchColor {
      color: #222222;
      width: 9.5px;
      height: 100%;
    }

    命名空间

    有时候,你可能为了更好组织 CSS 或者单纯是为了更好的封装,将一些变量或者混合模块打包起来,一些属性集之后可以重复使用。
    示例:

    /*模块*/
    #bundle {
      .button {
        display: block;
        border: 1px solid black;
        background-color: grey;
        &:hover {
          background-color: white
        }
      }
      .tab { /**/ }
      .citation { /**/ }
    }
    
    /*下面复用上面的一部分代码*/
    #header a {
      color: orange;
      #bundle > .button;
    }
    /*模块*/
    #bundle .button {
      display: block;
      border: 1px solid black;
      background-color: grey;
    }
    #bundle .button:hover {
      background-color: #ffffff;
    }
    #bundle .tab {
      /**/
    }
    #bundle .citation {
      /**/
    }
    /*下面复用上面的一部分代码*/
    #header a {
      color: orange;
      display: block;
      border: 1px solid black;
      background-color: grey;
    }
    #header a:hover {
      background-color: #ffffff;
    }

    作用域

    子类里面的优先,找不到才往父类里找。

    示例:

    @var: red;
    #hearder{
         color: @var;
    }
    #page {
        color: @var;
        @var: white;
        #header {
            color: @var;
        }
    }
    #hearder {
      color: #ff0000;
    }
    #page {
      color: #ffffff;
    }
    #page #header {
      color: #ffffff;
    }

    注释

    css仅支持块注释 //。less里块注释和行注释都可以使用://  /**/

    导入

    和css一样,你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less扩展名,则可以将扩展名省略掉:

    @import "ip"; // ip.less 输出效果 = ip.less + test.less
    @import "typo.css"; //支持导入css
  • 相关阅读:
    [BZOJ 4117] Weather Report
    [BZOJ 3233] 找硬币
    集合迭代器Iterator
    如何实现数组与List的相互转换?在 Queue 中 poll()和 remove()有什么区别?哪些集合类是线程安全的?
    ArrayList分别与LinkedList、Vector、Array的区别
    HashMap与TreeMap
    HashSet原理
    并发场景下HashMap死循环导致CPU100%的问题
    HashMap工作原理
    HashMap与HashTable的区别
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/6004912.html
Copyright © 2020-2023  润新知