整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

CSS如何更优实现动画过度高度-

CSS如何更优实现动画过度高度?

SS实现一个高度过度的动画 ,针对于属性height,设置一个transition动画就能实现我们想要看到的效果。而这个高度在实际情况下, 我们并不希望它是一个固定的值,需要做的更灵活一点,比如随着内容的增减自适应,所以,有人就会想到使用transition将高度从0过度到auto,然而,这样实现动画效果会生效吗?有没有更优秀的技巧或者方法了?

有的,今天和大家聊一聊这个问题。

文章中讲解的DOM结构,如下

效果如下,鼠标移上去的时候,下面这段文字展示(<mark>动画效果</mark> )

01. height过度0到auto?

默认的时候高度设置成0,鼠标移上去的时候,将高度设置成auto,像下面代码这样

从效果上来看,这个变化是瞬间的,并没有500毫秒过度效果。也就是说CSS不能使用transition实现height从0过度到auto。

这不符合我们的预期效果。

02. height过度0到固定值?

竟然auto不能动画过度,那我们就改成固定的值(最简单的就是改成数字),比如,从0过度到300。这样过度效果就生效了。

虽然这样能过度过去,但这不是一个很优的方法, 因为这样处理的话,我们得通过JS去计算这个高度,才能确保我们的功能不出BUG。

03. max-height过度0到固定值?

为什么不试一下最大高度了?

max-height从0到固定值也是可以animation过去的,唯一不太好的地方就是,我们的内容有可能会溢出,毕竟我们设置的只是一个最大的高度。

如果需求能保证内容的高度永远不会达到一定的值,用这个方法完全没什么问题。我们只需要设置一个适当的最大高度值就好。

04. 过度grid-template-rows?

这个时候,网格布局给我们提供了另外一个巧妙的解决方案。

只需要将grid-template-rows从0fr过度到1fr。如此一来,我们的网格项将从0过渡到其'自然'高度。这应该就是比较完美的解决办法。

代码如下

功能是实现了,我也不得不关注一下这属性的兼容性问题。

注意到chrome从107版本开始支持这个属性。

们可以在不使用JavaScript的情况下创建效果和动画,这将有助于许多设计师的工作。但我们必须小心避免滥用CSS3,因为旧浏览器不支持其所有属性。

基本了解CSS,特别是CSS3过渡和关键帧动画,非常重要。使用这个简单的概念,我们将看到如何制作功能图像滑块。

CSS3过渡的基本概念

我们可以使用四个过渡属性:

  1. transition-property 定义应应用转换的CSS属性的名称。
  2. transition-duration 定义转换应发生的持续时间。
  3. transition-timing-function 确定如何计算转换的中间值。定时功能的效果通常称为缓动功能。
  4. transition-delay 定义转换何时开始。

目前,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、得到的动画效果是: