带有渐变的CSS3动画[重复]

Posted

技术标签:

【中文标题】带有渐变的CSS3动画[重复]【英文标题】:CSS3 animation with gradients [duplicate] 【发布时间】:2011-08-05 00:00:09 【问题描述】:

真的没有办法用 CSS 为渐变背景设置动画吗?

类似:

@-webkit-keyframes pulse 
  0% 
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0, rgb(196,222,242)), color-stop(0.5, rgb(242,242,242)), color-stop(1, rgb(240,240,240)));
  
  50% 
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0, rgb(222,252,255)), color-stop(0.5, rgb(242,242,242)), color-stop(1, rgb(240,240,240)));
  
  100% 
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0, rgb(196,222,242)), color-stop(0.5, rgb(242,242,242)), color-stop(1, rgb(240,240,240)));
  

我知道,对于 Safari 5.1+ 和 Chrome 10+,有一个新的渐变语法,但现在,我必须为这个项目坚持旧的。

【问题讨论】:

你不能改css什么的? ? …如果我在一个元素上运行这个动画,什么都不会发生(-webkit-animation: pulse 1s infinite;) 我认为它不适用于渐变,即使使用新语法 我刚刚学会了这一点!线性渐变上的过渡还不起作用 transitions 没有,但 transforms 有,所以你至少可以平移/旋转/倾斜它们,即codepen.io/philipphilip/pen/OvXEaV 【参考方案1】:

webkit 渐变尚不支持过渡。它在规范中,但它还没有工作。

(p.s. 如果您只进行颜色转换 - 您可能需要查看 -webkit-filters - 可以制作动画!)

更新:渐变过渡显然在 IE10+ 中有效

【讨论】:

它在 new 语法的规范中,不是专有的 -webkit-gradient() 废话。 AFAIK 尚不支持渐变过渡——即使是支持新语法的过渡。 顺便说一句,如果你愿意使用 SVG——那么渐变过渡就很不错——只要你使用的是最新的浏览器。见srufaculty.sru.edu/david.dailey/svg/Stwelve.svg【参考方案2】:

您应该查看 css 砂纸 - 这可以让您实现动画渐变,但它不是纯 css 解决方案。 Css 砂纸负责渐变的跨浏览器渲染,还有一段 javascript 处理动画。

http://www.useragentman.com/blog/2010/04/05/cross-browser-animated-css-transforms-even-in-ie/

【讨论】:

【参考方案3】:

将每个渐变变化放在它自己的图层上。绝对定位它们。给每个它自己的一组彼此同步的关键帧。在这些关键帧中,为每个层、每个关键帧定义不透明度,在关键帧之间混合 1 和 0。

注意容器的颜色会渗出,因此将图层包裹在具有白色背景的父级中。

http://jsfiddle.net/jSsZn/

【讨论】:

这确实很聪明——但你只需要额外的元素来设置样式(对我来说不行),在大多数情况下这是不可能的,因为你将渐变作为元素的背景传递它自己的。但是感谢这个创造性的解决方案——现在这似乎是动画——至少是“假”——动画——渐变的唯一方法之一。 这里真的很聪明。【参考方案4】:

@Brian 不使用新的 html 元素,而是使用 sudo 元素 :before 和 :after。将主元素定位为相对,然后将伪元素定位为绝对,上、左、右、下分别为 0。

HTML:

<div></div>

CSS:

div 
    width: 200px;
    height: 200px;
    position: relative;


div::before, div::after 
    display: block;
    content: '';
    position: absolute;
    top: 0; right: 0; bottom: 0; left: 0;

使用不透明度将关键帧和渐变添加到 div 和伪元素。使用 z-index 来控制哪个在哪个之上。

【讨论】:

【参考方案5】:

我通过应用 :before 归因于 a 标签解决了这个问题。

链接:http://codepen.io/azizarslan/pen/xsoje

CSS:

nav ul#menu li a 
    display: block;
    position: relative;
    z-index: 1;

    /* webkit gradient background */
    background: -webkit-linear-gradient(top, rgb(204, 0, 51), rgb(153, 0, 0));


nav ul#menu li a:before 
    width: 100%;
    height: 100%;
    display: block; 
    position: absolute;
    top: 0;
    left: 0;
    z-index: -1;
    opacity: 0;

    /* webkit gradient background */
    background: -webkit-linear-gradient(top, rgb(0, 156, 204), rgb(0, 111, 145));

    /* webkit transition */
    -webkit-transition: all 250ms linear;

    /* before hack */
    content: ".";
    text-indent: -99999px;


nav ul#menu li a:hover:before 
    opacity: 1;

【讨论】:

很好的解决方法。我也让它在 IE 10 和 11 中工作。它在 IE 9 上已经足够好后备(没有平滑过渡,但悬停效果都一样),但如果 IE 8 或更早的声明,早期版本可能需要兼容性后备。【参考方案6】:

如果您正在寻找文本从纯色到渐变的过渡。只需对文本的 rgba 颜色进行动画处理,即可显示应用在其上的背景渐变。

CSS:

.button 
    background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#fe046e), color-stop(100%,#a02ed4));
    -webkit-background-clip: text;
    color: rgba(255,255,255,1);

    -webkit-transition: all .2s ease-in-out;
            transition: all .2s ease-in-out;


.button:hover 
    background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#fe046e), color-stop(100%,#a02ed4));
    -webkit-background-clip: text;
    color: rgba(255,255,255,0);

【讨论】:

以上是关于带有渐变的CSS3动画[重复]的主要内容,如果未能解决你的问题,请参考以下文章

css3实现文字渐变动画效果

css3渐变属性都有哪些

《精通 CSS3 动画(学完这个课写炫酷页面)》

CSS3简单动画效果与使用列表制作菜单

CSS3动画+ @keyframe运行到最后[重复]

悬停时继续 CSS3 关键帧动画/悬停时停止重复