jbr*_*jbr 4 css arguments css3 less less-mixins
我有一个属性@keyframes,我用autoprefixer编译添加所需的前缀.
我想要做的是在动画名称中添加一个参数(或者在任何可能的地方),将属性值更改为关键帧键.
这就是我现在所拥有的:
@keyframes loader {
0% { transform: translate(0, -50%) rotate(0deg); }
100% { tranform: translate(0, -50%) rotate(360deg); }
}
Run Code Online (Sandbox Code Playgroud)
基本上我想做的是:
@keyframes loader(@transform) {
0% { transform: @transform rotate(0deg); }
100% { tranform: @transform rotate(360deg); }
Run Code Online (Sandbox Code Playgroud)
传递参数@keyframes不能直接在Less中完成.然而,我们可以将整个@keyframes规则包装在父mixin中,将参数传递给mixin并在帧中使用它.
.loader(@transform){ /* wrapper mixin which accepts input parameter */
@keyframes loader {
0% { transform: @transform rotate(0deg); }
100% { transform: @transform rotate(360deg); }
}
}
.loader(translate(0, -50%)); /* mixin call */
Run Code Online (Sandbox Code Playgroud)
(Curt最初提供了一个答案,但由于我不知道的原因删除了它.)
如果您感兴趣,通用关键帧mixin也可以用下面给出的Less编写.
样本1:
.generickeyframe(@name; @from; @to){ /* takes name, from frame rules, to frame rules */
@keyframes @name{
0% { @from();}
100% { @to();}
}
}
.generickeyframe(loader; {transform: translate(0,-50%) rotate(0deg)};
{transform: translate(0,-50%) rotate(360deg)});
Run Code Online (Sandbox Code Playgroud)
样本2:
.keyframefromto(@name; @from; @to){
@keyframes @name{
0% { transform: @from;}
100% { transform: @to;}
}
}
.keyframefromto(loader; translate(0,-50%) rotate(0deg); translate(0,-50%) rotate(360deg));
Run Code Online (Sandbox Code Playgroud)
如果@keyframes规则中需要存在多个框架,我们可以使用数组列表和循环,如下面的代码段所示.这个mixin将动画的名称,帧的列表(它们的百分比数字)和每个帧的属性(以规则集的形式)作为参数.
.generickeyframe(@name; @framelist; @frameprops){
@keyframes @name{
.loop-framelist(@index) when (@index <= length(@framelist)){
@framepos: extract(@framelist, @index) * 1%;
@{framepos}{
@props: extract(@frameprops, @index);
@props();
}
.loop-framelist(@index + 1);
}
.loop-framelist(1);
}
}
.generickeyframe(loader;
0,25,50,75,100;
{transform: translateX(10px);},
{transform: translateX(20px);},
{transform: translateX(50px);},
{transform: translateX(20px);},
{transform: translateX(10px);}
);
Run Code Online (Sandbox Code Playgroud)
编译CSS:
@keyframes loader {
0% {transform: translateX(10px);}
25% {transform: translateX(20px);}
50% {transform: translateX(50px);}
75% {transform: translateX(20px);}
100% {transform: translateX(10px);}
}
Run Code Online (Sandbox Code Playgroud)