我有两个mixin都转换为-webkit-transform
:
.rotate(@deg) {
-webkit-transform: rotate(@deg);
}
.scale(@factor) {
-webkit-transform: scale(@factor);
}
当我一起使用它们时:
div {
.rotate(15deg);
.scale(2);
}
......他们(如预期的那样)显示为:
div {
-webkit-transform: rotate(15deg);
-webkit-transform: scale(2);
}
这似乎不是有效的CSS,因为第二个优先于第一个;第一个被丢弃了。要合并transform
条目,应该是:
-webkit-transform: rotate(15deg) scale(2);
如何实现由LESS生成的此类CSS,即正确组合的多个transform
条目?
答案 0 :(得分:9)
从Less v1.7.0开始,merging property values可以使用空格分隔符,并且不需要将两个mixin合二为一。
以下Less代码
.rotate(@deg) {
-webkit-transform+_: rotate(@deg);
}
.scale(@factor) {
-webkit-transform+_: scale(@factor);
}
div{
.rotate(45deg);
.scale(1.5);
}
将编译成以下CSS:
div {
-webkit-transform: rotate(45deg) scale(1.5);
}
答案 1 :(得分:8)
将您的变换作为单个mixin的参数提供:
.transform(@scale,@rotate) {
-webkit-transform: @arguments;
}
我想,你也可以在守卫的帮助下将你的单独mixin连接成一个,但我不完全确定;)
我认为你无法以另一种方式实现这一点,因为解析器必须在之后修改代码,这是不可能的。
答案 2 :(得分:3)
我认为有一个简单的方法,为eleemnt创建一个div容器,并将第一个转换应用于cntainer,留下第二个转换为元素本身
答案 3 :(得分:1)
我在让@arguments工作时遇到了问题。我用@rest variable做了伎俩
仅举例:
.transform(@rest...) {
transform: @rest;
-ms-transform: @rest;
-webkit-transform: @rest;
}
.someClass{
.transform(translate3D(0,0,0),scale(1,1));
}
.otherClass{
.transform(translate3D(0,0,0),rotate(1,1));
}
.anotherClass{
.transform(rotate(1,1));
}
输出CSS:
.someClass {
transform: translate3D(0, 0, 0) scale(1, 1);
-ms-transform: translate3D(0, 0, 0) scale(1, 1);
-webkit-transform: translate3D(0, 0, 0) scale(1, 1);
}
.otherClass {
transform: translate3D(0, 0, 0) rotate(1, 1);
-ms-transform: translate3D(0, 0, 0) rotate(1, 1);
-webkit-transform: translate3D(0, 0, 0) rotate(1, 1);
}
.anotherClass {
transform: rotate(1, 1);
-ms-transform: rotate(1, 1);
-webkit-transform: rotate(1, 1);
}