CSS3 渐变在悬停时闪烁

dav*_*all 4 html css css-transitions

我正在尝试使用 CSS3 渐变并尝试在鼠标悬停时将其移入。正如您从这个jsFiddle中看到的,CSS 渐变出现在:hover; 然而,它似乎闪烁了几次。

仅供参考,到目前为止,这已经在 // 上进行了Chrome v30测试。Firefox v24Safari v5.1

单独来看,两者都被证明是有效的解决方案,但结合起来,我得到了闪烁的效果。

nav li {
    width: 90px;
    padding-right: 15px;
    padding-left: 15px;
    height: 30px;
    border: 1px solid #000;
    float: left;
    list-style-type: none;

    background-position: -200px -200px;
    -webkit-transition: background 1s ease-out;
    -moz-transition: background 1s ease-out;
    -o-transition: background 1s ease-out;
    transition: background 1s ease-out;
}

nav li:hover {
    background-position: 200px 0;
    background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjIiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzYwNjA2MCIgc3RvcC1vcGFjaXR5PSIwLjIiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZ3JhZC11Y2dnLWdlbmVyYXRlZCkiIC8+Cjwvc3ZnPg==);
    background: -moz-linear-gradient(top,  rgba(255,255,255,0.2) 0%, rgba(96,96,96,0.2) 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.2)), color-stop(100%,rgba(96,96,96,0.2)));
    background: -webkit-linear-gradient(top,  rgba(255,255,255,0.2) 0%,rgba(96,96,96,0.2) 100%);
    background: -o-linear-gradient(top,  rgba(255,255,255,0.2) 0%,rgba(96,96,96,0.2) 100%);
    background: -ms-linear-gradient(top,  rgba(255,255,255,0.2) 0%,rgba(96,96,96,0.2) 100%);
    background: linear-gradient(to bottom,  rgba(255,255,255,0.2) 0%,rgba(96,96,96,0.2) 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#33ffffff', endColorstr='#33606060',GradientType=0 );
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用 来限制动画animation-iteration-count,但正如我所发现的,这似乎只适用于动画和@keyframes。我还阅读了一些 @keyframes尚不支持 CSS 渐变动画的不同网站。

Spu*_*ley 5

30px闪烁效果是由于元素高度 ( ) 和为背景指定的偏移量 ( -200px-> )之间的差异造成的0px

基本上,它在一秒的过渡中滚动经过视图六次(因为 30 变成 200 六次),这就是给你闪烁效果的原因。如果稍微增加过渡时间,例如 5 秒,您可以更容易地看到效果;这将使发生的事情变得更加明显。(显然你可以在完成测试后将其设置回来)

如果将 inital 更改background-position-30px而不是-200px,则它只会滚动到视图中一次,因此不会闪烁。

希望有帮助。