• 用Less 的 js方式替代 bootStrap 里 [class*=”span”]


    Bootstrap 里的 grid system 里面 (源代码) 有这么一段,

    [class*="span"] {
      float: left;
      margin-left: @gridGutterWidth;
    }
    用 RECESS 去跑会看到提示:Universal selectors should be avoided。这个既可以说是 selector 的问题,也可以说是 RECESS 的问题,但可以在运行的时候加个参数忽略掉。

    自己去写扩展时也会写到类似的规则,比如需要兼容某浏览器,如果不这样写,就会需要像Bootstrap-IE6 那样写

    .span1, .span2, .span3, .span4, .span5, .span6,
    .span7, .span8, .span9, .span10, .span11, .span12 {
      float: left;
      display: inline;
    }

    但这样太丑陋僵化了,而且经不起变化,当我使用 16 栅格或者其它非 12 栅格时,就非常被动。

    如果不使用 [attr*=val],不知道 LESS 是否有现成的东西来简化。我设想会不会有类似于".span" + [1..@{gridColumns}] 的特性支持。嗯,是有点过于美好了。

    但是 LESS 支持运行 JavaScript,这里没有太复杂的运算,只是字符串迭代拼接,感觉可行,于是有了下面这个。

    // Modify this for custom colors, font-sizes, etc
    @import "variables.less";
     
    // equals [class*="span"]
    (~`(function(pf,c){var a=[];while(c>0){a.push(pf+c);c--;}return a.join(',');})('.span',parseInt("@{gridColumns}"))`) {
      float: left;
      margin: 0 @gridGutterWidth 0 0;
    }
    //Js如下:
    (function(pf,c){
      var a=[];
      while(c>0){
        a.push(pf+c);
        c--;
      }
      return a.join(',');
    })('.span',parseInt("@{gridColumns}"))

    由于只有一行,尽量简化了。pf 是前缀 prefix 的意思,c 是迭代项,入参值为parseInt("@{gridColumns}"),这样变化就由 variables.less 控制了。看起来不是很直观,加个注释声明了一下。

  • 相关阅读:
    每日一题
    每日一题
    每日一题
    每日一题
    GitLab 部署
    Golang Web开发之Gin入门
    Golang消息队列之NSQ
    Golang操作Redis
    Golang操作MySQL
    Golang Json数据处理方法
  • 原文地址:https://www.cnblogs.com/Megasu/p/4152988.html
Copyright © 2020-2023  润新知