动画div背景位置(CSS)

时间:2014-09-19 13:17:27

标签: html css css3

我想为我的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:

http://jsfiddle.net/uLedmk5k/

3 个答案:

答案 0 :(得分:1)

您必须使用固定值才能使用背景动画:

@keyframes moving-gradient {
    0% {
        background-position: 0,0;
    }

    100% {
        background-position: 200px 250px, 200px 250px;
    }
}

所以你必须为你的元素设置一个固定的宽度:

.test {
     width: 200px;

Fiddle

从评论中编辑

如果您将宽度设置为视口单位,它也会起作用:

.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);
    }
}