我想为我的div的背景设置动画。背景位置应从左上角移动到右下角。出于某种原因,没有任何反应。我不知道为什么
.test {
width: 50%;
height: 250px;
background: linear-gradient(to right, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%), linear-gradient(to bottom, green 0%, blue 100%);
background-size: 100% 100%;
animation: moving-gradient 1s infinite;
}
@keyframes moving-gradient {
0% {
background-position: left top;
}
100% {
background-position: right bottom;
}
}
的jsfiddle:
答案 0 :(得分:1)
您必须使用固定值才能使用背景动画:
@keyframes moving-gradient {
0% {
background-position: 0,0;
}
100% {
background-position: 200px 250px, 200px 250px;
}
}
所以你必须为你的元素设置一个固定的宽度:
.test {
width: 200px;
如果您将宽度设置为视口单位,它也会起作用:
.test {
width: 50vw;
height: 250px;
和动画
100% {
background-position: 50vw 250px, 50vw 250px;
}
Fiddle
我不确定为什么,但是在Firebug中查看computed
标签显示视口单元实际上被解释为固定的px
值
答案 1 :(得分:1)
您是否尝试过移动元素而不是移动背景图像?
translate
非常有效且流畅(因为它的抗锯齿)方式可以在屏幕上移动元素,而且您可以轻松使用百分比。
example Fiddle可能有助于解释?
虽然我可能完全误解了你想要实现的目标。
答案 2 :(得分:1)
一种愚蠢的方式,但有效 http://jsfiddle.net/uLedmk5k/9/
使用4 div并翻译
HTML
<div class="test">
<div class="bg"></div><div class="bg"></div>
</div>
CSS
.test {
width: 50%;
height: 250px;
overflow: hidden;
}
.bg {
white-space: nowrap;
width: 100%;
height: 100%;
animation: moving-gradient 1s infinite;
-webkit-animation: moving-gradient 1s infinite;
}
.bg::after, .bg::before {
content: '';
display: inline-block;
width: 100%;
height: 100%;
background: linear-gradient(to right, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%), linear-gradient(to bottom, green 0%, blue 100%);
background-size: 100% 100%;
}
@keyframes moving-gradient {
0% {
transform: translate(-100%, -100%);
}
100% {
transform: translate(0, 0);
}
}
@-webkit-keyframes moving-gradient {
0% {
transform: translate(-100%, -100%);
}
100% {
transform: translate(0, 0);
}
}