应使用而非包裹菜单侧边栏,因其明确语义且支持无障碍访问;需设置min-height:44px和display:block确保触控区域;用transform替代display:none实现平滑展开;JS中须调用e.stopPropagation()防止事件冒泡;禁用:hover依赖以保障多端兼容。

用 而不是 包裹菜单侧边栏本质是导航区域, 告诉浏览器和读屏器“这里有跳转链接”, 则被忽略。不换标签,后续所有样式和 JS 都可能白做。常见错误:
- 写成
→ 键盘 Tab 会跳过整个区块
- 没加
aria-label → 屏幕阅读器只读“导航”,不知道是“主菜单”还是“用户设置”
正确写法:
给每个可点击项设足额触摸区域:min-height: 44px + display: block
移动端点不中,90% 是因为 默认是 inline 元素,真实点击高度远低于视觉所见。不能只靠 padding,必须从布局层锁定响应区。
关键配置:
a, button { display: block; min-height: 44px; padding: 12px 16px; }
- 禁用
line-height ,否则文字被截或点击区压缩
- 父容器若设了
font-size: 0(常见于图标对齐),子元素必须重置 font-size,否则 em-单位的 padding 归零
控制展开/收起别用 display: none,改用 transform: translateX()
display: none 会让元素彻底退出渲染流,无法参与 CSS 过渡动画,且键盘焦点直接丢失。滑动菜单必须保持 DOM 存在、仅改变位置。
推荐方案:
- 默认隐藏:
.sidebar { transform: translateX(-100%); }
- 展开状态:
.sidebar.is-open { transform: translateX(0); }
- 动画必须写全:
transition: transform 0.3s ease-in-out;(漏掉 ease-in-out 会生硬)
- 避免用
left 或 margin-left → 触发重排,低端安卓机明显卡顿
JS 绑定事件时,必须处理 event.stopPropagation()
点击菜单项却触发了全局“点击外部关闭”,这是冒泡没截断的典型表现。尤其当侧边栏带遮罩层(
侧边栏本质是导航区域, 常见错误: 正确写法: 移动端点不中,90% 是因为 关键配置: 推荐方案: 点击菜单项却触发了全局“点击外部关闭”,这是冒泡没截断的典型表现。尤其当侧边栏带遮罩层( 告诉浏览器和读屏器“这里有跳转链接”,
→ 键盘 Tab 会跳过整个区块aria-label → 屏幕阅读器只读“导航”,不知道是“主菜单”还是“用户设置”给每个可点击项设足额触摸区域:
min-height: 44px + display: block
默认是 inline 元素,真实点击高度远低于视觉所见。不能只靠 padding,必须从布局层锁定响应区。
a, button { display: block; min-height: 44px; padding: 12px 16px; }line-height ,否则文字被截或点击区压缩
font-size: 0(常见于图标对齐),子元素必须重置 font-size,否则 em-单位的 padding 归零控制展开/收起别用
display: none,改用 transform: translateX()
display: none 会让元素彻底退出渲染流,无法参与 CSS 过渡动画,且键盘焦点直接丢失。滑动菜单必须保持 DOM 存在、仅改变位置。
.sidebar { transform: translateX(-100%); }
.sidebar.is-open { transform: translateX(0); }
transition: transform 0.3s ease-in-out;(漏掉 ease-in-out 会生硬)left 或 margin-left → 触发重排,低端安卓机明显卡顿JS 绑定事件时,必须处理
event.stopPropagation()
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











