从
the specification
:
可设置动画:否
那么
值得注意的是,它们甚至可以转换或动画,
但是由于行动单位无法解释他们的内容
,它们总是使用“50%翻转”行为,该行为用于无法智能插值的任何其他值对。但是,@keyframes规则中使用的任何自定义属性都会被动画污染,这会影响通过动画属性中的var()函数引用时如何处理该属性。
因此,基本上,您可以在属性上使用transition和animation,它们的值是用自定义属性定义的,但不能对自定义属性执行此操作。
注意下面例子中的不同,我们可能认为两个动画是相同的,但不是
left
但不是如何设置
左边
(也可以在任何地方使用)
#one {
width: 50px;
height: 50px;
background-color: gold;
animation: roll-o-1 2s infinite alternate ease-in-out both;
position: relative;
left: calc(var(--o) * 1px);
}
@keyframes roll-o-1 {
0% {
--o: 0;
}
50% {
--o: 50;
}
100% {
--o: 100;
}
}
#two {
width: 50px;
height: 50px;
background-color: silver;
--o: 1;
animation: roll-o-2 2s infinite alternate ease-in-out both;
position: relative;
}
@keyframes roll-o-2 {
0% {
left: calc(var(--o) * 1px);
}
50% {
left: calc(var(--o) * 50px);
}
100% {
left: calc(var(--o) * 100px);
}
}
<div id="one"></div>
<br>
<div id="two"></div>
使用转换的另一个示例:
.box {
--c:red;
background:var(--c);
height:200px;
transition:1s;
}
.box:hover {
--c:blue;
}
<div class="box"></div>
我们有一个转换,但不是针对自定义属性。是为了背景,因为在
:hover
我们正在重新评估这个值,这样背景就会改变,转换就会发生。
对于动画,即使定义了
左边
属性,则由于
动画被污染
如上所述:
#one {
width: 50px;
height: 50px;
background-color: gold;
animation: roll-o-1 2s infinite alternate ease-in-out both;
position: relative;
left: calc(var(--o) * 1px);
}
@keyframes roll-o-1 {
0% {
--o: 0;
left: calc(var(--o) * 1px);
}
50% {
--o: 50;
left: calc(var(--o) * 1px);
}
100% {
--o: 100;
left: calc(var(--o) * 1px);
}
}
#two {
width: 50px;
height: 50px;
background-color: silver;
--o: 1;
animation: roll-o-2 2s infinite alternate ease-in-out both;
position: relative;
}
@keyframes roll-o-2 {
0% {
left: calc(var(--o) * 1px);
}
50% {
left: calc(var(--o) * 50px);
}
100% {
left: calc(var(--o) * 100px);
}
}
<div id=“一”></div>
<br>
<div id=“两个”><div>