css动画之transition

本文介绍CSS transition属性如何解决页面元素快速变化导致的用户体验问题。详细解释了transition的各个组成部分,包括transition-property、transition-duration、transition-timing-function及transition-delay的作用,并展示了如何定义多个动画属性。

用途
用于控制页面中元素的变化速度

特点
需要用户触发(和animate最大的的区别)

解决问题

  .change{
    width:100px;
    height:100px;
  }
  .change:hover{
    width:200px;
    height;100px;
  }

如以上代码所示,我们把鼠标hover在元素上时,元素宽度瞬间变成200px,减少了用户体验,通过CSS transition我们定义元素在变化过程中的运动时间、延迟时间、运动速度

语法
transition:property duration timing-funtion delay

  • transition-property:规定设置过渡效果的 CSS 属性的名称。
  • transition-duration:定义动画时间
  • transition-timing-funtion:定义速度函数
    • linear
    • ease
    • ease-in
    • ease-out
    • ease-in-out
    • cubic-bezier(n,n,n,n)
  • transition-delay:定义过渡效果何时开始(将过渡效果推迟多久)

定义多个动画属性

 transition: width 2s, height 2s;

只要将两个的属性定义用“,”隔开即可
如果是下面情况,过渡时不会使用“3s”的时间设定

transition-property: width, height;
 tansition-duration: 2s, 1s, 3s;

如果是个样子,则时间会循环给未定义的属性

 transition-property: width, height, background-color, transform;
  tansition-duration: 2s, 1s;
  /* 等同于 */
  transition-property: width, height, background-color, transform;
  tansition-duration: 2s, 1s, 2s, 1s;

js语法

    object.style.transition="width 2s"

监听transition

el.addEventListener("transitionstart", func1, true);
el.addEventListener("transitionrun", func2, true);
el.addEventListener("transitionend", func3, true);
CSS 中使用 `transition` 属性可以实现平滑的过渡动画效果。`transition` 是一个简写属性,用于控制哪些 CSS 属性参与过渡、动画持续时间、时间函数以及动画延迟。 ### 基本语法 ```css transition: [property] [duration] [timing-function] [delay]; ``` - `property`:指定参与过渡的 CSS 属性名称,例如 `width`、`height`、`opacity` 等。 - `duration`:定义动画的持续时间,单位可以是秒(s)或毫秒(ms)。 - `timing-function`:设置动画的时间函数,控制动画速度曲线,例如 `linear`(匀速)、`ease`(默认,慢-快-慢)、`ease-in`(加速)、`ease-out`(减速)等。 - `delay`:设置动画开始前的延迟时间。 ### 示例 以下是一个完整的示例,展示如何通过 `transition` 实现鼠标悬停时的动画效果: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> .box { width: 100px; height: 100px; background-color: red; opacity: 1; /* 简写 transition 属性 */ transition: all 1s ease-in-out 0.5s; } .box:hover { width: 200px; height: 200px; opacity: 0.2; } </style> </head> <body> <div class="box"></div> </body> </html> ``` 在这个示例中,当鼠标悬停在 `.box` 元素上时,它的 `width`、`height` 和 `opacity` 属性都会以 1 秒的持续时间、`ease-in-out` 的时间函数和 0.5 秒的延迟时间进行动画过渡。 ### 性能优化建议 为了提升动画的性能,建议优先使用 `transform` 和 `opacity` 属性进行动画过渡,因为它们与合成器线程相关,不需要重新计算布局和绘制。相比之下,使用 `width`、`height`、`margin` 和 `padding` 等属性可能会导致浏览器重新计算布局和绘制,从而影响动画的流畅性[^4]。 ### 多属性过渡 如果需要为多个属性设置不同的过渡效果,可以分别定义每个属性的过渡参数: ```css transition-property: width, height, opacity; transition-duration: 1s, 2s, 1s; transition-timing-function: linear, ease, ease-in-out; transition-delay: 0s, 1s, 2s; ``` 在上面的示例中,`width` 过渡时间为 1 秒,`height` 过渡时间为 2 秒,`opacity` 过渡时间为 1 秒,并分别设置了不同的时间函数和延迟时间。 ### 相关问题 1. 如何在 CSS 中使用 transform 属性实现动画效果? 2. CSS 动画的性能优化技巧有哪些? 3. 如何在 CSS 中实现多个属性的过渡动画? 4. 什么是 CSS 动画的时间函数?有哪些常用的时间函数? 5. 如何避免 CSS 过渡动画的卡顿问题?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值