我目前正在爲Compass/Sass編寫我的第一個mixin。經過短暫的戰鬥,我已經得到它來生成我需要的確切CSS;因此我的問題不是關於修復輸出,而是關於清理我已經完成的方式。指南針/ Sass功能和mixin語法
以下是我正在使用的兩段代碼。完整的代碼使用任意數量的逗號分隔線性漸變生成一個background-image:
CSS規則,其中包括-webkit
,moz
和最新W3C格式(例如使用to top
而不是bottom
)的前綴不加梯度。
正如我所說,我很滿意API和輸出。我只是想清理這些代碼。
首先,在下面的w3c
條件塊,我怎麼能避免我想要的東西:
@return linear-gradient($direction, $color-stops);
...調用內置羅盤linear-gradient
混入? (我在我的項目中包含了所有的CSS3 Compass幫助程序)。我想要的是輸出一個字符串,在$direction
和$color-stops
值插值的括號內:
@function -gradient-rule($type, $direction, $color-stops) {
@if $type == ('moz') {
@return -moz-linear-gradient($direction, $color-stops);
}
@if $type == ('webkit') {
@return -webkit-linear-gradient($direction, $color-stops);
}
@if $type == ('w3c') {
// Terrible, terrible hack. Just couldn't work out how to write this without invoking the built-in Compass linear-gradient() function
$prefix: linear-gradient;
@return #{$prefix}unquote("(")#{$direction}, #{$color-stops}unquote(")");
}
}
其次,有沒有寫下面的代碼的更清潔的方式?我想循環所有的$gradients
,併爲每個$gradient
,假設第一項是一個方向聲明,其餘的是彩色停止。因此,第一項應設置在變量$to-direction
中,其餘設置在名爲$color-stops
的逗號列表中。我怎樣才能做得更好,即不需要$i
計數器?
@each $gradient in $gradients {
$i: 1;
$to-direction: nth($gradient, 1);
$color-stops: comma-list();
@each $prop in $gradient {
@if $i > 1 {
$color-stops: append($color-stops, $prop);
}
$i: $i+1;
}
// old syntax is the origin of the gradient, not the destination
$from-direction: -from-direction($to-direction);
$moz-value: append($moz-value, -gradient-rule('moz', $from-direction, $color-stops));
$webkit-value: append($webkit-value, -gradient-rule('webkit', $from-direction, $color-stops));
// new syntax is the destination
$w3c-value: append($w3c-value, -gradient-rule('w3c', $to-direction, $color-stops));
...
(continues)
}
非常感謝您的幫助!
我不熟悉Compass漸變mixin,你的mixin做的有什麼不同? – cimmanon
你可以把所有的代碼放在[codepen](http://codepen.io/)中嗎?能夠玩耍會讓事情變得更容易:) –