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

侧边导航ul宽度为0%时导航链接不隐藏的问题求解

问题根因

  • JS 中使用 document.querySelector(".links-one") 仅会匹配第一个符合条件的链接元素(也就是Home链接),所以你修改display属性时只有第一个链接生效,其余链接状态不变。
  • 你的ul选择器存在拼写错误:document.querySelector("ul-one") 漏掉了类选择器的.,正确写法应为.ul-one。
  • 导航关闭时链接仍溢出显示,是因为ul设置宽度为0时没有添加overflow: hidden属性,子元素内容会超出容器边界展示。

修复方案

1. 修改CSS,新增溢出隐藏规则

给ul容器加overflow: hidden,容器宽度为0时自动隐藏内部内容,从根源解决链接溢出问题:

nav .ul-one {
  position: absolute;
  right: 0;
  top: 90px;
  background-color: #111;
  width: 0;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  align-items: center;
  transition: 0.5s ease-in-out;
  overflow: hidden; /* 新增这一行 */
}

2. 优化JS逻辑

加了overflow: hidden之后,你完全不需要单独控制每个链接的显隐,直接修改ul的宽度即可,代码可以简化为:

function nav () {
    const burger = document.querySelector(".burger");
    const ul = document.querySelector(".ul-one");
    let openNav = false;
    burger.addEventListener("click", ()  =>  {
        if (!openNav) {
            ul.style.width = "40%";
            openNav = true;
        } else {
            ul.style.width = "0";
            openNav = false;
        }
    });
}
nav();

如果你确实需要单独控制链接的显隐,就用querySelectorAll选中所有链接遍历修改:

function nav () {
    const burger = document.querySelector(".burger");
    const ul = document.querySelector(".ul-one");
    const links = document.querySelectorAll(".links-one"); // 选中所有链接
    let openNav = false;
    burger.addEventListener("click", ()  =>  {
        if (!openNav) {
            ul.style.width = "40%";
            links.forEach(link => link.style.display = "block");
            openNav = true;
        } else {
            ul.style.width = "0";
            links.forEach(link => link.style.display = "none");
            openNav = false;
        }
    });
}
nav();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:06:03