2、将.dropdown-menu初始设为display: none;同时设置.dropdown:hover .dropdown-menu或.dropdown:focus-within .dropdown-menu为display: block。
)设置padding、background-color和hover背景变化,增强可操作反馈。
5、在
三、使
用
该方法提供最大灵活性,支持点击收放、外部关闭、键盘导航(如Esc键)、焦点管理等完整交互逻辑。
1、为按钮添加data-dropdown-target属性,其值为对应下拉容器的ID,例如data-dropdown-target="menu1"。
2、为下拉容器(如
)设置初始class="dropdown-menu hidden",其中.hidden定义为display: none。
3、编写JavaScript监听按钮click事件,获取target ID,查找对应容器,移除.hidden并添加.active,同时为按钮设置aria-expanded="true"。
4、添加document点击监听器,判断点击是否发生在按钮或下拉区域内,若非则为所有.dropdown-menu添加.hidden并重置aria-expanded为false。
5、绑定keydown事件监听:当焦点在按钮上时按Space或Enter键触发下拉;当焦点在下拉内且按下Esc时收起菜单,并将焦点返回按钮。
四、使用与ARIA规范构建可访问下拉
该方案严格遵循WAI-ARIA 1.2菜单模式,适用于需满足WCAG 2.1 AA级可访问性要求的生产环境。
1、按钮设置role="menuitem"、aria-haspopup="menu"、aria-expanded="false",并赋予唯一id。
2、下拉容器使用role="menu",设置aria-labelledby属性指向按钮id,确保屏幕阅读器正确关联。
3、菜单内每个选项使用role="menuitem",禁用tabindex,改用arrow键导航逻辑,且首个选项默认获得程序化焦点。
4、JavaScript中实现up/down arrow键循环导航,Home/End键跳转首尾,Enter/Space执行选中,Esc关闭菜单并恢复按钮焦点。
5、每次菜单状态变更时,同步更新aria-expanded属性与按钮的视觉样式(如旋转箭头图标),确保视觉反馈与ARIA状态严格一致。