css 中 transition 需要注意的问题

cubic-bezier

是 transition-timing-function 的值的一种。

四个参数的关系式如下(t 代表时间,取值范围 [0, 1]):
P0(1-t)3 + 3P1t(1-t)2 + 3P2t2(1-t)1 + P3t3

快捷工具:http://7xpdkf.com1.z0.glb.clouddn.com/bezier.html

steps

也是 transition-timing-function 的值的一种。

steps 其实可以有两个参数。
第一个参数表示把动画分割成几次;
第二个参数该参数可选,默认是 end,表示开始值保持一次,若参数为 start,表示开始不保持。

具体效果如下图:
740839-20160402202548613-995784186

另外,transition-timing-function 的值还有一种为关键字,
共 7 种:ease 先快后慢,linear 匀速
ease-in 开始较慢,ease-out 结束较慢,ease-in-out 比 ease 幅度更大
step-start 相当于 steps(1, start),step-end 相当于 steps(1, end)

默认值

属性默认值
transition-propertyall
transition-duration0s
transition-delay0s
transition-timing-functionease

注意:此处的 0 不能省掉 s,也算是特例了。
这也意味着,你只需要修改 transition-duration: 1s 其实就已经拥有 transition: all 1s 0 ease 了。

多值

传入多个值,逗号隔开。

property 多个时,其他默认为第一个

.box {
  transition-property: width, background, opacity;
  transition-duration: 2s, 500ms;
  transition-timing-function: linear, ease;
  transition-delay: 200ms, 0s;
}

/*类似于*/
.box:hover {
  transition: width 2s linear 200ms, background 500ms ease 0s, opacity 2s linear 200ms;
}

property 少于其他值的个数时,多余的无效


.box {
  transition-property: width;
  transition-duration: 2s,500ms;
  transition-timing-function: linear,ease;
  transition-delay: 200ms,0s;
}
/*类似于*/
.box:hover {
  transition: width 2s linear 200ms;
}

正向和反向

这是一个很棒的技巧,正向时为一个动画,反向时为另一个动画。
其实正向反向这个名词并不官方也不准确,如果你有更好的诠释方式可在下方评论,谢谢。

.box {
  width:100px; height:100px; background: pink;
  transition-duration: 3s;  /* 鼠标移出时动画 3s */
}
.box:hover {
  width: 300px;
  transition-duration: 500ms;  /* 鼠标悬停时动画 .5s */
}

auto 值问题

如果目标值为 auto 是不会有动画效果的。
这也是 CSS 为什么无法实现 slideDown 效果的一道坑。
据说低版本 webkit 在反向时有动画,但其实无所谓啦。

隐藏效果

比如,当动画时 font-size 变化后,拥有 em 的值所对应的结果其实也是变化的。

.box {
  width:100px; height:100px; background: pink;
  transition-duration: 2s;
  border-right: 1em solid;
}
.box:hover {
  font-size: 30px;    /* 鼠标悬停时边框宽度也变化了 */
}

transitionend

至今(20171009)都还有很多浏览器不支持 tranistionEnd 而要使用 webkitTransitionEnd,所以请做好兼容哟。

再者,如果多个 transition-property 有动画,是会触发多次 tranistionEnd 的。
当 duration-delay 为负值时,情况会很特殊,所以非常不推荐这些写。

.box {
  width:100px; height:100px; background: pink;
  transition-duration: 1s;
}
.box:hover {
  font-size: 30px;
  border-right: 2em solid;  /* 特别注意,如果修改的是 border 将触发 4 次哟 */
}

var transitionEnd = 'onwebkitanimationend' in window ? 'webkitTransitionEnd' : 'transitionEnd';
var $box = document.querySelector('.box');
$box.addEventListener(transitionEnd, function(e){
  console.log(e);  // 触发了两次
});

在 transitionEnd 的回调参数 event 中有些属性可能值得了解一下:

  • propertyName 触发动画的属性名称
  • elapsedTime 动画实际运行的时间
  • pseudoElement 如果动画对象是伪类元素,将返回 "::before" 等

转载于:https://www.cnblogs.com/foreverZ/p/7640817.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CSS opacity transition是一种CSS属性过渡效果,它可以在元素透明度发生变化时平滑地过渡,而不是突然出现或消失。通过使用opacity属性和transition属性,可以实现这种效果。例如: ```css /* 元素初始状态 */ .element { opacity: 1; transition: opacity 0.5s ease-in-out; } /* 元素鼠标悬浮状态 */ .element:hover { opacity: 0.5; } ``` 在上面的例子,当鼠标悬浮在元素上时,元素的透明度会从1过渡到0.5,过渡时间为0.5秒,过渡效果为ease-in-out。这样可以让元素透明度变化时有一个平滑的过渡效果,增强用户体验。 ### 回答2: CSS的opacity属性用于设置元素的透明度,取值范围为0到1之间,其0表示完全透明,1表示完全不透明。 而CSStransition属性可以控制元素的过渡效果,可以使元素在不同状态之间平滑过渡。当在元素的样式使用transition属性时,我们可以指定过渡的属性、时长、延迟和过渡的函数。 如果想要设置透明度的过渡效果,可以将opacity属性和transition属性结合使用。例如,当鼠标悬停在一个元素上时,可以变元素的透明度,并添加过渡效果,使得透明度的变渐变过渡。 使用opacity和transition可以实现平滑的透明度过渡效果,给网页增添一些动态感。在CSS设置元素的opacity属性为0,然后通过添加一个类或者使用JavaScript来触发过渡,将opacity属性的值为1,即可实现元素的淡入效果。同样,可以通过变opacity的值为0来实现元素的淡出效果。 需要注意的是,opacity影响到元素内部的内容以及子元素的透明度,而不仅仅是元素本身。此外,使用transition属性时,尽量避免给元素添加过多的过渡属性,以免造成页面的卡顿。 ### 回答3: CSS的opacity属性用于设置元素的不透明度。默认情况下,元素的不透明度是1,表示完全不透明。将opacity的值设置为0可以使元素完全透明。 在CSS,使用transition属性可以创建平滑的过渡效果。通过设置opacity的过渡效果,可以实现元素在不透明度变时的渐变效果。 要创建opacity的过渡效果,我们可以在元素的CSS样式添加transition属性,并指定需要过渡的属性为opacity,以及过渡的持续时间和类型。 例如,我们可以添加如下的CSS样式: ``` .transition { transition: opacity 0.5s ease; } ``` 在上述代码,.transition是一个类选择器,我们可以将其应用于需要设置过渡效果的元素上。transition属性指定了需要过渡的属性为opacity(即不透明度),过渡的持续时间为0.5秒,过渡的类型为ease(即缓进缓出)。 当元素的opacity属性的值发生变时,例如在:hover伪类下将opacity设置为0,CSS过渡效果将会自动应用。这意味着元素的不透明度将在0.5秒的时间内逐渐减少,从而实现了渐变的效果。 总之,CSS的opacity属性和transition属性的结合使用可以在元素的不透明度变时创建平滑的过渡效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值