多级菜单HTML结构必须用包裹,子菜单严格嵌套为的直接子,禁用隔断;须用:focus-within实现无障碍展开,多列用column-count+float:left布局。

多级菜单的HTML结构必须语义清晰, 和
嵌套不能乱
浏览器和屏幕阅读器依赖语义化标签识别导航层级。错误写法比如把二级菜单直接塞进 正确结构应严格嵌套: 纯 关键写法: 当二级菜单有 15+ 个项、内容高度不一(如带图标+多行文字),Flexbox 的 实现 Markdown↔ HTML 互转,支持导出 PDF,用于用户请求的文档格式转换。 真正适配“报纸式垂直流”的方案是: 后台系统常见「左侧菜单固定 + 主内容区滚动」布局。若只给菜单加
真实项目里最容易被忽略的,是 并列,会导致键盘焦点跳转异常、无障碍支持失效,且后续CSS控制子菜单显隐会更难。<nav role="navigation"><ul class="menu-level-1">
<li><a href="#">首页</a></li>
<li>
<a href="#">产品</a>
<ul class="menu-level-2">
<li><a href="/prod/a">A系列</a></li>
<li><a href="/prod/b">B系列</a></li>
</ul>
</li>
</ul></nav>
role="navigation" 是辅助技术识别关键导航区域的必要属性 必须是上层 的直接子元素,不可跨级或并列 内混用 :hover / :focus-within 的触发链
:focus-within 是现代多级菜单展开的核心,别再只靠 :hover
:hover 在触屏设备(包括平板、折叠屏、Win10/11触控模式)下完全失效;而 JavaScript 控制又容易引入焦点管理漏洞。CSS 的 :focus-within 提供了零 JS、可访问、响应式的展开逻辑。.menu-level-1 li:focus-within > .menu-level-2 {
opacity: 1;
visibility: visible;
transform: scaleY(1);
}
获得焦点(例如 Tab 进入链接后按 → 键,或点击触发),其内部任意可聚焦元素(如 )激活 :focus-within
visibility: hidden + transform: scaleY(0) 做初始隐藏,仅用 display: none 会让 :focus-within 失效:focus-within 支持良好(iOS 15.4+),但旧 Android WebView 需降级为 JS 监听 click + focus
多列子菜单不用 Flexbox,改用
column-count + float: left
flex-wrap: wrap 会水平铺满再换行,导致列高严重不均、底部留白难看。这不是 bug,是 Flexbox 的设计逻辑使然。
.menu-level-2 {
column-count: 3;
column-gap: 1.5rem;
}
.menu-level-2 li {
break-inside: avoid;
float: left;
width: 100%;
}
column-count 让浏览器自动把 按内容长度垂直切分到指定列数,视觉对齐自然float: left 确保每个 在列内顶部对齐,避免因高度差异造成列间错位break-inside: avoid 防止单个 被强行拆到两列,破坏语义完整性column-count,若需兼容 IE11,必须回退到 JS 分组 + 多个 并列固定定位菜单要防滚动穿透,
position: fixed 必须配 top: 0 和 z-index
position: fixed,但没设 top: 0,它可能随文档流偏移;若 z-index 不够高,会被弹窗、图表组件遮挡;更隐蔽的问题是:滚动主内容时,菜单下的背景会“透出”,尤其在 macOS Safari 中明显。
top: 0(或 bottom: 0)+ left: 0(或 right: 0),否则定位基准不可控z-index 建议 ≥ 1000,且确保所有同级覆盖层(如 .modal, .tooltip)的 z-index 明确高于它transform: translateZ(0) 或 will-change: transform 可强制创建独立图层,彻底解决:focus-within 和 column-count 的组合使用——它们不冲突,但需要同时满足「语义结构正确」「初始状态用 visibility 控制」「浮动子项宽度设为 100%」这三个条件,缺一就会导致菜单要么不展开,要么列错乱。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










