您现在的位置是:网站首页> 编程资料编程资料
CSS 动态高度过渡动画效果的实现CSS实现漂亮的时钟动画效果的实例代码css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果CSS 奇思妙想边框动画效果的实现使用CSS3制作版头动画效果CSS3分享图标按钮动画特效代码CSS3通过var()和calc()函数实现动画特效
2021-09-03
946人已围观
简介 这篇文章主要介绍了CSS 动态高度过渡动画效果的实现,本文通过实例代码给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
这个问题源自于掘金上的一个留言,一个朋友问到,为什么我下面这段代码的高度过渡动画失效了?
伪代码大概是这样:
{ height: unset; transition: all 0.3s linear; will-change: height; &.up { height: 0; } &.down { height: unset; } }把它还原成一个实际的 Demo,效果大概是这样(本质想的想法是通过给元素切换它的.up,.down类,让它实现展开、合上的动画 ):

嗯哼?很奇怪,明明给height属性设置了transition,为什么过渡动画没有触发,而是直接一步到位展开了呢?
我们期待的效果是这样的:

transition 不支持 height: auto
当上述代码设置成height: unset时,实际等同于设置了height: auto,我们的想法是希望这段代码能够容器支持文本的动态高度。每次展开的时候,过渡展开到容器本身的高度即可。
查看规范,究其原因,在于CSS transtion 不支持元素的高度为 auto 的变化。
如果把上述的height: unset替换成一个具体的高度值,则动画是生效的,譬如:
{ &.up { height: 0; } &.down { - height: unset; + height: 500px; } }
但是,我们又希望能够做到动态高度的过渡转换,是不是就没有办法了么?
巧用max-height适配动态高度
嘿嘿,这里有一个非常有意思的小技巧。既然不支持height: auto,那我们就另辟蹊径,利用max-height的特性来做到动态高度的伸缩。
我们改造一下上述代码,将height: 0替换为max-height: 0,将height: auto替换成max-height: 1000px,伪代码大概是这个意思:
{ max-height: 0; transition: max-height 0.3s linear; &.up { max-height: 0; } &.down { max-height: 1000px; } }我们估算一下实际容器的最大高度,这里的1000px只需要比最大高度高即可。但是这里不能设置的太高,最高是贴近最大的使用高度即可,后面会聊到为什么。
由于max-height只是限制文本的最大高度,当容器的实际高度没有达到限制的最大高度,将不会继续变高,看看效果:

CodePen Demo -- the height property transition unwork
小缺陷
整体效果还是非常的 Nice 的,当然,可能有两个小缺陷,
- 如果实际场景中
max-height需要用到并且有其它作用,那么可能这种方法就无法满足需求了 - 另一个缺点就是视觉上有延迟,和实际高度相差越大越明显。也就是说,如果容器实际高度只有 200px,
max-height为 1000px,动画时间为 1s,缓动函数为 linear。实际动画从 0 到 200px 的高度过渡时间只有 0.2s,这一点需要非常注意~
因为本来展开动画是期望将容器的高度用 1s 的时间拉伸至 1000px,实际在 200px 的时候就停止了,所以动画时间只有 0.2 秒。综上,方法是好方法,但是具体使用的时候要需要具体分析。
到此这篇关于CSS 动态高度过渡动画效果的实现的文章就介绍到这了,更多相关css高度过渡动画内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- after伪元素实现空心三角箭头和X图标的示例详解CSS3 用border写 空心三角箭头 (两种写法)
- CSS3.0实现霓虹灯按钮动画特效的示例代码纯CSS实现酷炫的霓虹灯效果(附demo)
- CSS仿苹果平滑开关按钮效果CSS开关按钮样式详解纯CSS3实现的炫酷checkbox复选框美化库checkboxes.css(含开关按钮美化
- 纯CSS解决H5布局中的吸顶吸底的实现步骤Html5导航栏吸顶方案原理与对比实现css实现5种滚动吸顶实现方式的比较(性能升级版)Html5之title吸顶功能
- 在vue-cli中使用css-loader实现css modulecss 命名:BEM, scoped css, css modules 与 css-in-js详解使用Loader.css和css-spinners来制作加载动画的方法CSS3制作ajax loader icon实现思路及代码
- 纯CSS实现DIV悬浮的示例代码(固定位置)CSS鼠标悬浮DIV后显示DIV外的按钮解决方法纯CSS结合DIV实现的右侧底部简洁悬浮效果采用CSS定位属性实现Html中DIV层叠与悬浮CSS实现的div悬浮框并且兼容IE6的样式
- css3 实现滚动条美化效果的实例代码css实现隐藏滚动条并可以滚动内容的实例代码CSS实现导航固定的、左右滑动的滚动条制作方法CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解CSS实现隐藏滚动条并可以滚动内容效果(三种方式)css滚动条样式修改的代码
- CSS3实现苹果手机解锁的字体闪亮效果示例CSS3实现iPhone滑动解锁功能代码
- 解决ElementUI自定义CSS样式不生效的问题CSS3中的弹性布局em运用入门详解 1em等于多少像素CSS伪类:empty让我眼前一亮(实例代码)CSS使用BEM命名规范实践css 命名:BEM, scoped css, css modules 与 css-in-js详解CSS规范BEM CSS和OOCSS的示例代码详解CSS中em的正确打开方式详解
- 纯CSS免费让网站拥有暗黑模式切换功能的实现代码CSS变量实现暗黑模式的示例代码Html页面支持暗黑模式的实现详解Html5项目适配系统深色模式方案总结
