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

    一、带参数的混合类

    混合类的参数是选择器调用时传入的变量

    .border-radius(@radius) {
      -webkit-border-radius: @radius;
         -moz-border-radius: @radius;
              border-radius: @radius;
    }
    .section{
        border:1px solid #ddd;
        .border-radius(5px;)
    }
    .quote{
        border:1px solid #ddd;
        .border-radius(6px;)
    }
    
    /**outputs**/
    .section {
      border: 1px solid #ddd;
      -webkit-border-radius: 5px;
      -moz-border-radius: 5px;
      border-radius: 5px;
    }
    .quote {
      border: 1px solid #ddd;
      -webkit-border-radius: 6px;
      -moz-border-radius: 6px;
      border-radius: 6px;
    }
    //设默认值
    .border-radius(@radius: 5px) {
      -webkit-border-radius: @radius;
      -moz-border-radius: @radius;
      border-radius: @radius;
    }
    .section { .border-radius; }

    无论是否有参数,输出的结果中不包含混合类的声明数据。

    Mixins with Multiple Parameters,多参数混合类

    参数可以使用分号;或者逗号,做间隔。建议使用分号,因为逗号有两重含义,它可被解析为一个混合类参数分隔符,也可以解析为css列表分隔符。

    使用逗号分隔符会导致以逗号分隔的css列表无法作为一个混合类参数,另一方面,如果混合类的调用或者声明中含有多个分号,编译器会将分号作为混合类的参数,将所有逗号作为css列表。

    • 两个参数每个都包含逗号分隔列表:.name(1, 2, 3; something, else)
    • 三个参数每个都包含一个数字:.name(1, 2, 3)
    • 使用假分号来创建混合类调用,有一个参数,且参数中有逗号分隔的css列表:.name(1, 2, 3;)
    • 逗号分隔默认值.name(@param1: red, blue;)
    .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;
    }
    .section {
      .mixin(#008000);
    }
    
    /**outputs**/
    .section {
      color-1: #008000;
      color-2: #008000;
      padding-2: 2;
    }

    Named Parameters,通过名称传参数

    调用混合类时,不止可以通过参数位置传参,也可以通过参数名传参。每个参数都可以通过它的名称来引用,而不必按照特殊的顺序。

    .mixin(@color: black; @margin: 10px; @padding: 20px) {
      color: @color;
      margin: @margin;
      padding: @padding;
    }
    .section {
      .mixin(@margin: 20px; @color: #33acfe);
    }
    .quote {
      .mixin(#efca44; @padding: 40px);
    }
    
    /**outputs**/
    .section {
      color: #33acfe;
      margin: 20px;
      padding: 20px;
    }
    .quote {
      color: #efca44;
      margin: 10px;
      padding: 40px;
    }

    The @arguments Variable,@arguments变量

    @arguments在混合类中有特殊的含义,它包含混合类被调用时传进来的所有参数。当你不想一个一个处理参数时,这种写法是非常有用的。

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

    Advanced Arguments and the @rest Variable,高级参数和@rest变量

    如果混合类能接收的参数数量是可变的,你可以使用省略号...在变量名后使用省略号能将那些参数分配给变量。

    .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
    }
    
    /**实例测试**/
    .rest(@a;@rest){
        font-size:30px;
        color:@a;
        float:@rest;
    }
    .section{
        .rest(#ddd;right;)
    }
    /**outputs**/
    .section {
      font-size: 30px;
      color: #ddd;
      float: right;
    }

    Pattern-matching,模式匹配

    当需要根据传入的参数来改变混合类的行为时,模式匹配能实现这种功能。

    /**基本写法**/
    .mixin(@s; @color) { ... }
    
    .class {
      .mixin(@switch; #888);
    }
    /**pattern-matching**/
    .mixin(dark; @color) { color: darken(@color, 10%); }
    .mixin(light; @color) { color: lighten(@color, 10%); }
    .mixin(@_; @color) { display: block; }

    @switch: light;
    .class { .mixin(@switch; #888); }
    /**outputs**/

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

    解析:第一个定义的mixin不匹配,它要求dark做第一个参数;

       第二个定义的mixin匹配,它要求light做第一个参数,而switch的值时light;

        第三个定义的mixin匹配,第一个参数可以为任意值。

    只有匹配的混合类才会被使用,变量匹配绑定到任意值。

  • 相关阅读:
    poj 2411 Mondriaan's Dream 骨牌铺放 状压dp
    zoj 3471 Most Powerful (有向图)最大生成树 状压dp
    poj 2280 Islands and Bridges 哈密尔顿路 状压dp
    hdu 3001 Travelling 经过所有点(最多两次)的最短路径 三进制状压dp
    poj 3311 Hie with the Pie 经过所有点(可重)的最短路径 floyd + 状压dp
    poj 1185 炮兵阵地 状压dp
    poj 3254 Corn Fields 状压dp入门
    loj 6278 6279 数列分块入门 2 3
    VIM记事——大小写转换
    DKIM支持样本上传做检测的网站
  • 原文地址:https://www.cnblogs.com/Youngly/p/6808360.html
Copyright © 2011-2022 走看看