玩转CSS3基础——过渡与动画

简介: CSS3新增了过渡属性,可以从一个状态变化到另一个状态时,变化更加地平滑。CSS3的过渡功能就像德芙巧克力那般,如丝一般顺滑,口感很好,哈哈🙆‍♀️

CSS3过渡

CSS3新增了过渡属性,可以从一个状态变化到另一个状态时,变化更加地平滑。

CSS3的过渡功能就像德芙巧克力那般,如丝一般顺滑,口感很好,哈哈🙆‍♀️

src=http___5b0988e595225.cdn.sohucs.com_q_70,c_zoom,w_640_images_20180920_c4b9d8eef7c547e6973d01b7b71ce2aa.gif&refer=http___5b0988e595225.cdn.sohucs.gif

在W3C标准中是这样描述transition的,CSS3 的 transition 允许 CSS 的属性值在一定的时间区间内平滑的过渡。这种效果可以在鼠标单击,获得焦点,对元素任何改变中触发,并平滑地以动画效果改变 CSS 的属性值。

先看一个快速入门示例,如下:

https://code.juejin.cn/pen/7102227169891319839

在上面的代码中,我们让 div 被 hover 的时候,改变其宽度,但是我们可以看到效果非常的生硬。

此时我们就可以添加一个 CSS3 新增的属性 transition,使其两个状态变化之间纵享丝滑一下。

https://code.juejin.cn/pen/7102228636539256869

接下来我们来看一下 transition 的具体语法。

transition 属性是一个复合属性,它是由 transition-property,transition-duration,transition-timing-function 和 transition-delay 的一个简写属性。

  • transition-property:指定过渡的 CSS 属性
  • transition-duration:指定过渡所需的完成时间
  • transition-timing-function:指定过渡函数
  • transition-delay:指定过渡的延迟时间
  1. transition-property

    该属性用来指定过渡动画的属性名称,可选值为noneallproperty

    image.png

    需要特别说明的是,并不是所有的属性都可以进行过渡,只有属性是具有一个中点值的属性才能够进行过渡效果。因为这样才能通过不停的修改中间值从而实现过渡效果。例如 display:none|block 就没有中间值,所以无法应用过渡。

    能够过渡的属性类型有颜色属性、具有长度值或百分比的属性、阴影、变形系列属性,具体支持过渡的属性可以参阅下表:

    image.png

  2. transition-timing-function

    该属性用于设置一个属性过渡到另一个属性所需要的时间,单位时间为秒(s)或者毫秒(ms),默认值为0,

  3. transition-timing-function

    该属性用于设置过渡速度,也是常说的贝塞尔曲线,分别有下取值:

    image.png

  4. transition-delay

过渡延迟多久后触发,单位是秒或者毫秒,但是值可以是正整数,负整数和0,正整数和0都比较容易理解,主要说下负整数,负整数的计算会从整体过渡时间中做减法运算

https://code.juejin.cn/pen/7102250485159198727

  1. 多个元素过渡

如果要同时多个 CSS3 属性应用过渡效果,直接用逗号分离开即可,这种主要是针对每个属性过渡的时间不同的情况下。

🌰举个栗子:

背景颜色过渡时间为 .5s,而宽度的过渡时间为 .3s

https://code.juejin.cn/pen/7102251385487360007

  1. 过渡事件

有时候,在 JS 中的某些操作需要过渡效果结束后再执行,此时事件类型中给我们提供了一个 transitionend 事件方便我们监听过渡效果是否结束,例如:

https://code.juejin.cn/pen/7102259530125279245

CSS3动画

在CSS3中新增了一个animation属性,可以制作出类似flash一样的动画出来

🌰举个栗子:

https://code.juejin.cn/pen/7102297136158638117

在上面的代码示例中,我们声明了一个名为 square 的动画,然后在 div 中运用了这个动画,整个动画的播放时间为 5s

使用 CSS3 的 animation 制作动画包含两个部分:首先是用关键帧声明一个动画,其次是在 animation 调用关键帧声明的动画。

声明动画

在 CSS3 中,使用  @keyframes 来声明一个动画,语法为:

@keyframes animationname {
    keyframes-selector {
        css-styles;
    }
}

属性对应的说明如下:

image.png

在上面的示例中,我们声明动画的代码为:

@keyframes square{
  0% {
    left: 0;
    top: 0;
  }
  25% {
    left: 400px;
    top: 0;
  }
  40% {
    left: 400px;
    top: 200px;
  }
  65% {
    left: 0;
    top: 200px;
  }
  100% {
    left: 0;
    top: 0;
  }
}

这里我们就声明了一个名为 square 的动画,设置了 5 个时间段,分别是 0%、25%、40%、65%  和 100% ,每个时间段都有对应的不同 CSS 样式,当动画执行时,从一个时间段到另一个时间段会自动运用过渡效果,所以我们可以看到整个流程是非常平滑的。

使用动画

@keyframes 只是用来声明一个动画,如果一个声明的动画不被调用,那么这个动画是没有任何意义的。

在 CSS3 中通过 animation 属性来调用动画。

语法如下:

animation: name duration timing-function delay iteration-count direction fill-mode play-state;

前四个属性,我想大家应该很熟悉了,这四个属性同时也是transition的四个属性,这就不说了,主要看看后四个属性

  1. animation-iteration-count

    这个属性定义了动画应该播放多少次,如果想要一只播放下去,那么次数就是无限次,所以属性值为infinite

  2. animation-direction

    正常情况下,当动画播放完成之后,会立刻回到起始状态,但是如果设置了animation-direction,这个属性可以规定动画是否要反向播放回去。可以设置的属性值有以下:

    image.png

👉 需要注意的是,如果动画被设置只播放1次,这些属性都不会起作用,无论动画正向播放还是反向播放,都会算一次次数

  1. animation-fill-mode

    主要用于设置动画播放完成后的状态,可以设置以下值

    image.png

    我们平常用得最多的就是 forwards,定义动画播放完后保持结束时候的样子。默认值为 none,表示动画将按预期进行和结束,在动画完成其最后一帧时,动画会反转到初始帧处。当取值为 backwards 时,会在动画结束时迅速应用动画的初始帧。

  2. animation-play-state

    该属性规定动画是正在运行还是暂停,语法是:

    animation-play-state:paused|running
    • pasued: 指暂停动画
    • running: 指正在运行的动画

    该属性一般会配合JS一起使用,从而达到对动画播放状态的一个控制

动画对应事件

同样,动画也有对应的事件,与过渡只提供有 transitionend 事件不同的是,在 CSS 动画播放时,会发生以下三个事件:

  • animationstartCSS 动画开始后触发
  • animationiterationCSS 动画重复播放时触发
  • animationendCSS 动画完成后触发
相关文章
|
12天前
|
前端开发 JavaScript 开发者
CSS进阶-过渡与动画的事件监听
【6月更文挑战第16天】**CSS过渡和动画事件增强交互性,但监听与控制需谨慎。了解`transitionend`用于CSS过渡结束时的响应,避免过度使用JavaScript检测变化。示例代码展示如何绑定`transitionend`事件并在结束后执行操作。对于CSS动画,理解`animationstart`, `animationiteration`, `animationend`事件的生命周期至关重要,确保在动画结束后进行适当的清理。通过这些技巧,优化用户体验并提高代码效率。**
|
8天前
|
前端开发 JavaScript 程序员
前端深入之css篇丨初探【transform】,手把手带你实现1024程序员节动画
前端深入之css篇丨初探【transform】,手把手带你实现1024程序员节动画
|
2天前
|
前端开发
CSS动画(毛玻璃按钮)
CSS动画(毛玻璃按钮)
|
2天前
|
前端开发
CSS动画(吃豆人)
CSS动画(吃豆人)
|
2天前
|
前端开发 UED
CSS动画效果(炫酷登录页面)
CSS动画效果(炫酷登录页面)
|
2天前
|
前端开发
CSS动画效果(鼠标滑过按钮动画)
CSS动画效果(鼠标滑过按钮动画)
|
2天前
|
前端开发
css动画效果(边框流光闪烁阴影效果)
css动画效果(边框流光闪烁阴影效果)
|
2天前
|
前端开发 容器
css动画效果(边框线条流动效果)
css动画效果(边框线条流动效果)
|
24天前
|
前端开发 UED 容器
纯CSS画浮动卡通蓝天白云草坪动画效果
【6月更文挑战第1天】网页设计中,通过创新技巧,可以使用HTML和CSS模拟云朵漂浮和草地动画效果,提升用户体验。背景实现采用线性渐变动画,使背景颜色从浅青至白平滑过渡并循环移动。云朵效果通过多个不同大小和位置的`<div>`元素,结合CSS的`position: absolute;`和`@keyframes`动画实现浮动。草的动画则是通过三角形形状及`::before`和`::after`伪元素创造,配合不同动画速度和角度模拟自然摆动。完整代码可在提供的链接中下载。
29 1
纯CSS画浮动卡通蓝天白云草坪动画效果
|
12天前
|
前端开发 开发者 异构计算
CSS进阶-CSS动画关键帧
【6月更文挑战第15天】CSS的`@keyframes`创建细腻动画,定义样式变化阶段以增强网页互动性。通过`animation`属性应用动画,如`fadeIn`示例。常见问题包括动画结束状态、卡顿和浏览器兼容性,解决办法涉及优化关键帧、使用硬件加速和添加前缀。进阶技巧包括多步骤动画和控制播放状态。例如,背景色渐变动画展示了颜色随时间变化的效果。学习和实践关键帧动画,提升Web开发技能。