这里是我想要制作的标准CSS,但是想用SASS Mixin来完成这项工作。Sass Mixin用于包含多个阶段和变换属性的动画关键帧
标准的CSS
@-webkit-keyframes crank-up {
100% { -webkit-transform: rotate(360deg);}
}
@-moz-keyframes crank-up {
100% { -moz-transform: rotate(360deg);}
}
@-o-keyframes crank-up {
100% { -o-transform: rotate(360deg);}
}
keyframes crank-up {
100% { transform: rotate(360deg);}
}
我使用的是相同的混入,如以下后SASS keyframes not compiling as wanted(如下所示)。
MIXIN
@mixin keyframes($name) {
@-webkit-keyframes #{$name} {
@content;
}
@-moz-keyframes #{$name} {
@content;
}
@-ms-keyframes #{$name} {
@content;
}
@keyframes #{$name} {
@content;
}
}
以上是行,只要无关键帧的包括需要一个供应商前缀的属性。与转换属性一样,所有供应商前缀关键帧都会应用(在本例中)-webkit-前缀。 例如:
SCSS
@include keyframes(crank-up) {
100% { -webkit-transform: rotate(360deg);}
}
CSS
@-webkit-keyframes crank-up { 100% { -webkit-transform: rotate(360deg); } }
@-moz-keyframes crank-up { 100% { -webkit-transform: rotate(360deg); } }
@-ms-keyframes crank-up { 100% { -webkit-transform: rotate(360deg); } }
@keyframes crank-up { 100% { -webkit-transform: rotate(360deg); } }
通知中的上述,具有-moz-关键帧-webkit-。应该是-moz-
所以,我首先想到的是改变上述混入到:
蚀变MIXIN
@mixin keyframes($first-name, $last-name, $argument) {
@-webkit-keyframes #{$first-name} {
-webkit-#{$last-name}: #{$argument};
}
@-moz-keyframes #{$first-name} {
-moz-#{$last-name}: #{$argument};
}
@-o-keyframes #{$first-name} {
-o-#{$last-name}: #{$argument};
}
@keyframes #{$first-name} {
#{$last-name}: #{$argument};
}
}
随着对混入的调用看起来像
SCSS
@include keyframes(crank-up, transform, rotate(360deg)) { }
CSS
@-webkit-keyframes crank-up { -webkit-transform: rotate(360deg); }
@-moz-keyframes crank-up { -moz-transform: rotate(360deg); }
@-o-keyframes crank-up { -o-transform: rotate(360deg); }
@keyframes crank-up { transform: rotate(360deg); }
如果只有一个关键帧“舞台”(参见原始代码 - 页面顶部,只有100%标记),这可以正常工作,如果我的术语在关键帧“舞台” 。
问题
我要像上面的一个混合的东西,如工作。
@-webkit-keyframes crank-up {
20%,
40% { -webikit-transform: translateY(34px); }
80% { opacity: .8; }
100% { -webkit-transform: rotate(360deg);}
}
我也看过两个Compass Animate插件; compass-animation和较新的,但不确定这些是否有用。我需要一些添加变量的方法,并用mixin测试它,但不知道是否可以将变量传递给mixin。
任何帮助非常感谢。谢谢
我一直在玩以下,但都没有工作,只是认为我会加入他们,看看有没有人知道我要去哪里错了。
实验混入:
@mixin vendor-prefix($name, $argument, $webkit: "-webkit-", $moz: "-moz-",$o: "-o-", $stale: ""){
#{$webkit}: #{$name}: #{$argument};
#{$moz}: #{$name}: #{$argument};
#{$o}: #{$name}: #{$argument};
#{$stale}: #{$name}: #{$argument};
}
@mixin vendor-prefix($last-name, $argument){
@if $name == webkit {
-webkit-#{$name}: #{$argument};
} @else if $name == moz {
-moz-#{$name}: #{$argument};
} @else if $name == o {
-o-#{$name}: #{$argument};
} @else {
#{$name}: #{$argument};
}
}
谢谢,但我有点困惑。其中-moz-和-o-关键帧前缀在每个关键帧阶段都有自己的变换前缀。 – fidev
'@ -moz-keyframes crank-up { 20%, 40%{-moz-transform:translateY(34px); } 80%{不透明度:.8; } 100%{-o-transform:rotate(360deg);} }'和'@ -o-keyframes crank-up { 20%, 40%{-o-transform:translateY(34px);} } 80%{不透明度:.8; } 100%{-o-transform:rotate(360deg);} }' – fidev
使用autoprefixer,您可以指定您想要在您的项目中定位的浏览器以及每个浏览器的版本。我有支持每个网页浏览器的最后两个版本的默认设置(后两个版本firefox不需要关键帧的前缀,[Opera现在使用Webkit](http://mashable.com/2013/02/13/opera-is - 移动到的webkit /))。如果你想编辑你的偏好,请查看[guide](https://github.com/ai/autoprefixer#browsers) –