• 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匹配,第一个参数可以为任意值。

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

  • 相关阅读:
    流程控制引擎组件化
    (七):C++分布式实时应用框架 2.0
    (六):大型项目容器化改造
    (五):C++分布式实时应用框架——微服务架构的演进
    (四):C++分布式实时应用框架——状态中心模块
    (三):C++分布式实时应用框架——系统管理模块
    (二): 基于ZeroMQ的实时通讯平台
    (一):C++分布式实时应用框架----整体介绍
    分布式压测系列之Jmeter4.0第一季
    选择 NoSQL 需要考虑的 10 个问题
  • 原文地址:https://www.cnblogs.com/Youngly/p/6808360.html
Copyright © 2020-2023  润新知