2014-02-15 41 views
1

在SCSS,我有混入,需要一個列表,並檢查其長度,如下所示:列表的單列表自動分解

@mixin foo($list){ 
    @debug length($list); 
} 

當我通過兩個以上的列表($a, $a)的列表如下,

$a: (1, 2, 3); 
@include foo(($a, $a)); 

length函數計算存在的($a, $a)內的兩個$a -s,並返回結果:

DEBUG: 2 

,但是當我通過由單個列表($a)如下列表,

@include foo(($a)); 

似乎列表$a被分解,length功能$a計數的三個要素,而不是計數的的$a數-s在($a),並返回結果:

DEBUG: 3 

它沒有區別,如果我再嵌入列表。以下全部返回相同結果:

@include foo($a); 
@include foo(($a)); 
@include foo((($a))); 

這是預期的功能嗎?爲什麼會發生這種情況,並且在這些情況下是否有辦法返回1

回答

3

在Sass中,括號用於指示操作順序,而不是表示您有一個包含單個元素的列表。

在薩斯3.3,添加尾隨逗號會自動把你的值到一個列表:

$foo: 1, ; 

什麼你可能會想要做的卻是有你的mixin帶有可變數量的參數,並把它們作爲一個列表。這將是這樣的:

@mixin foo($list...){ 
    @debug length($list); 
} 

.foo { 
    @include foo(1); 
} 

.foo { 
    @include foo(1, 2); 
} 

.foo { 
    @include foo((1, 2)); 
} 

控制檯提供了所需的結果:

DEBUG: 1 
DEBUG: 2 
DEBUG: 1 

如果你這樣做,但是,列表必須是混入(或功能)的最後一個參數。

+0

謝謝。有兩個解決方案。 – sawa