答案:通过CSS的max-height与overflow:hidden配合transition实现折叠菜单动画,避免height:auto无法过渡的问题,利用J*aScript切换类控制状态,适用于导航、FAQ等场景,需注意max-height取值合理及溢出隐藏。

在CSS初级项目中,实现一个简单的折叠菜单可以通过 transition 和 max-height 配合来完成。这种方法不需要J*aScript控制高度动画(虽然JS可用于切换类),仅用CSS就能做出平滑的展开与收起效果。
直接使用 height: 0 到 height: auto 无法触发CSS过渡动画,因为 auto 不是一个具体数值,浏览器无法计算中间过程。而 max-height 可以设置一个足够大的值(如 0 到 500px),从而让 transition 生效。
关键点:
一个简单的按钮 + 内容区域结构:
<div class="menu-item">
<button class="menu-toggle">点击展开菜单</button>
<div class="menu-content">
<p>这里是折叠菜单中的内容</p>
<p>可以是链接、列表或其他元素</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/1100">
<img src="https://img.php.cn/upload/ai_manual/000/000/000/175680092492385.png" alt="来画数字人|直播|">
</a>
<div class="aritcle_card_info">
<a href="/ai/1100">来画数字人|直播|</a>
<p>来画数字人自动化|直播|,无需请真人主播,即可实现24小时|直播|,无缝衔接各大|直播|平台。</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="来画数字人|直播|"&
gt;
<span>57</span>
</div>
</div>
<a href="/ai/1100" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="来画数字人|直播|">
</a>
</div>
</div>
</div>核心样式如下:
.menu-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease;
}
<p>.menu-item.active .menu-content {
max-height: 500px; /<em> 足够容纳内容的高度 </em>/
transition: max-height 0.3s ease;
}这里利用了父元素 .menu-item 是否有 active 类来控制子元素的显示状态。
添加简单脚本实现点击切换:
document.querySelector('.menu-toggle').addEventListener('click', function() {
document.querySelector('.menu-item').classList.toggle('active');
});点击按钮时,给外层 div 切换 active 类,从而触发动画。
max-height 值,太大可能动画时间过长,太小会截断内容opacity 或 transform 增强视觉效果基本上就这些。不复杂但容易忽略细节,比如忘记 overflow: hidden 就会导致内容溢出可见。掌握这个技巧后,你可以轻松在导航、FAQ、下拉面板等场景中使用。
以上就是如何在CSS初级项目中实现折叠菜单_transition和max-height隐藏显示的详细内容,更多请关注其它相关文章!
相关文章:
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
自定义Bag-of-Words实现:处理带负号的词汇权重
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
2026春节假期时间安排 2026春节假日查询
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议
Pandas DataFrame:高效添加条件计算列
必由学官方登录入口 必由学教师学生账号快速访问
期待已久:小米17 Ultra、小米首款NAS本月登场
qq游戏网页版直接玩_qq游戏免下载快速入口
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
深入理解Go语言中的指针类型:以*string为例
J*a应用集成GitHub CLI与API认证指南
Yii2模块参数配置指南:正确声明与访问模块级配置
在Socket.IO连接中实现Access Token自动更新与动态重连
如何使用纯J*aScript判断Input元素是否在特定类容器内
html5 app怎么运行环境_配html5 app运行环境【教程】
Golang并发任务中错误如何聚合_Golang goroutine error收集方式
QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台
KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程
痛风发作了怎么办? 快速止痛和后期饮食调理
J*aScript 字符串标签转换:使用正则表达式高效替换
CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整
QQ邮箱正确登录入口_QQ邮箱官方网站使用地址
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
高德地图沿途添加点失败如何解决 高德多点规划方法
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
Go语言:非阻塞式判断标准输入(os.Stdin)是否有数据
将PCM16音频数据转换为W*并编码为Base64教程
海棠账号登录入口_登录海棠账户同步阅读记录
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
win11跳过OOBE三种方法 Win11跳过OOBE设置步骤
c++中为什么推荐使用using替代typedef_c++现代化类型别名
必由学官网首页入口 必由学教师网页版登录指南
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】
在PHP脚本中通过SSHFS挂载远程文件系统的最佳实践与常见问题解决
如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit
韩小圈电脑版在线入口_网页版免费登录地址
大麦的“候补”是什么意思 大麦候补购票规则【详解】
J*a应用程序首次运行自动创建文件与目录的最佳实践
我的世界官方游戏入口 我的世界官网平台直达链接
FullCalendar 自定义按钮样式定制指南
在python-socketio事件处理器中安全访问Flask应用上下文