我对sass来说相当新,但我正在努力创造有用的mixins。
我正在尝试为transition
属性创建一个基本混合,其中包含带有前缀的旧版浏览器的回退。
我试图使用这样的东西:
@mixin transition($property, $duration, $timing-function, $delay) {
-webkit-transition: $property, $duration, $timing-function, $delay;
-moz-transition: $property, $duration, $timing-function, $delay;
-o-transition: $property, $duration, $timing-function, $delay;
transition: $property, $duration, $timing-function, $delay;
}
但显然没有提供前缀,所以我试图做-webkit-transition: -webkit-$property, $duration, $timing-function, $delay;
之类的事情,但这似乎也不起作用。
如何在变量中创建与供应商前缀的混合?
答案 0 :(得分:0)
而不是使用
-webkit-transition: -webkit-$property, $duration, $timing-function, $delay;
,
尝试
-webkit-transition: unquote('-webkit-' + $property) , $duration, $timing-function, $delay;
但是在这种情况下,你最好不要使用Compass,这对于像这样的常见情况有一些写得很好的mixins。
答案 1 :(得分:0)
我最终在我的mixin中使用@if
语句,如in this answer所述。
在我的特定情况下,我担心transform
属性,因为2017年这个问题得到解答时,我不再需要所有以前的供应商前缀; just -webkit
这是mixin:
@mixin transition($property, $duration, $timing-function, $delay) {
@if ($property == 'transform') {
-webkit-transition: -webkit-transform $duration $timing-function $delay;
transition: -webkit-transform $duration $timing-function $delay;
transition: transform $duration $timing-function $delay;
transition: transform $duration $timing-function $delay, -webkit-transform $duration $timing-function $delay;
} @else {
-webkit-transition: $property $duration $timing-function $delay;
transition: $property $duration $timing-function, $delay;
}
}
像这样使用它:
div {
color: red;
@include transition(transform, 500ms, ease, 0);
}
将编译为:
div {
color: red;
-webkit-transition: -webkit-transform 500ms ease 0;
transition: -webkit-transform 500ms ease 0;
transition: transform 500ms ease 0;
transition: transform 500ms ease 0, -webkit-transform 500ms ease 0;
}