新闻中心

如何用css animation制作折叠菜单展开动画

2025-10-09
浏览次数:
返回列表
用CSS animation实现折叠菜单动画需通过max-height和opacity变化配合keyframes,结合JS控制类名切换状态。首先设置.menu-list默认max-height:0并隐藏溢出,定义expand和collapse两个关键帧动画分别处理展开与收起的过渡效果,其中expand从max-height:0到500px并增加透明度,collapse反之。当点击按钮时,J*aScript为.menu-list添加或移除expanded类,触发动画。为适应不同内容高度,可将max-height设为较大值如999px以兼容动态项数,同时确保overflow:hidden防止内容溢出。最终通过animation的forwards保持动画结束后的状态,实现平滑展开收起效果。

如何用css animation制作折叠菜单展开动画

制作折叠菜单的展开动画,关键在于用 CSS 控制高度变化并配合 transition 或 animation 实现平滑效果。虽然使用 transition 更常见也更简单,但如果你希望用 CSS animation 来实现,下面是一个实用方案。

1. 基本结构:HTML 搭建菜单

先写一个简单的折叠菜单结构:

<div class="menu">
  <button class="menu-toggle">展开/收起</button>
  <ul class="menu-list">
    <li>菜单项 1</li>
    <li>菜单项 2</li>
    <li>菜单项 3</li>
  </ul>
</div>

2. 使用 CSS animation 控制展开与收起

CSS 动画不能直接对 height: auto 做动画,所以需要设定一个最大高度(max-height),通过改变 max-height 触发动画。

定义两个状态的 animation:

  • 展开时:从 max-height: 0 到一个足够大的值(如 500px)
  • 收起时:反向动画

.menu-list {
  max-height: 0;
  overflow: hidden;
  background: #f0f0f0;
  list-style: none;
  padding: 0;
  margin: 0;
  animation: collapse 0s forwards; /* 默认收起 */
}
<p>/<em> 展开动画 </em>/
@keyframes expand {
from { max-height: 0; opacity: 0; }
to { max-height: 500px; opacity: 1; }
}</p><p>/<em> 收起动画 </em>/
@keyframes collapse {
from { max-height: 500px; opacity: 1; }
to { max-height: 0; opacity: 0; }
}</p><p>/<em> 当添加展开类时触发展开动画 </em>/
.menu-list.expanded {
animation: expand 0.3s ease-in-out forwards;
}</p>

3. 用 J*aScript 切换类名控制动画

通过 JS 添加或移除 expanded 类来触发动画:

青泥AI 青泥AI

青泥学术AI写作辅助平台

青泥AI 360 查看详情 青泥AI
document.querySelector('.menu-toggle').addEventListener('click', function() {
  const list = document.querySelector('.menu-list');
  if (list.classList.contains('expanded')) {
    list.classList.remove('expanded');
  } else {
    list.classList.add('expanded');
  }
});

点击按钮时,.expanded 类被添加,触发 expand 动画;再次点击则移除类,回到 collapse 状态。

4. 可选优化:避免 max-height 固定值问题

如果菜单项数量不确定,固定 max-height 可能不够灵活。可以结合 JS 动态设置:

  • 在 JS 中计算实际高度
  • 将 max-height 设为实际高度 + 动画时间

但若追求简洁,设一个较大的 max-height(如 999px)也能满足大多数场景,只要 overflow: hidden 能隐藏超出部分即可。

基本上就这些。用 CSS animation 做折叠菜单的核心是借助 max-height 和 opacity 配合 keyframes 实现视觉上的展开收起效果,再通过 JS 控制类名切换动画状态。不复杂但容易忽略细节,比如忘记 overflow: hiddenforwards 保留最终状态。

以上就是如何用css animation制作折叠菜单展开动画的详细内容,更多请关注其它相关文章!


# css  # 医疗网站建设好么  # 搜索关键词排名咨询g火14星  # 项目推广网站建设流程表  # 优秀seo  # 沈阳正规seo优化厂家  # 推广流量卡网站是什么  # 也能  # 选择器  # 如果你  # 是一个  # 背景色  # 设为  # 移除  # 如何用  # 菜单项  # 如何实现  # overflow  # ai  # ssl  # js  # html  # java  # javascript  # 折叠菜单  # 专业微信网站建设价格  # 神农架林区整合营销推广  # 安宁视频营销推广怎么做  # 合肥企业营销推广找哪家 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: mc.js免安装版 mc.js一键畅玩入口  韩剧圈正版入口页面_韩剧圈官网登录链接  限制HTML日期输入框的日期选择范围  支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  优化Log4j2控制台输出性能:解决异步日志瓶颈  邮政快递包裹最新位置 邮政快递实时追踪入口  Android Studio计算器C键功能异常排查与修复教程  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  服务端验证_j*ascript输入检查  C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图  Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】  抖音从哪里进入网页版_抖音官方入口链接  QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  解决Python logging 中 datefmt 导致时间戳固定不变的问题  Selenium Python中处理点击后新窗口加载冻结问题的策略与实践  将HTML动态表格多行数据保存到Google Sheet的教程  126邮箱账号注册 电脑版登录入口  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  微信网页版官方快速登录入口 微信网页版网页版账号直达  LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读  Lar*el Form Request中唯一性验证在更新操作中的正确实现  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】  Python getattr() 异常处理深度解析:避免程序意外退出  《主播少女的秘密账号迷宫》首支宣传片  Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】  html5 app怎么运行环境_配html5 app运行环境【教程】  J*aScript Promise链中如何正确终止后续.then执行并处理错误  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  响应式容器内容自动缩放与宽高比维持教程  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  Composer中的^和~符号代表什么_精通Composer版本号语义化约束  Golang指针如何与map组合使用_Golang map指针组合实践  Win11怎么关闭快速启动_Win11彻底关机设置教程  Go语言中JSON数据解析与字段访问教程  极兔快递快件信息查询系统 极兔快递官网运单号追踪  《噬血代码2》新预告片发布 展示游戏剧情  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录  c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学  PHP中高效并行检查多链接状态的教程  Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  如何提高微信支付的安全性_微信支付安全防护与设置建议  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId 

搜索