问题 CSS3过渡链接


什么是语法上干净的解决方案,在一个元素上逐个运行单个CSS3转换链?一个例子:

  • 将左侧设置为10px,将不透明度设置为1到200ms
  • 设置为30px到500ms
  • 将左侧设置为50px,将不透明度设置为0到200ms

这可以不用JavaScript吗?如果没有,如何使用JavaScript干净地编码?


1544
2017-09-03 16:54


起源



答案:


我相信你想要一个CSS3动画,你可以在动画中的不同点定义CSS样式,浏览器会为你做补间动画。这是一个描述: http://css3.bradshawenterprises.com/animations/

您必须检查目标浏览器的浏览器支持。

这是一个适用于Chrome的演示。动画是纯CSS3,我只使用Javascript来启动和重置动画:

http://jsfiddle.net/jfriend00/fhemr/

可以修改CSS以使其在Firefox 5+中也可以使用。

#box {
    height: 100px; 
    width: 100px; 
    background-color: #777;
    position: absolute;
    left: 5px;
    top: 5px;
    opacity: 0;
}

@-webkit-keyframes demo {
    0% {
        left: 10px;
    }
    22% {
        opacity: 1;
    }
    77% {
        left: 30px;
    }
    100% {
        left: 50px;
        opacity: 0;
    }
}

.demo {
    -webkit-animation-name: demo;
    -webkit-animation-duration: 900ms;
    -webkit-animation-iteration-count: 1;
    -webkit-animation-timing-function: ease-in-out;
}    

12
2017-09-03 17:03



在我的回答中添加了工作示例。 - jfriend00
这是一个我不知道的很酷的功能,显然比转换更复杂的东西更具可读性。谢谢! - Kos
这很好......谢谢。 - Luca Fagioli
快速提示我刚刚了解了自己:使用 translate 代替 left  top 等等是<s>更好的</ s>最佳实践。见[见css-tricks.com/tale-of-animation-performance/] 和[[paulirish.com/2012/... - Greg Perham


答案:


我相信你想要一个CSS3动画,你可以在动画中的不同点定义CSS样式,浏览器会为你做补间动画。这是一个描述: http://css3.bradshawenterprises.com/animations/

您必须检查目标浏览器的浏览器支持。

这是一个适用于Chrome的演示。动画是纯CSS3,我只使用Javascript来启动和重置动画:

http://jsfiddle.net/jfriend00/fhemr/

可以修改CSS以使其在Firefox 5+中也可以使用。

#box {
    height: 100px; 
    width: 100px; 
    background-color: #777;
    position: absolute;
    left: 5px;
    top: 5px;
    opacity: 0;
}

@-webkit-keyframes demo {
    0% {
        left: 10px;
    }
    22% {
        opacity: 1;
    }
    77% {
        left: 30px;
    }
    100% {
        left: 50px;
        opacity: 0;
    }
}

.demo {
    -webkit-animation-name: demo;
    -webkit-animation-duration: 900ms;
    -webkit-animation-iteration-count: 1;
    -webkit-animation-timing-function: ease-in-out;
}    

12
2017-09-03 17:03



在我的回答中添加了工作示例。 - jfriend00
这是一个我不知道的很酷的功能,显然比转换更复杂的东西更具可读性。谢谢! - Kos
这很好......谢谢。 - Luca Fagioli
快速提示我刚刚了解了自己:使用 translate 代替 left  top 等等是<s>更好的</ s>最佳实践。见[见css-tricks.com/tale-of-animation-performance/] 和[[paulirish.com/2012/... - Greg Perham


在纯CSS中,可以使用 过渡延迟 财产,你可以延迟第二次和第三次过渡。

我个人更喜欢JS解决方案。超时或“过渡”事件可用于实现此目的。

我也建议 script.aculo.us (或beta v2: scripty2),它专门用于使这些事情的编程高效和简单。


4
2017-09-03 17:08



此外,您不需要使用单独的属性,它可以包含在过渡速记中。 - Lea Verou
嗯,是否可以使用transition-delay方法在一个属性上链接几个转换? - Kos