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

为什么我的JavaScript无法修改CSS实现移动端导航栏按钮切换功能

问题原因

  • CSS选择器语法错误:你写的.ul-navbar [data-visible="true"]中间包含空格,属于后代选择器规则,只会匹配.ul-navbar内部带有data-visible="true"属性的子元素,但你实际是把data-visible属性直接挂载到.ul-navbar元素本身,所以规则无法命中元素。
  • JavaScript属性赋值不严谨:setAttribute第二个参数建议统一传入字符串类型的"true"/"false",避免不同浏览器的类型转换差异。
  • 可选优化:缺少过渡动画、无障碍属性未同步更新。

修复代码

CSS部分

/* p-head */
.primary-header {
  align-items: center;
  justify-content: space-between;
}
/* 全局重置可选,避免ul默认样式影响 */
.ul-navbar {
  margin: 0;
  list-style: none;
  transition: transform 0.3s ease;
}
/* for mobile devices */
@media (max-width: 35em) {
  .ul-navbar {
    position: fixed;
    z-index: 1000;
    inset: 0 0 0 30%;
    flex-direction: column;
    padding: min(30vh, 10rem) 2rem;
    transform: translateX(100%);
  }
  /* 删掉选择器中间的空格,直接匹配带属性的当前元素 */
  .ul-navbar[data-visible="true"] {
    transform: translateX(0%);
  }
  .nav-toggle {
    display: block;
    position: absolute;
    z-index: 9999;
    background: url(amburger.png) no-repeat;
    width: 1rem;
    height: 1rem;
    border: 0;
    background-color: red;
    top: 2rem;
    right: 2rem;
    cursor: pointer;
  }
}

JavaScript部分

const ulNav = document.querySelector(".ul-navbar");
const navButt = document.querySelector(".nav-toggle");

navButt.addEventListener("click", () => {
    const vis = ulNav.getAttribute('data-visible');
    if (vis === "false") {
        ulNav.setAttribute("data-visible", "true");
        navButt.setAttribute("aria-expanded", "true");
    } else {
        ulNav.setAttribute("data-visible", "false");
        navButt.setAttribute("aria-expanded", "false");
    }
});

验证说明

修改完成后在屏幕宽度小于35em(约560px)的视口下点击红色菜单按钮,即可看到侧边导航栏滑入展示,再次点击滑出隐藏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:06:03