【发布时间】:2015-05-02 06:57:52
【问题描述】:
我正在学习如何使用 LESS。我对 C++ 有很好的理解。我想为渐变创建一些 Mixins。我开始为它编写 mixins,这样我就可以输入 .gradient("the start side i.e. top", first color, second color) 或 .gradient("the start side i.e. top", first color, first stop, second color ,第二个停靠点),但对于具有 2、3 或 4 个停靠点的渐变。在我开始用四种颜色编写下一个之前,我想问一下 LESS mixins 是否可以被不同的变量类型重载。例如:
.gradient (top, @top_color, @top_stop, @bottom_color, @bottom_stop){
background: @top_color;
background: -moz-linear-gradient(top, @top_color @top_stop, @bottom_color @bottom_stop);
background: -webkit-gradient(linear, left top, left bottom, color-stop(@top_stop,@top_color), color-stop(@bottom_stop,@bottom_color));
background: -webkit-linear-gradient(top, @top_color @top_stop,@bottom_color @bottom_stop);
background: -o-linear-gradient(top, @top_color @top_stop,@bottom_color @bottom_stop);
background: -ms-linear-gradient(top, @top_color @top_stop,@bottom_color @bottom_stop);
background: linear-gradient(to bottom, @top_color @top_stop,@bottom_color @bottom_stop);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@top_color', endColorstr='@bottom_color',GradientType=0 );
}
.gradient(@_,@top_color,@top_stop,@bottom_color,@bottom_stop){}
上面的 mixin 有 5 个参数,但下面的也有。
.gradient (top, @top_color, @middle_top_color, @middle_bottom_color, @bottom_color){
background: @top_color;
background: -moz-linear-gradient(top, @top_color 0%, @middle_top_color 25%, @middle_bottom_color 75%, @bottom_color 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,@top_color), color-stop(25%,@middle_top_color), color-stop(75%,@middle_bottom_color), color-stop(100%,@bottom_color));
background: -webkit-linear-gradient(top, @top_color 0%,@middle_top_color 25%,@middle_bottom_color 75%,@bottom_color 100%);
background: -o-linear-gradient(top, @top_color 0%,@middle_top_color 25%,@middle_bottom_color 75%,@bottom_color 100%);
background: -ms-linear-gradient(top, @top_color 0%,@middle_top_color 25%,@middle_bottom_color 75%,@bottom_color 100%);
background: linear-gradient(to bottom, @top_color 0%,@middle_top_color 25%,@middle_bottom_color 75%,@bottom_color 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@top_color', endColorstr='@bottom_color',GradientType=0 );
}
(top mixin的参数是color、percent、color、percent,bottom mixin的参数是color、color、color、color)
LESS 会因为变量不同而无法理解两者之间的差异吗? 还是我应该找到其他途径来做到这一点?
编辑:
这是一个好的解决方案还是有更好的方法?
.gradient (top, true, @top_color, @top_stop, @bottom_color, @bottom_stop){
background: @top_color;
background: -moz-linear-gradient(top, @top_color @top_stop, @bottom_color @bottom_stop);
background: -webkit-gradient(linear, left top, left bottom, color-stop(@top_stop,@top_color), color-stop(@bottom_stop,@bottom_color));
background: -webkit-linear-gradient(top, @top_color @top_stop,@bottom_color @bottom_stop);
background: -o-linear-gradient(top, @top_color @top_stop,@bottom_color @bottom_stop);
background: -ms-linear-gradient(top, @top_color @top_stop,@bottom_color @bottom_stop);
background: linear-gradient(to bottom, @top_color @top_stop,@bottom_color @bottom_stop);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@top_color', endColorstr='@bottom_color',GradientType=0 );
}
.gradient(@_,true,@top_color,@top_stop,@bottom_color,@bottom_stop){}
.gradient (top, false, @top_color, @middle_top_color, @middle_bottom_color, @bottom_color){
background: @top_color;
background: -moz-linear-gradient(top, @top_color 0%, @middle_top_color 25%, @middle_bottom_color 75%, @bottom_color 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,@top_color), color-stop(25%,@middle_top_color), color-stop(75%,@middle_bottom_color), color-stop(100%,@bottom_color));
background: -webkit-linear-gradient(top, @top_color 0%,@middle_top_color 25%,@middle_bottom_color 75%,@bottom_color 100%);
background: -o-linear-gradient(top, @top_color 0%,@middle_top_color 25%,@middle_bottom_color 75%,@bottom_color 100%);
background: -ms-linear-gradient(top, @top_color 0%,@middle_top_color 25%,@middle_bottom_color 75%,@bottom_color 100%);
background: linear-gradient(to bottom, @top_color 0%,@middle_top_color 25%,@middle_bottom_color 75%,@bottom_color 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@top_color', endColorstr='@bottom_color',GradientType=0 );
}
.gradient(@_,false,@top_color,@middle_top_color,@middle_bottom_color,@bottom_color){}
第二个参数如果有停止则为真,如果没有则为假?
【问题讨论】:
-
您是否尝试过运行您的代码以查看 LESS 是否无法理解您的更改?
-
是的,当我做 .gradient (top, blue, 25%, red, 75%) 时它可以正常工作,但是当我做 .gradient (top, blue, red, green, blue) 时却没有不能正常工作。有没有办法让它作用于变量的类型?