CSS详细认识制作动画的几个属性

基本上我们会有这样的一个简单的概念,css动画效果由浏览器控制和渲染,理论上比 javascript 的动画效果性能好,但是控制上没有 javascript 那么灵活方便。而css 动画是分成 transform,transition 和 animation 三个部分,其中 transfrom 主要是控制元素变形,并没有一个时间控制的概念,而 transition 和 animation 才是动画的重点部分,它们可以控制在一个时间段里,元素在两个或以上的状态切换的效果。

一:transition

transition 允许我们在 CSS 属性变化时给它添加一个过度的动画效果。通常情况下,CSS 属性变化是立即生效的,新的属性值在超级短的时间内替换掉旧的属性值,然后浏览器重新绘制样式内容(可能是 reflow 或者 repaint)。大部分情况下会感觉样式变化突兀,而 transition 则可以添加顺滑的一个变化效果。例如:

.content {  background: magenta;  transition: background 200ms ease-in 50ms;}.content:hover {  background: yellow;  transition: background 200ms ease-out 50ms;}

transition 的兼容性,不算差,基本上移动设备都可以使用了,并且能做到渐进增强,支持的便有过渡效果,不支持的便是直接切换,所以可以放心使用。

transition 属性

立即学习“前端免费学习笔记(深入)”;

CSS 的 transition 有四个属性:

transition-delay 延迟多久后开始动画transition-duration 过渡动画的一个持续时间transition-property 执行动画对应的属性,例如 color,background 等,可以使用 all来指定所有的属性transition-timing-function 随着时间推进,动画变化轨迹的计算方式,常见的有:linear,ease,ease-in,ease-out,cubic-bezier(...) 等。

这四个属性可以简写成为:

.class {  transition:}

例如前边的那个例子,当 .content 元素 hover 时,50 毫秒后背景颜色从 magenta 渐变到 yellow,持续时间 200 毫秒,使用的是 ease-out 的算法。留意下:transition 生效的是对应的选择器的属性,例如 .content:hover 中的 transition 便是从 .content 的 magenta 到 yellow 过渡效果的控制,而 .content 中的 transition 则是控制不 hover 时,背景颜色从 yellow 到 magenta 的变化过程。

all 这个属性值是这样的,它对应选择器下的元素的所有 CSS 属性生效,无论在哪里声明的 CSS 规则,并不局限于在同个代码块下。

如果需要不同属性对应不同的效果,可以这么来写:

.demo {  transition-property: all, border-radius, opacity;  transition-duration: 1s, 2s, 3s;  /* 当这样使用时,确保 all 在第一个,因为如果 all 在后边的话,它的规则会覆盖掉前边的属性 */}

transition 的 none 属性较少用到,一般用于移除原本有的动画效果。none 没法和逗号一起使用来移除特定属性的动画效果,只能直接干掉 transition,如果要移除特定的属性效果,可以重写 transition 而不把要移除的属性写进去,或者比较 trick 的做法是设置 duration 为 0。

并不是所有的 CSS 属性都是可以添加 transition 效果的。详细可以参考文档:animatable properties。可能经常遇到的就是 display 这个属性并不能添加 transition 效果,你可以考虑使用 visibility 或者后边会提及的 animation。

关于 transition-timing-function 的各个算法的一个变化曲线是怎么样的,我们可以使用 chrome 的开发者工具来看一下,CSS 中你编写了对应的 transition 后,把鼠标移到 transition-timing-function 的那个值前边,如下图:

3.jpg

这样你便可以很清晰地看到这个算法的一个变化轨迹是怎么用的,然后选择符合自己需要的一个算法。

transition 相关的事件

transitionend 事件会在 transition 动画结束的时候触发。通常我们会在动画结束后执行一些方法,例如继续下一个动画效果或者其他。Zepto.js 中的动画方法都是使用 CSS 动画属性来处理,而其中动画运行后的回调便应该是使用这个事件来处理。

transitionend 事件触发时会传入一些动画相关的参数,例如:propertyName,elapsedTime,详细内容可以参考:transitionend。

transition 应用

transition 在很多 UI 框架中是很常见的属性,当我们开发一个交互效果的时候,从某个状态到达另外一个状态时,transition 可以使得这个过程变得更加舒适和顺滑。例如上边的 hover 时的背景颜色的切换,控制元素的显示和隐藏时使用 opacity 来实现渐隐渐现。

当 transition 配合上 transform 提供的多样化的元素变化能力后,便可以绘制出很多有趣的交互渐变效果了。最近使用过程中做的一个简单效果的例子,点击查看。

很常见还有表单 input 报错时边框变红,按钮 hover 时背景渐变等,很多的 CSS 交互效果会因为 transition 变得更加自然。

二:animation

虽然 transition 已经提供了很棒的动画效果了,但是我们只能够控制从一个状态到达另外一个状态,没法来控制多个状态的不断变化,而 animation 而帮助我们实现了这一点。使用 animation的前提是我们需要先使用 @keyframes 来定义一个动画效果,@keyframes 定义的规则可以用来控制动画过程中的各个状态的情况,语法大抵是这个样子:

@keyframes W {  from { left: 0; top: 0; }  to { left: 100%; top: 100%; }}

@keyframes 关键词后跟动画的名字,然后是一个块,块中有动画进度的各个选择器,选择器后的块则依旧是我们常见的各个 CSS 样式属性。

在这里,控制动画的整个过程的选择器很重要,语法相对简单,你可以使用 from 或者 0% 来表示起始状态,而 to 或 100% 来表示结束状态。中间的部分你都可以使用百分比来进行表示。选择器后的块则是在到达这个进度状态时元素的样式应该是怎么样的,整个的过渡动画在这个的控制基础上由浏览器去绘制。

同样地,不是所有的属性都可以有动画效果,MDN 维护了一份 CSS 动画的属性列表 可供参考。

通常来说,多个状态下的相同属性的值应该是可以取到它们的中间值的,例如 left 从 0% 到 100%,如果没法取到中间值,如 height 从 auto 到 100px,有可能出现奇怪的一些状况,并且不同浏览器对此的处理也不尽相同,所以请尽量避免这种情况。

animation 属性

animation 的属性比 transition 多,如下:

animation-name 你需要的动画效果的 @keyframes 的名字。animation-delay 和 transition-delay 一样,动画延迟的时间。animtaion-duration 和 transition-duration 一样,动画持续的时间。animation-direction 动画的一个方向控制。

默认是 normal,如果是上述的 left 从 0% 到 100%,那么默认是从左到右。如果这个值是 reverse,那么便是从右到左。

由于 animation 提供了循环的控制,所以还有两个值是 alternate 和 alternate-reverse,这两个值会在每次循环开始的时候调转动画方向,只不过是起始的方向不同。

例如还是 left 的例子,假设设置了 animation-direction: alternate; animation-iteration-count: infinite;,那么这个元素从左到右移动后,便调转方向,从右到左,如此循环。

animation-fill-mode 这个属性用来控制动画前后,@keyframes 中提供的 CSS 属性如何应用到元素上。
默认值是 none,还有其他三个选择:forwards,backwards,both。

假设是 none,那么动画前后,动画中声明的 CSS 属性都不会应用到元素上。即动画效果执行后,元素便恢复正常状态。

如果是 forwards,那么动画结束后,会把最后状态的 CSS 属性应用到元素上,即保持动画最后的样子。而 backwards 则相反,both 则都会,计算得出最后的一个结果。

animation-timing-function 和 transition-timing-function 一样,动画变化轨迹的算法。

animation-iteration-count 动画循环次数,如果是 infinite 则无限次。有趣的是,支持小数,即 0.5 表示动画执行到一半。

animation-play-state 动画执行的状态,两个值 running 或者 paused,可以用来控制动画是否执行。

上述这些属性可以简写为:

.class {  animation:}

略长,当然,平时使用中可能是省略部分参数的。

animation 需要留意的东西

1.优先级

记得 CSS 中的层叠概念么,优先级高的属性会覆盖优先级低的属性,当 animation 应用到元素中时,动画运行过程中,@keyframes 声明的 CSS 属性优先级最高,比行内声明 !important 的样式还要高。现在浏览器的实现是这样子的,但是标准文档中的说法应该是可以被 !important 声明的属性所覆盖。

多个动画的顺序

由于 animation-name 是可以指定多个动画效果的,所以这里便会出现动画的一个顺序问题。后指定的动画会覆盖掉前边的,例如:

#colors {  animation-name: red, green, blue; /* 假设这些 keyframe 都是修改 color 这个属性 */  animation-duration: 5s, 4s, 3s;}

上述代码的动画效果会是这样:前 3 秒是 blue,然后接着 1 秒是 green,最后 1 秒是 red。整个覆盖的规则是比较简单的。

display 的影响

如果一个元素的 display 设置为 none,那么在它或者它的子元素上的动画效果便会停止,而重新设置 display 为可见后,动画效果会重新重头开始执行。

animation 相关事件

我们可以通过绑定事件来监听 animation 的几个状态,这些事件分别是:

animationstart 动画开始事件,如果有 delay 属性的话,那么等到动画真正开始再触发,如果是没有 delay,那么当动画效果应用到元素时,这个事件会被触发。

animationend 动画结束的事件,和 transitionend 类似。如果有多个动画,那么这个事件会触发多次,像上边的例子,这个事件会触发三次。如果 animation-iteration-count 设置为 infinite,那么这个事件则不会被触发。

animationiteration 动画循环一个生命周期结束的事件,和上一个事件不一样的是,这个在每次循环结束一段动画时会触发,而不是整个动画结束时触发。无限循环时,除非 duration 为 0,否则这个事件会无限触发。

animation 应用

animation 可以实现控制在多个状态下进行动画切换,所以应用的场景比 transition 要广泛得多,可以使用 animation 实现大量的动效.

以上就是CSS详细认识制作动画的几个属性的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1611532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 02:21:53
下一篇 2025年12月24日 02:22:06

相关推荐

  • CSS让前端网页布局更好的实用小技巧

    对css前端网页布局的技巧,可谓是名目繁多。这里将适合新手的css前端网页布局的小技巧总结出来,或许对您更有实际的参考价值: 1、ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值。 2、同一个的class选择符可以在一个文档中重复出现,而id选择符却只能出现一次;…

    好文分享 2025年12月24日
    000
  • CSS怎么设置垂直居中?

    在我们开发前端页面的时候,为了让页面效果美观,会出现需要垂直居中效果的地方。本章就让我们来了解一下用css如何设置垂直居中,详细介绍一下设置文字与div盒子的垂直居中的几种方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 推荐手册:CSS在线手册 一:css如何设置文本文字垂直居…

    2025年12月24日 好文分享
    000
  • css伪元素有哪些?css伪元素的详情介绍(内附实例)

    今天这篇文章主要的介绍了四种css样式的伪元素,讲解的css伪元素都是在日常中比较常见的,现在就让我们一起来看这篇文章吧。 首先我们先来看看本文介绍的css样式中的四种伪元素: :before 该伪元素定义在元素之前添加内容 :after 该伪元素定义在元素之后添加内容 :first-line 该伪…

    2025年12月24日 好文分享
    000
  • css盒模型的边框用法你知道吗?这里有css盒模型的组成介绍

    本篇文章主要的介绍了关于css样式中的盒模型的边框介绍,有着完整的实例,还有css盒模型边框细节的介绍和代码的解释。下面就让我们一起来看这篇文章吧 首先我们来聊聊盒模型的组成部分: 想到盒模型就不由自主的想到一个盒子,css样式的盒模型里面有内容,边框,内边距,外边距等等,我们今天这篇文章主要说的就…

    2025年12月24日
    000
  • css中的padding属性可以为负值吗?css中padding属性的详解

    关于css盒模型中的内边距padding属性的详细介绍,还有新手常犯的一个错误,内边距padding属性真的能写入负值。这个答案在文章的最后,现在就让我们一起来看这篇文章吧 首先我们介绍的是第一个问题: css中的padding属性可以为负值吗?这个答案很容易,我们先不介绍,在文章最后有关于内边距p…

    2025年12月24日
    000
  • css如何设置圆角边框?css设置圆角边框的方法(图文)

    css如何设置边框?很多时候在开发网页前端的时候,为了让网页上面的东西看起来更加的舒服,我们可能需要设置一些圆角边框比如按钮之类的,那么,我们该怎么来设置圆角边框呢?本篇文章将给大家来介绍一下css设置圆角边框的方法。 css设置圆角边框最常用也是最简单的方法就是利用border-radius属性。…

    2025年12月24日 好文分享
    000
  • css颜色渐变实例:css3文字颜色渐变的实现方法

    在我们浏览网页的时候,有时会看到一些文字的颜色是动态渐变或者是静态渐变的形式的,那么,我们该如何在前端网页中实现文字颜色的渐变效果,本篇文章将给大家来介绍关于css颜色渐变应用中css3文字颜色渐变的效果。 css3文字颜色渐变的实现方法有很多,下面我就在这里为大家介绍 css3文字颜色渐变的方法一…

    2025年12月24日 好文分享
    000
  • css透明度怎么设置?三种css图片透明度的设置方法

    css透明度的设置在网页的设计中是经常需要用到的,有时为了设计出的网页更加的美观,会对图片进行透明化处理,这样网页上面的内容就不会看不见,有的网页因为图片作为背景,也会更加美观,那么,css中的透明度怎么设置呢?今天这篇文章就来给大家分享css中图片透明度的设置方法。 css中与设置透明效果相关的属…

    2025年12月24日
    000
  • css如何使用position 属性实现定位效果?css中的4种定位方法介绍(实例)

    本篇文章给大家带来的内容是关于css如何使用position 属性实现定位效果?css中的4种定位方法介绍(实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 css中定位的基本思想很简单,它允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素、另一个元素甚至浏览器窗…

    2025年12月24日
    000
  • HTML a标签如何让鼠标悬停变色,css控制a标签鼠标悬停样式详解​

    这篇文章主要的讲述了关于html a标签让鼠标悬停变色,还有关于css控制鼠标悬停的其它样式。里面有着详细的实例教程,可以让大家学的更快,接下来就让我们一起来看这篇文章吧 首先我们先来看看html中的a标签鼠标悬停的时候变色: 大家应该都知道html中的a标签鼠标悬停的css属性吧,没错,今天我们说…

    2025年12月24日 好文分享
    000
  • css表格怎么添加边框样式?css表格边框样式总结(附完整实例)

    本篇文章主要讲述的就是关于css表格添加边框样式,这里还有关于css表格边框样式的总结,还有css表格边框的完整实例。接下来就让我们一起来看这篇文章吧 首先我们先看看如何利用css来给表格添加边框: 还记得我们在学html表格的时候也学过用border属性来给表格添加边框的,现在我们也是这样,我们来…

    2025年12月24日
    000
  • css表格中的内容如何居中?css表格中的文本样式介绍

    你知道css表格的内容太是如何居中的吗?你知道css表格的文本如何设计左对齐吗?你知道css表格如何设置右对齐吗?这些内容都在这篇文章之中等着你来学习了。 首先我们先介绍css表格中的内容是如何居中的: 在开始我们先介绍个属性,就是这个属性才能使表格在css样式中居中起来。 text-align:这…

    2025年12月24日
    000
  • 如何使用css实现中国结的效果(代码)

    这篇文章给大家带来的内容是关于如何使用css实现中国结的效果(代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 今天跟大家分享一个用 css 画中国结的教程。最终效果如下: 首先,我们定义好画中国结需要的结构: 然后开始写样式,让中国结居中显示: body { margin:…

    2025年12月24日
    000
  • 自定义文本溢出方案的总结(代码)

    在网页中,有时会看到一段文字没有说完,后面是以省略号出现,这其实就是文本溢出的处理方式,本篇文章就给大家来介绍关于多行文本溢出的解决方案。 1.单行文本溢出点点点 单行文本溢出是最常见的一种形式,使用text-overflow的ellipsis即可实现点点点,overflow属性也不可少,同时不能让…

    2025年12月24日
    000
  • css如何让文本溢出部分显示省略号?(代码实例)

    当我们在进行网页前端开发的时候,一般获取文章标题,然后一行一行的显示。但是当标题过长的时候,就会造成换行显示。还有显示部分文本信息时,如果全部显示就过于繁琐,会带来不会的网页体验感。虽然我们可以使用overflow:hidden将超过宽度的字符隐藏掉。但是结尾看起来总会让人觉得有点僵硬。而且也不利于…

    2025年12月24日 好文分享
    000
  • ​css如何自定义字体?html中的文本字体样式介绍

    css如何自定义字体的你知道吗?还有css样式设置字体样式的介绍,比如介绍了字体的大小,还有字体的粗细设置,这篇文章教大家如何用css样式来做这些内容,现在让我们来看看文章吧 一、首先呢,我们介绍的是如何用css样式来自定义字体,一起来看看吧: 在这里我们介绍一个css样式中的属性: font-fa…

    2025年12月24日
    000
  • html中的字符间距怎么设置?css样式设置文本对齐方式总结

    我们经常用的html字符间距总是不好设置,html的文本对齐方式也不会设置,现在这篇文章就来帮助大家了,这里有关于html 字符间距的调整,还有文本的对齐方式设置,现在让我们来看看这篇文章吧 首先我们先来了解一下html中的字符间距是怎么设置的: 我们先了解一下我们正常显示的文本是什么样的: 这样是…

    2025年12月24日 好文分享
    000
  • css选择器是什么?css选择器有哪些类型?

    css选择器在css的学习中无疑是十分重要的,所以,什么是css选择器?css选择器有哪些类型?这是我们必须要掌握的,本篇文章将给大家来介绍关于css选择器的基本定义,以及css选择器有哪些类型。 我们话不多说,直接进入正题~~ css选择器是什么? 在百度百科中,我们可以看到css选择器的基本定义…

    2025年12月24日 好文分享
    000
  • css阴影效果:css边框阴影如何设置?

    在网页设计过程中,我们经常需要在网页中设置一些特殊的效果,让设计出来的网页显得更加美观,本篇文章将要给大家介绍如何通过css给边框设置阴影效果,css阴影效果可能会让设计出来框更具有立体感,话不多说,让我们来具体看一看css边框阴影效果的设置方法。 我们在设置边框阴影时,必不可少的一个属性是box-…

    2025年12月24日
    000
  • CSS实现鼠标经过图片上图片等比缩放效果(代码实例)

    本篇文章给大家带来的内容是关于如何使用CSS实现鼠标经过图片上图片缩放(缓慢变化,有过渡效果,缩放的过程是有动画过渡的)效果,主要用到CSS transform属性,css3 transition属性,以下实现效果和具体的实现方法,希望对你有所帮助。 先来看下效果预览 代码解读 HTML部分的代码 …

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信