sass compact方法的实现

不想依赖compass的编译器,但sass的又没有compact方法,于是自己造轮子。最早时在stackoverflow看到一个

@function compact($var-1,        $var-2: false,
                  $var-3: false, $var-4: false,
                  $var-5: false, $var-6: false,
                  $var-7: false, $var-8: false,
                  $var-9: false, $var-10: false) {
  $full: $var-1;
  $vars: $var-2, $var-3, $var-4, $var-5,
         $var-6, $var-7, $var-8, $var-9, $var-10;

  @each $var in $vars {
    @if $var {
      $full: $full, $var;
    }
  }
  @return $full;
}

.aaa {
    content: compact(1,2, null,7, 0 ,44);
}

这里有一个神奇的用法,如何将一个个元素串起一个数组($full: $full, $var

不过太怪了,@if又不写小括号,有点像ruby。更奇怪的是,它的@if不会过滤0。下面是我造的轮子,改动不大。

@function compact($var-1,      $var-2: false,
                  $var-3: false, $var-4: false,
                  $var-5: false, $var-6: false,
                  $var-7: false, $var-8: false,
                  $var-9: false, $var-10: false) {
  $full:();
  $vars: $var-1, $var-2, $var-3, $var-4, $var-5,
         $var-6, $var-7, $var-8, $var-9, $var-10;

  @each $var in $vars {
    @if ($var){
       $full : append($full, $var, comma);
    }
  }
  @return $full;
}

.aaa {
    content: compact(1,2, null,7, 0 ,44);
}

轮子3,使用可变长参数,节省大量代码。轮子越造越好,超越老外了。

@function compact($args...) {
    $ret: ();
    @each $i in $args{
        @if($i){//if 不会过滤0
            $ret: append($ret, $i, comma);
        }
    }
    @return $ret;
}

.aaa {
    content: compact(blue, red, false, green);
}

sass compact方法的实现

时间: 2024-09-29 12:01:35

sass compact方法的实现的相关文章

android客户端向服务器端验证登陆方法的实现1

遇到的问题:一个条件查询与多个条件查询,所用到的方式不一样 参考文档: http://www.oschina.net/question/1160609_133366    mybatis多条件查询的一个错误 解决方案如下: 利用序列号的方式解决多个参数的查询问题.对象与数据库关系的映射层. 层次结构如下: 首先定义model层里面的Userlist类,这是和我们后台mysql里面的表是一一对应的,然后定义UserlistMapper类,这个类主要是用来封装一些个方法,比如说增删改查等.其实现通过

matchesSelector及低版本IE中对该方法的实现

matchesSelector用来匹配dom元素是否匹配某css selector.它为一些高级方法的实现提供了基础支持,比如事件代理,parent, closest等. W3C在2006年就提出了该方法草案,Firefox和Safari相继实现,比如 ? 1 2 3 4 5 6 <div id="wraper" class="item"></div> <script>     wraper.mozMatchesSelector(

android客户端向服务器端验证登陆方法的实现2

一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html      android获取web服务器端session并验证登陆 http://blog.csdn.net/cainiao123hack/article/details/8255848   服务器端向Android客户端传值--登录实现 http://zhidao.baidu.com/link?url=8g9EWhyUkUgUr1dh

深入分析Object.finalize方法的实现原理

“物有本末,事有始终.知其先后,则近道矣” finalize 如果类中重写了finalize方法,当该类对象被回收时,finalize方法有可能会被触发,下面通过一个例子说明finalize方法对垃圾回收有什么影响. public class FinalizeCase { private static Block holder = null; public static void main(String[] args) throws Exception { holder = new Block(

jQuery 中 data 方法的实现原理

前言:jQuery 作为前端使用最多最广泛的 JS 库,其源码每个 JSer 都应该研究一下.早就打算看却一直被各种事拖着,上次某公司面试时被问到 jQuery 中 data 方法是如何实现的,结果答不上来懊悔不已.现在终于下决心开始看 jQuery 的源码,就从 data 方法开始.本人也是前端新手,如果文章中有理解不当或者错误之处,欢迎留言指出,3Q~ jQuery 版本为 1.8.2 data() 的使用方法 // 向一个 dom 元素绑定数据 $("#header").data

Java String类中CaseInsensitiveComparator.compare()方法的实现

String对象的大小写不敏感比较方法的实现如下: 1 public int compare(String s1, String s2) { 2 int n1 = s1.length(); 3 int n2 = s2.length(); 4 int min = Math.min(n1, n2); 5 for (int i = 0; i < min; i++) { 6 char c1 = s1.charAt(i); 7 char c2 = s2.charAt(i); 8 if (c1 != c2)

less gradient-vertical 方法的实现

// Vertical gradient using CSS where possible, and base64-encoded SVG for IE9 (enables use of this in combination with border-radius) // Based on this by Phil Brown: http://blog.philipbrown.id.au/2012/09/base64-encoded-svg-gradient-backgrounds-in-les

基于原生JS的jsonp方法的实现

基于原生JS的jsonp方法的实现 jsonp,相信大家并不陌生,是在js异步请求中解决跨域的方法之一,原理很简单,有不清楚的同学可以google下,这里就补详细解释了.在Jquery库中,jQuery直接封装有jsonp的方法,很简便,只需在ajax请求的参数中加入datatype:jsonp,jsonp:jsonpcallback即可,这里写下用原生js实现jsonp的源码. load= function (url, cfg, success) { var op = Object.proto

Swift中的类似scala的foldleft方法的实现

extension Array {     func foldLeft(a:T, action:(T, T)->T)->T {         var ret:T = a         for b:T in self {             ret = action(ret,b)         }         return ret     } } 把这个放到项目当中任何一个swift文件当中,即可全局访问. 示例: 求最小值 var t = [1,3,5,4,9,100,6,-2]