只按 320px 宽度测回流,只测了一半:400% 放大后的 200px 高度
把 WCAG 1.4.10 回流放在 320x844、320x256、320x200 三个条件下同时测量。横向判定三个条件一个像素都不差,400% 放大真正改变的是高度:82px 的 sticky 头部占掉了视口的 41%,正文可见区域最后只剩下不到六成,文末附上可复现的测量脚本与三档高度的完整数据。
archive
356 · 第 3
把 WCAG 1.4.10 回流放在 320x844、320x256、320x200 三个条件下同时测量。横向判定三个条件一个像素都不差,400% 放大真正改变的是高度:82px 的 sticky 头部占掉了视口的 41%,正文可见区域最后只剩下不到六成,文末附上可复现的测量脚本与三档高度的完整数据。
我从自己站点的构建产物里取出 69 句话,做成文本片段链接,在 Chromium 里逐条点开记录落点。48 句散文全部到达,15 段代码里有 14 段断在半路。本文用实测把块边界和词边界的规则讲清楚。
axe-core 给 WCAG 1.4.12 判了零违规。可当我真的把这条标准要求的四个值加上去,570 个元素的文字被切断了。这篇把四条声明拆开逐个测,看谁才是丢内容的那一个。
W3C ACT 公开了 1,213 个带人工标注的测试用例。把 axe-core 全量跑一遍,387 个「应该失败」的用例里只有 145 个(37.5%)报出了对应成功标准的违规,36 条标准中有 22 条挂零,而这些沉默里有一部分只是规则默认没开。
同样六个页面,用 Tab 往下走测出 WCAG 2.4.11 违规 0 条,用 Shift+Tab 往上走测出 16 条。原因在于浏览器把焦点目标滚进视口时,对齐方式取决于你从哪个方向来。一行 CSS 把 16 条降到 0 条的实测记录。测的方向一换,结果就跟着换,这不是偶然误差,而是对齐规则本身。
给去年写的文章发了个 curl,Last-Modified 显示的却是昨天的部署时间。拆开 ETag 一看,就是文件修改时间和大小拼成的十六进制。同一份源码重新构建出的 1,346 个 HTML 完全字节一致,可一次部署就让整站的条件请求全部落空,本该拿到的 304 再也换不回来。文中给出实测过程与几种可行的缓解方案。
W3C 于 7 月 23 日以 Group Note 形式发布 WCAG-EM 2.0。我照着文档的抽样流程挑出 26 个页面,又把同一次构建的 1,342 个页面全部用 axe-core 扫了一遍做对照。抽样只抓到 4 类违规中的 1 类,而随机样本给出新发现的概率只有 0.29%,几乎等于没有。
一篇文章的标题会在 title、h1、og:title、headline、RSS 等六处被声明,1,296 篇全部一致。真正出问题的是第七处:指向文章的 18,296 条内部链接里,锚文本与目标标题完全一致的只有 0.7%,根源是包住整张卡片的那一个 a 标签。本文给出七个渠道的实测数据与可照做的修复路径。
本来是为测量链接文本的无障碍指标写的脚本,结果挖出一个URL缺陷。对构建产物中1,334个HTML页面的内部链接做全量扫描,超过一半的24,948条指向不带尾部斜杠的地址,也就是要走一次301跳转。本文记录成因、四个阶段的修复,以及把它清到零的过程。
每篇文章都挂着中位数8条内链,我以为内链已经够了。对1,330个构建产物页做广度优先遍历后,1,288篇文章中有1,276篇位于深度2。可是一旦把四个语言的列表页从链接图里拿掉,296篇从首页再也走不到。相关文章模块再多,也替代不了四个语言列表页这个入口。从首页出发时,四个列表页才是通往深度2的门。
把同一张营业时间表用四种标记方式写出来,分别过 axe-core 和五个抽取器。axe 对四种都给出零违规,可一旦把 HTML 还原成 Markdown 或纯文本,其中三种只能复原 0/7 行。role="table" 到底在哪一层帮不上忙,这里用实测日志说清楚。
用 Speculation Rules 预渲染后,LCP 原始值会把整段等待都算进去。我在 Chrome 150 上实测了 6244ms 与 103.5ms 的落差,并梳理出所有需要校正的位置。