tabindex 是控制元素键盘聚焦能力及顺序的属性;设为 1 会打乱 DOM 顺序导致可访问性问题,应优先用 0 或省略;含可聚焦子元素的父容器无需额外设置;禁用聚焦应通过 CSS/HTML 实现而非 tabindex="-1"。
tabindex 是什么,为什么不能只设成 1
它不是“翻页开关”,而是告诉浏览器这个元素能不能被键盘聚焦、以什么顺序聚焦。
值为
表示按 DOM 顺序自然加入 Tab 流;正数(如
、
)会强行插队,打乱默认逻辑,容易让屏幕阅读器用户迷失。
常见错误现象:
写了一堆按钮,结果按 Tab 键跳转顺序和页面视觉流完全不一致,甚至跳到页脚再跳回头部。
所有需要键盘翻页的容器(比如图片画廊、文章分页栏)应统一用
如果容器内已有可聚焦子元素(如
、
),父容器不需要额外加
,否则会重复聚焦
绝对不要用
来“禁用”翻页——它只是让元素不可通过 Tab 进入,但 JS 仍可通过
聚焦,反而造成行为不一致
监听键盘事件时,keydown 还是 keyup?该过滤哪些键
用
,因为它是按键按下即触发,响应更快;
有延迟,连续按方向键时容易漏掉一次翻页。
必须过滤掉组合键和非意图操作:比如用户按
切换浏览器标签,或
聚焦地址栏,这些都不该触发你的翻页逻辑。
立即学习
“
前端免费学习笔记(深入)
”;
检查
、
、
是否为
,是则直接
只响应
/
(左右翻页)、
/
(整屏翻页),避免监听
或
—— 它们语义属于“确认”或“展开”,不是导航
移动端没有物理方向键,所以纯键盘翻页逻辑默认不生效;别试图用
模拟,那不属于“键盘翻页”范畴
focus() 后滚动不到可视区?scrollIntoView 的坑
调用
不会自动滚动,尤其当元素在折叠区域、
容器里,或被 sticky 导航栏遮挡时,焦点进了但看不见。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
看似能解,但它默认行为在不同浏览器差异大:Chrome 可能滚顶部,Safari 滚中间,Firefox 滚底部;而且它会触发全局滚动,打断用户正在做的操作。
优先用
,避免强制对齐顶部/底部
加个节流判断:只有当元素
小于 0 或大于
时才滚动
如果父容器设置了
,得对那个容器调用
,而不是目标元素本身——否则滚动的是整个页面,不是局部区域
键盘翻页和 ARIA 属性怎么配合才不算画蛇添足
加了
或
不代表可访问性就达标;乱加反而干扰屏幕阅读器。核心原则是:只声明“变化”,不重复“结构”。
常见错误现象:给每张图片都加
,结果朗读两次“第3页”,一次来自
,一次来自实际文本内容。
翻页动作发生后,用
的
tabindex012tabindex="1"tabindex="0"tabindextabindex="-1".focus()keydownkeyupCtrl+TabAlt+Devent.ctrlKeyevent.altKeyevent.metaKeytruereturnArrowLeftArrowRightPageUpPageDownEnterSpacetouchstartelement.focus()overflow: hiddenscrollIntoView()element.scrollIntoView({ block: 'nearest', inline: 'nearest' })getBoundingClientRect().topwindow.innerHeightoverflow: autoscrollIntoView()aria-livearia-labelaria-label="第3页,标题是xxx"aria-labelaria-live="polite"
动态更新当前页码,比如 “已切换到第5页,共12页”
翻页按钮本身用
aria-current="true"
标记当前激活项(仅限按钮组场景),不要用在内容区
禁止给翻页容器加
role="application"
—— 它会关闭屏幕阅读器的标准导航模式,把键盘翻页变成“应用专属操作”,普通用户根本不知道怎么用
最常被忽略的一点:键盘翻页必须和鼠标点击行为完全同步——不只是视觉反馈一致,还要确保同一套数据状态、URL 参数(如
?page=3
)、历史记录(
history.pushState
)全部对齐。否则用户按完右箭头,再点浏览器后退,页面状态就错乱了。
