【发布时间】:2011-11-22 23:51:47
【问题描述】:
我喜欢使用 SASS 制作 mixin,以帮助我实现良好的跨浏览器兼容性。我想做一个看起来像这样的mixin:
@mixin box-shadow($value) {
box-shadow: $value;
-webkit-box-shadow: $value;
-moz-box-shadow: $value;
}
我可以传递这样的东西:
@include box-shadow(inset -2px -2px 2px rgba(0,0,0,0.5), inset 1px 1px 2px rgba(255,255,255,0.5), inset 0px 0px 0px 1px #ff800f);
结果是这样的:
box-shadow: inset -2px -2px 2px rgba(0,0,0,0.5), inset 1px 1px 2px rgba(255,255,255,0.5),inset 0px 0px 0px 1px #ff800f;
-moz-box-shadow: inset -2px -2px 2px rgba(0,0,0,0.5), inset 1px 1px 2px rgba(255,255,255,0.5),inset 0px 0px 0px 1px #ff800f;
-webkit-box-shadow: inset -2px -2px 2px rgba(0,0,0,0.5), inset 1px 1px 2px rgba(255,255,255,0.5),inset 0px 0px 0px 1px #ff800f;
但是,这不起作用,因为编译器认为我正在尝试传递 mixin 3 参数。 box-shadow 接受可变数量的逗号分隔位,所以我不能只定义像 box-shadow($1,$2,$3) 这样的 mixin。
我试过了
@include box-shadow("inset -2px -2px 2px rgba(0,0,0,0.5), inset 1px 1px 2px rgba(255,255,255,0.5), inset 0px 0px 0px 1px #ff800f");
它编译了,但实际上并没有渲染样式。
关于如何解决这个问题的任何提示?
【问题讨论】:
-
和你一样,我认为在有逗号的情况下将参数包装在字符串中很直观。将 #{} 放入 mixin 本身允许您执行此操作。我也添加了一个答案来显示这一点。
-
只是一个关于
rgba的使用的注释,主要是为了其他开始使用 Sass 的人(因为我知道这里的其他人都已经知道这一点:])。不必输入rgba(0,0,0,0.5);,您可以输入rgba(black,.5)。white、red等和all other CSS colors 也是如此,这样您就不必输入实际的 RGB 值本身。您还可以使用十六进制值:rgba(#258,.5);。或颜色变量:rgba($colorVariable,.5)。希望对您有所帮助。 -
4 年后,我注意到 box-shadow 表达式的顺序是错误的。好尴尬。
标签: sass