transition
transition 是一个简写属性, transition-property
、 transition-duration
、 transiton-timing-funciton
、 transition-delay
是它的四个子属性。
transition-property: 过渡属性(默认值为all)
transition-duration: 过渡持续时间(默认值为0s)
transiton-timing-function: 过渡函数(默认值为ease函数)
transition-delay: 过渡延迟时间(默认值为0s)
其中 transition-duration
是必须的且不为 0s,其他不写可以是默认值。
transition-duration
和 transition-delay
都是数值,当 transiton
属性写两个数值的分别对应这两个属性,当只写一个时对应 transition-duration
而 transition-delay
为默认值。
transition
支持一个或多个属性,四个子属性用空格隔开,多个属性用逗号隔开。
transition: width 1s ease 2s, background 1s ease 2s; // 过渡应用到 width 和 background
transition-property
应用过渡的属性
none: 没有指定任何样式
all: 默认值,表示指定元素所有支持transition-property属性的样式
<transition-property>: 可过渡的样式,可用逗号分开写多个样式
不是所有的 css 属性都支持过渡的,查看 哪些属性支持 css 过渡。
<style>
.demo {
width: 100px;
height: 100px;
background: pink;
// 过渡 width
transition: width 1s;
}
.demo:hover {
width: 300px;
}
</style>
<body>
<div class='demo'></div>
</body>
transition-duration
过渡持续时间,默认值:0s(不过渡)。
注意:该值不能是负数,否则会失效没有过渡效果。
注意:该值为单值时,即所有过渡属性都对应同样时间;该值为多值时,过渡属性按照顺序对应持续时间。
<style>
.demo {
width: 100px;
height: 100px;
background: pink;
transition-duration: 1s;
}
.demo:hover {
background: yellow;
}
</style>
<body>
<div class='demo'></div>
</body>
transition-delay
过渡延迟时间,默认值:0s(不延迟)
注意:该值不能是负值,否则会失效没有延迟效果。
注意:该值为单值时,即所有过渡属性都对应同样时间;该值为多值时,过渡属性按照顺序对应持续时间。
// 上面的例子加上
.demo {
transition-delay: 2s;
}
transition-timing-function
过渡时间函数,默认值:ease。
可以写三种的属性值:关键字、steps 函数、贝塞尔曲线(cubic-bezier)。
关键字
ease: 开始和结束慢,中间快。相当于cubic-bezier(0.25,0.1,0.25,1)
linear: 匀速。相当于cubic-bezier(0,0,1,1)
ease-in: 开始慢。相当于cubic-bezier(0.42,0,1,1)
ease-out: 结束慢。相当于cubic-bezier(0,0,0.58,1)
ease-in-out: 和ease类似,但比ease幅度大。相当于cubic-bezier(0.42,0,0.58,1)
step-start: 直接位于结束处。相当于steps(1,start)
step-end: 位于开始处经过时间间隔后结束。相当于steps(1,end)
steps 函数
steps 步进函数用于让动画不连续,将过渡时间划分为等份大小来执行动画。
这个有点难理解,主要理解一下 start 和 end 的区别。
start:表示结束,分段结束了时间才开始走。
end:表示开始,分段开始的时候,时间也跟着走。
<style>
.demo {
width: 100px;
height: 100px;
background: pink;
transition-duration: 4s;
transition-timing-function: steps(2, start);
}
.demo:hover {
width: 300px;
}
</style>
<body>
<div class='demo'></div>
</body>
<sript>
var demo = document.getElementsByClassName('demo')
demo[0].addEventListener('transitionend', () => {
console.log('动画结束')
})
</script>
观察 log 打印的时机。
贝塞尔曲线
这个没有了解过,以后补充。
参考:
[1] CSS动画简介
[2] 深入理解CSS过渡transition
[3] CSS3 animation属性中的steps功能符深入介绍