多步动画和过渡

转载自http://www.w3cplus.com/css3/using-multi-step-animations-transitions.html

CSS animations 用法简洁功能强大,一个完整的动画只需命名、@keyframes 关键帧定义以及绑定到元素三个步骤。虽然 CSS animations 的概念和用法比较简单,但却可以创造复杂精致的动画,比如多步过渡动画,这也是本文关注所要向您介绍的重点。

keyframe

如果我们为一个元素设置了背景色的关键帧,比如将背景从橘色变为黑色,那么橘色就会随着时间的推移渐变为黑色,可以说 CSS animations 自带了过渡效果。

body {
    background: black;
    animation: color-me-in 5s; /* other keywords like "infinite alternate" can be useful here */
}

@keyframes color-me-in {
    /* You could think of as "step 1" */
    0% {
        background: orange;
    }
    /* You could think of as "step 2" */
    100% {
        background: black;
    }
}

接下来我们还可以添加更多的过渡色:

@keyframes color-me-in {
    0% {
        background: orange;
    }
    /* Adding a step in the middle */
    50% {
        background: blue;
    }
    100% {
        background: black;
    }
}

简而言之:从动画开始到结束,一直都有过渡效果在发生。

去除补间动画

从上面的示例可以看到,颜色变化之间有明显的过渡效果,这种默认行为在一般情况下都是不错的。通常来说,由于 animation-timing-function 的默认值是 ease,所以动画想过往往比 linear 线性渐变效果更流畅和生动。

如果使用 step() 函数来强制关键帧在特定的时间点执行,而不再是以过渡的效果实现:

多步动画

Apple Music 的声音均衡器就是多部动画的经典示例:多个垂直的指示条随着音乐的节奏或上升或下降。下面是一个没有动画的效果:

接下来创建一个拥有 25 帧的动画,并命名为 equalize,每一帧占动画 4% 的时间,然后将该动画绑定到 .bar 元素上:

虽然效果动起来了,但是与我们预期的还是有些差异:每个垂直条应该是独立变化的。接下来,我们为每个 .bar 添加不同的animation-duration 动画属性,从而设定不同的动画时间:

大功告成!节奏响起之时,这个动画就会随之起舞。此外还有一个可选属性:animation-delay。它支持负值时间,可以让动画同时动起来:

过渡

transition 和 animation 的用法一样简单,简写形式如下:

.move-me {
    transition: [transition-property] [transition-duration] [transition-timing-function] [transition-delay];
}

下面我们给一个元素设置背景的过渡效果,当鼠标悬停在该元素上面时,改变该元素的背景色和宽度:

.box {
    width: 150px;
    height: 150px;
    background-color: red;
    transition: 1s;
}

.box:hover {
    width: 300px;
    background-color: orange;
}

现在过渡效果还是同时发生的,距离多步过渡还有一点距离。

多步过渡

要想模仿多步动画,我们可以通过逗号分隔为过渡属性设置多个值,其中的关键是使用 duration 和 delay 属性:

.box {
    transition:
        /* step 1 */
        width      1s,
        /* step 2 */
        background 0.5s 1s;
}

在此基础上,我们还可以进一步拓展出更精致的过渡效果:

  • 鼠标悬停时,在 1s 内将 width 从 150px 拉伸到 300px
  • 鼠标悬停时,在 1s 内将 background-color 从红色变为橘色
  • 鼠标悬停时,在 1s 内改变 box-shadow 的方向
  • 添加一行文本,当 width 和 height 改变时从左侧执行退出动画
  • 添加另一行文本,当前一行消失时从右侧移入

/* Our box element */
.box {
    width: 150px;
    height: 150px;
    background-color: red;
    box-shadow: 5px 5px 25px #000;
    transition: all 1s;
}

/* On hover... */
.box:hover {
    /* Increase width */
    width: 300px;
    /* Change color */
    background-color: orange;
    /* Move the shadow */
    box-shadow: -5px 5px 25px #000;
}

/* The first line of text */
.box__blurb {
    /* Start with full opacity and centered */
    opacity: 1;
    transform: translateX(45px);
    /* Then transition these chained properties */
    transition:
        opacity 0.5s 2s,
        transform 0.5s 0.5s;
}

/* On .box hover... */
.box:hover .box__blurb {
    /* Fade out */
    opacity: 0;
    /* Move over to the right */
    transform: translateX(-500px);
}

/* The second line of text */
.rect__blurb {
    /* Start with no opacity and pushed off the element */
    opacity: 0;
    transform: translateX(500px);
    /* Then transition these chained properties */
    transition:
        opacity 0.5s 1s,
        transform 0.5s 1s;
}

/* On .box hover... */
.box:hover .rect__blurb {
    /* Face in */
    opacity: 1;
    /* While entering from the right */
    transform: translateX(-100px);
}

下面是另一个多步过渡的示例,当鼠标悬停在按钮上时,执行多步过渡:

总结

多步动画和过渡是非常有富有表现力的 CSS 效果。上面的音乐均衡器是一个很实用的示例,如果你对此很感兴趣,还可以看看 Ana Tudor 的这篇文章《How I Live-Coded My Most-Hearted Pen》以及 Rémi Lacorn 的这个示例:http://codepen.io/rlacorne/pen/eKfkh

时间: 2025-01-01 21:06:48

多步动画和过渡的相关文章

css的动画和过渡

一.过渡: transition    简写属性,用于在一个属性中设置四个过渡属性. transition-property   规定应用过渡的 CSS 属性的名称. transition-duration    定义过渡效果花费的时间.默认是 0. transition-timing-function   规定过渡效果的时间曲线.默认是 "ease". transition-delay         规定过渡效果何时开始.默认是 0. eg: div { transition: w

转发-css(动画,过渡,转换)

此文章仅为转发,非原创,原文http://www.cnblogs.com/zhuanggege/p/5754543.html 请支持原创 css3动画 @keyframes 规定动画,必须定义动画的名称,动画时长的百分比,一个或多个css样式属性 以百分比来规定改变发生的时间,或者通过关键词"from"和"to",等价于0%和100% 语法:@keyframes animationname {keyframes-selector {css-styles;}} ani

css3动画:过渡

.dd { width: 100px; height: 100px; background: #24ff39 } .dd:hover { width: 200px; height: 200px; background: #ff1323 } 通过 CSS3,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果. 请把鼠标移到下面的绿色方块上: CSS3 过渡是元素从一种样式逐渐改变为另一种的效果. 要实现这一点,必须规定两项内容:

CSS3动画与过渡

transform:在使用2D或3D转换前需用transform-style申明转换的类型,preserve-3d或者preserve-2d 属性 translate(): 通过 translate() 方法,元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数移动. rotate(): 通过 rotate() 方法,元素顺时针旋转给定的角度.允许负值,元素将逆时针旋转. 在3D下,有rotateX():向屏幕例外翻转:rotateY():在屏幕左右翻转,ro

CSS动画之过渡模块

:hover伪类选择器可以用于所有的选择器(只有在悬停时,执行选择器的属性)CSS3中新增过渡模块:transition property(属性)duration(过渡效果花费的时间)timing-function(过渡效果的时间曲线)delay(过渡效果何时开始)简写:transition:过渡属性 过渡时长 过渡速度 过渡延迟 (!!如果有多组属性要改变则直接用逗号隔开写几组即可)如果有的属性相同则例:all 5s表示都是5s完成三要素:必须属性发生变化 必须告诉系统哪个属性变化 必须告诉系

vue的动画和过渡

toggle 动画内容 .fade-enter-active, .fade-leave-active { transition: all .5s; } /*.fade-enter, .fade-leave-to { opacity: 0; }*/ .fade-enter{ transform: translate(-100px,0); } .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { transform: transl

动画-使用过渡

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

CSS3动画 transition 过渡,宽度由中间向两边发生过渡

css .tapered_line{ width: 36px; height: 4px; background: #1e88e5; transition: width 3s; margin: 10px auto 0; } .main4 ul li:hover .tapered_line{ width: 220px; margin:10px auto 0; }

CSS3的变形transform、过渡transition、动画animation学习

学习CSS3动画animation得先了解一些关于变形transform.过渡transition的知识 这些新属性大多在新版浏览器得到了支持,有些需要添加浏览器前缀(-webkit-.-moz-.-ms-.-o-),本文为简化内容,直接使用了原版属性 根据不同属性的支持度,在实际使用的时候需要添加相应的浏览器前缀支持 目录: 变形transform 过渡transition 动画animation 一.变形transform 变形有rotate旋转.scale缩放.translate位移.sk