新闻中心
CSS动画如何实现导航菜单折叠展开_height与@keyframes结合应用
使用max-height模拟、@keyframes定义关键帧或J*aScript动态计算高度,可实现导航菜单平滑展开收起。1. 通过设置max-height与overflow:hidden结合transition实现简单动画;2. 利用@keyframes对已知高度进行精确动画控制,配合forwards保持最终状态;3. 借助J*aScript读取scrollHeight实现真正自适应height动画,适用于动态内容。根据场景选择合适方案可突破height:auto无法动画的限制。

导航菜单的折叠展开效果在响应式设计中非常常见,使用CSS动画结合 height 属性与 @keyframes 能实现平滑过渡。虽然 height:
auto 无法直接参与动画插值,但通过一些技巧可以模拟出自然的展开收起效果。
1. 使用 height 配合 max-height 模拟动画
由于 height: auto 不能被 CSS 动画直接驱动,一个常用方法是使用 max-height 来代替。设置一个足够大的 max-height 值,在展开时生效,收起时设为 0,并配合 overflow: hidden 实现内容隐藏。
示例代码:
<n* class="menu"><ul class="menu-list"><li>首页</li><li>产品</li><li>关于</li></ul></n*><button class="toggle-btn" onclick="this.classList.toggle('active')">
切换菜单
</button>
这种方式简单有效,适合内容高度相对固定的场景。缺点是如果 max-height 设置过大(如 1000px),动画时间可能显得拖沓。
2. 使用 @keyframes 定义更精细的 height 动画
如果需要更精确控制 height 的变化过程,可以借助 @keyframes 定义关键帧动画。虽然不能直接对 height: auto 做动画,但可以针对特定已知高度设置关键帧。
示例:预知菜单高度时的 keyframes 动画
J*aScript 控制类名切换即可触发动画:
Health AI健康云开放平台
专注于健康医疗垂直领域的AI技术开放平台
113
查看详情
<script>
function toggleMenu() {
const menu = document.querySelector('.menu-animated');
if (menu.classList.cont<a style="color:#f60; text-decoration:underline;" title= "ai"href="https://www.php.cn/zt/17539.html" target="_blank">ains('open')) {
menu.classList.replace('open', 'closed');
} else {
menu.classList.replace('closed', 'open');
}
}
</script>注意:forwards 保持动画结束后的最终状态,避免动画完成后跳回初始值。
3. 结合 J*aScript 获取真实高度实现动态动画
为了兼容不同设备和屏幕尺寸,可使用 J*aScript 动态获取元素展开后的实际高度,再注入到 CSS 变量或内联样式中,实现真正“自适应”的 height 动画。
实现思路:
- 将菜单临时设为 display: block、height: auto 并隐藏溢出
- 用 offsetHeight 获取真实高度
- 将该值设为 height 动画的目标值
- 执行动画后恢复 overflow 显示
示例代码片段:
<script> function animateMenuToggle(menuElement) { const isOpen = menuElement.style.height === 'auto'; <p>if (isOpen) { menuElement.style.height = menuElement.scrollHeight + 'px'; // 触发<a style="color:#f60; text-decoration:underline;" title= "重绘"href="https://www.php.cn/zt/70565.html" target="_blank">重绘 setTimeout(() => { menuElement.style.height = '0'; }, 10); } else { menuElement.style.height = '0'; // 强制布局以读取 scrollHeight menuElement.offsetHeight; menuElement.style.height = menuElement.scrollHeight + 'px'; }<p>menuElement.addEventListener('transitionend', () => { if (menuElement.style.height !== '0px') { menuElement.style.height = 'auto'; } }, { once: true }); }</script>这种方法最灵活,适用于内容动态变化的导航菜单,能真正实现基于 height 的流畅动画。
基本上就这些。合理选择 max-height 过渡、@keyframes 关键帧或 JS 动态计算,能让导航菜单的折叠展开既顺滑又可靠。关键是理解 height: auto 不可动画的本质,并用合适方式绕过限制。
以上就是CSS动画如何实现导航菜单折叠展开_height与@keyframes结合应用的详细内容,更多请关注其它相关文章!
# 中非
# 长春影视网站建设
# 金华网站排名推广
# 建设银行网站钓鱼网站
# 网站建设多少钱信息
# 怎么增强网站建设美观性
# 工具网站建设咨询
# 网站建设推广就找p火11星美评
# 锦州seo排名软件哪个好
# 青海旅游网站建设论文
# 淘宝年度搜索关键词排名
# 选择器
# 加载
# 自适应
# 输入框
# css
# 适用于
# 多个
# 如何实现
# 设为
# 表单
# overflow
# 重绘
# css动画
# 响应式设计
# ai
# ssl
# js
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
快手赚钱渠道_快手收益来源
Django表单提交验证失败后保持字段值不刷新
CKEditor 5 自定义构建在React应用中渲染失败的调试与解决
Go语言中Map值调用指针接收器方法的限制与应对
钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析
React项目中导航栏Logo自适应布局:避免裁剪与布局溢出
动漫岛观看全网网 动漫岛在线正版动漫入口
Python实现多节点属性重叠度分析教程
谷歌google账号怎么注册账号 谷歌账号注册官方流程
微博网页版首页入口 微博电脑端官网登录链接
J*aScript中针对特定容器内图片动画的实现教程
微信网页版登录教程_微信网页版登录入口在哪
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
铃兰之剑为这和平的世界希里技能组及加点推荐
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
C++指针和引用有什么区别_C++内存管理核心概念深度解析
文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】
深入理解Google Cloud Datastore查询:祖先路径与数据一致性
必由学官网快捷入口 必由学网页版在线学习平台
Bing引擎入口最新2025 Bing搜索免费官方登录
QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址
Django通过AJAX异步上传图片并保存至模型的完整指南
QQ邮箱正确登录入口_QQ邮箱官方网站使用地址
葱吃多了会怎样 葱吃多了会伤胃吗
Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换
如何在Python中使用Optional类型处理可变对象并避免Pylint警告
c++如何使用Meson构建系统_c++比CMake更快的构建工具
顺丰快件物流信息 官方网站查询入口
《刺客信条:影》PS5 Pro和Switch 2画面对比
蛙漫2台版漫画地址 Manwa2正版网页版链接
qq游戏跨平台入口_qq游戏多设备同步登录
React Router 嵌套组件中 URL 重定向问题的解决方案
MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略
12306选座怎么选到临时改签座_12306改签选座策略与步骤
b站怎么看视频的弹幕数量_b站弹幕数量查看方法
Shopware订单对象中获取产品自定义字段的正确方法
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
Mac怎么查看崩溃日志_Mac控制台错误报告分析
J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析
响应式图片在网页设计中的正确实现方法
steam官方网页快速访问 steam账号注册全流程
在React函数组件中利用原生HTML5进行邮箱地址验证
Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】


2025-12-04
浏览次数:次
返回列表