sass 属性值拼接
我想做css属性的拼接试验,这个会用到sass中lists的一些方法。
测试例子如下:
css
@mixin repeat-test($properties...) { $lists: (); @for $i from 1 through length($properties) { $lists: join($lists, nth($properties, $i), comma); } box-shadow: $lists; }
scss调用
css
@include repeat-test(2px 0px #333, 0px 2px #333);
预期结果:
css
box-shadow: 2px 0px #333, 0px 2px #333;
编译结果:
css
box-shadow: 2px, 0px, #333, 0px, 2px, #333;
看来循环时,并没有做list item的判断,这个怎么解决呢?
注意:我不需要 box-shadow:$properties
的方式,就问题论问题吧。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
经测试,将
join($lists, nth($properties, $i), comma);
换成append($lists, nth($properties, $i), comma);
满足要求,但在这之后,$lists
其实和$properties
的值是一样的。还有另一种方法,将
nth($properties, $i)
换成#{nth($properties, $i)}
,其他的保持不变,也可以实现你要的效果。根据官方文档的解释,
join
是将两个列表合并成一个;而append
是往一个列表中追加一个值。UPDATE
对于你评论中的疑问,可以这样理解。
#{}
在SASS
中的意思是interpolation
,可以理解为插值
,很多语言中都有这个特性,如PHP
。这个操作会将它里面的值转换成字符串。你可以使用SASS
中的type-of
函数测试。然后再结合文档中对
join
解释理解一下。