pa11y-ci标题层级嵌套合规性问题处理及浏览器过时检测方法咨询
pa11y-ci标题层级嵌套合规性问题处理及浏览器过时检测方法咨询
嘿,我来帮你拆解这两个问题,一步步解决哈!
首先说pa11y-ci的规则忽略/降级问题:你说ignore: ["WCAG2AAA.Principle1.Guideline1_3.1_3_1.G141"]没生效,大概率是配置格式或者规则ID的问题。你可以试试这几个方向:
- 检查你的pa11y-ci配置文件(一般是
.pa11yci)的结构,确保ignore是放在defaults或者对应测试URL的配置里,比如正确的JSON格式应该是这样:{ "defaults": { "ignore": ["WCAG2AAA.Principle1.Guideline1_3.1_3_1.G141"] }, "urls": ["https://你的页面地址"] } - 如果还是不行,先单独用pa11y命令行扫你的页面,看看错误提示里的准确规则ID是什么——有时候规则ID可能和你记的有出入,比如用
pa11y https://你的页面地址运行,输出的错误里会明确标出错处对应的规则ID,照着填就行。 - 要是想把这个错误转成警告不阻断CI,那不用
ignore,改用warn数组就行,配置和上面类似,把规则ID放进warn里,这样pa11y-ci只会把它当成警告提示,不会让CI失败。
然后是浏览器过时提示的处理,既要解决标题层级问题,又要保证检测逻辑合理:
关于标题层级的无障碍优化
那个h3放在h1前面确实会破坏页面的标题逻辑,毕竟页面的主标题应该是第一个层级最高的标题。你可以这么改:
- 把提示里的
<h3 class="fr-alert__title">改成<p class="fr-alert__title">,然后用CSS把这个p元素样式改成原来h3的样子(比如字体大小、加粗)——这样既不影响视觉效果,又不会打乱标题层级的逻辑。 - 顺便给这个提示框加个
role="alert",这样屏幕阅读器会自动优先读取这个错误提示,提升无障碍体验,修改后的代码大概是:<div id="nav_obselete" class="d-none fr-alert fr-alert--error" role="alert"> <p class="fr-alert__title" style="font-size: 1.25rem; font-weight: 700;">Erreur : Navigateur obsolète</p> <p>Lorem</p> </div>
关于浏览器过时的检测方法
比起单纯检测User Agent(UA),更靠谱的是特性检测——因为很多浏览器会伪装UA,而且特性检测能直接判断浏览器是否支持你的网站需要的核心功能。举个简单例子:
// 检测是否支持ES6箭头函数(代表基础现代JS支持) try { new Function('() => {}'); } catch (e) { // 不支持的话就显示过时提示 document.getElementById('nav_obselete').classList.remove('d-none'); }
你也可以检测更具体的特性,比如CSS变量、Grid布局、Promise API这些,只要是你的网站依赖的核心特性,检测不通过就提示浏览器过时,这样比UA检测更准确,也能覆盖更多小众过时浏览器。
备注:内容来源于stack exchange,提问作者Adrien
相关产品推荐
相关产品推荐

