You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为响应式导航栏添加展开过渡效果并将菜单图标切换为X

问题1:导航展开过渡失效原因&修复

过渡不生效是因为你用display: none / display: flex切换元素显隐,CSS transition不支持display属性的过渡。你不需要单独控制每个nav-item的显隐,改为控制父级ul.nav-ul的高度实现整体过渡即可:

CSS修改部分:

/* 新增/替换原有对应样式 */
.nav-ul{
  display: flex;
  flex-wrap: wrap;
  list-style: none;
  /* 新增过渡属性 */
  transition: max-height 300ms ease;
  overflow: hidden;
  max-height: 1000px; /* 桌面端设置为足够容纳内容的高度 */
}

/* 删掉原来.nav-item的display:none和.responsive-li相关样式 */
@media screen and (max-width: 890px) {
  .nav-ul {
    max-height: 0; /* 移动端默认收起 */
    width: 100%;
  }
  /* 新增展开状态类 */
  .nav-ul.nav-open {
    max-height: 500px; /* 设置为足够容纳所有导航项的高度即可 */
  }
  /* 剩下的原有移动端样式保留,删掉.nav-item的display:none规则 */
  .nav-item {
    width: 100%;
    flex-direction: column;
    margin: 8px 0; /* 调整适配移动端的间距 */
  }
}

问题2:菜单图标切换失效原因&修复

你之前的代码把切换SVG的逻辑注释了,同时X图标尺寸设为1616太小,和原有4045的汉堡图标尺寸不匹配,所以看不见效果。

JS修改部分:

const menu = document.querySelector('.menu')
const navUl = document.querySelector('.nav-ul')
// 提前存储两个图标内容避免重复拼接字符串
const menuSvg = `<svg xmlns="http://www.w3.org/2000/svg" width="40" height="45" fill="currentColor" class="bi bi-list" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z" />
</svg>`
const closeSvg = `<svg xmlns="http://www.w3.org/2000/svg" width="40" height="45" fill="currentColor" class="bi bi-x" viewBox="0 0 16 16">
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
</svg>`

menu.addEventListener('click', () => {
  const isOpen = navUl.classList.toggle('nav-open')
  // 按状态切换图标
  menu.innerHTML = isOpen ? closeSvg : menuSvg
})

额外HTML修正

你原有HTML里搜索框的<form>标签没有闭合,会导致布局异常,补上闭合标签即可:

<li class="nav-item">
  <form action="">
    <input type="text">
    <button class="btn btn-primary">Search</button>
  </form> <!-- 补上这个闭合标签 -->
</li>

内容的提问来源于stack exchange,提问作者Vansh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:30:03