zoukankan      html  css  js  c++  java
  • less-Mixin 之 @functions 趣谈

    Less - Mixin

    mixin有许多高级用法。里面可以直接执行js函数,计算后返回需要的参数

    less在线编辑器:http://less2css.org/

    最终效果:

    看起来没什么卵用,其实非常不错,阅读 ant-design 样式源码 的时候看到他们使用这样的方式计算出颜色梯度,所以特意测试了一把在 less 中使用 js 方法

    ----------------------正文-------------------------x-----------------

    上图中,我定义了一个基础颜色

    @primary-color: #123456;

    并以此颜色进行计算,例如将其色相:hsv 的h值 + 50后的颜色: #291256

    主要有以下两点需要注意

    1. less 语法: ~"value"

     ~"value"

    它接受一个字符串作为参数,并原样返回内容,不含引号。它可用于输出一些不合法的 CSS 语法,或者是使用 LESS 不能识别的属性。

    参数:string - 需要转义的字符串。

    返回值: string - 转义后的字符串,不含引号

    2. Mixin 

    Mixin: 作为函数去使用,并且可以赋予参数;

    yourMixin() {

      @functions: ~"value";  // 相当于yourMixin() 函数执行就会声明一个 @functions 的变量名;

    };

    这里需要特别注意  上面关于 ~"value" 说明中的一句话: 并原样返回内容

    这里面就可以直接使用 js 函数进行计算,然后返回计算值

    有了以上两点,就可以实现值的计算并返回了

    举一个简单的方法:

    1. 先定义一个基础变量

    @primary-color: #123456;

    2. 定义一个用于计算的Mixin函数

    .paletteMixin() {
      @functions: ~`(function() {
        this.palette = function() {
         console.log(6666);
        }
      })()`;
    }
    // 函数定义好以后执行一下Mixin函数,使其内部定义的 @functions 变量名生效,即实例化此方法
    .paletteMixin();

    3. 调用 @functions 方法

    .test {
    	color: ~`palette()`;
    }

    这时应该呈现的结果如下:

    4. 现在说明方法已经执行成功,开始传递一个变量试一试

    // 修改原来的 console.log(6666); 替换为 return color; 其他保持不变
    .paletteMixin() {
      @functions: ~`(function() {
        this.palette = function(color) {
         return color;
        }
      })()`;
    }
    

    5. 传递参数

    // 在 palette() 中传入基础颜色 @primary-color
    .test { color: color(~`palette("@{primary-color}")`); }

    现在的效果应该是:

    6. 传递参数并返回结果已经实现了,就代表可以在传递后进行计算并返回结果

    一般用于处理颜色等,单纯的色码: #FF0000 值无法进行计算,需要使用

    https://github.com/bgrins/TinyColor/blob/master/tinycolor.js

    进行解析色码值。ant-design中即是采用这样的方式进行处理的。

     --------------------------------------------------------------------------------------------------------

    其他相关:

    less 高度计算:

    height: calc(~ '100vh - 64px');
     
    className: 
      overlayClassName
     
    样式修改:   
      div[class="form-item-label"]
      div[class$="select-selection--single"]
     
  • 相关阅读:
    在一个类中写完多线程(sleep 方法和wait 方法的区别)
    final
    Oracle 远程访问配置
    在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标
    C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
    C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper
    『.NET Core CLI工具文档』(十四)dotnet-install 脚本参考
    『.NET Core CLI工具文档』(十三)dotnet-publish
    『.NET Core CLI工具文档』(十二)dotnet-pack
    『.NET Core CLI工具文档』(十一)dotnet-test
  • 原文地址:https://www.cnblogs.com/mabylove/p/8206264.html
Copyright © 2011-2022 走看看