SS实现一个高度过度的动画 ,针对于属性height,设置一个transition动画就能实现我们想要看到的效果。而这个高度在实际情况下, 我们并不希望它是一个固定的值,需要做的更灵活一点,比如随着内容的增减自适应,所以,有人就会想到使用transition将高度从0过度到auto,然而,这样实现动画效果会生效吗?有没有更优秀的技巧或者方法了?
有的,今天和大家聊一聊这个问题。
文章中讲解的DOM结构,如下
效果如下,鼠标移上去的时候,下面这段文字展示(<mark>动画效果</mark> )
默认的时候高度设置成0,鼠标移上去的时候,将高度设置成auto,像下面代码这样
从效果上来看,这个变化是瞬间的,并没有500毫秒过度效果。也就是说CSS不能使用transition实现height从0过度到auto。
这不符合我们的预期效果。
竟然auto不能动画过度,那我们就改成固定的值(最简单的就是改成数字),比如,从0过度到300。这样过度效果就生效了。
虽然这样能过度过去,但这不是一个很优的方法, 因为这样处理的话,我们得通过JS去计算这个高度,才能确保我们的功能不出BUG。
为什么不试一下最大高度了?
max-height从0到固定值也是可以animation过去的,唯一不太好的地方就是,我们的内容有可能会溢出,毕竟我们设置的只是一个最大的高度。
如果需求能保证内容的高度永远不会达到一定的值,用这个方法完全没什么问题。我们只需要设置一个适当的最大高度值就好。
这个时候,网格布局给我们提供了另外一个巧妙的解决方案。
只需要将grid-template-rows从0fr过度到1fr。如此一来,我们的网格项将从0过渡到其'自然'高度。这应该就是比较完美的解决办法。
代码如下
功能是实现了,我也不得不关注一下这属性的兼容性问题。
注意到chrome从107版本开始支持这个属性。
们可以在不使用JavaScript的情况下创建效果和动画,这将有助于许多设计师的工作。但我们必须小心避免滥用CSS3,因为旧浏览器不支持其所有属性。
基本了解CSS,特别是CSS3过渡和关键帧动画,非常重要。使用这个简单的概念,我们将看到如何制作功能图像滑块。
CSS3过渡的基本概念
我们可以使用四个过渡属性:
目前,Safari ,Chrome,Firefox ,Opera 和IE 的最新版都支持CSS3过渡。由于该技术仍然相对较新,因此需要浏览器的前缀。到目前为止,每个浏览器的语法完全相同,只需要更改前缀。
?
、对transition属性的认识
1、transition 属性是一个简写属性,可用于设置四个过渡属性:
transition-property 过渡效果的 CSS 属性的名称(height、width、opacity等)。
transition-duration 完成过渡效果需要时间。
transition-timing-function 规定速度效果的速度曲线。
transition-delay 过渡效果何时开始(延迟时间)。
注:如果 transition-duration属性时长为 0,就不会产生过渡效果。
2、渐变函数的值:
渐变函数是transition-timing-function; 其中贝塞尔曲线的预设值 ease渐快,匀速,减慢cubic-bezier(0.25,0.1,0.25,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) linear全程匀速cubic-bezier(0,0,1,1)
3、简写方式:transition:css属性名 过度时间 渐变函数值 延迟时间;
二、简单动画实例操作
1、先插入两张图片
<div class="A"> <img src="img/吃药.jpg" alt=""> <img src="img/main_bg.jpg" alt=""> </div>
2、给图片设置样式
<style> .A { margin: auto 100px; height: 400px; width: 600px; position: relative; } .A img:nth-child(1) { height: 300px; width: 300px; position: absolute; } .A img:nth-child(2) { height: 300px; width: 300px; position: absolute; transition: opacity 3s ease-in 2s; } .A img:nth-child(2):hover { opacity: 0; } img { height: 300px; width: 300px; } </style>
3、得到的动画效果是:
*请认真填写需求信息,我们会在24小时内与您取得联系。