通过 css `:has()` 选择器,在元素获得键盘焦点时(如 tab 导航)动态显示原本仅靠 `:hover` 触发的隐藏文本,兼顾可访问性与语义化,无需 javascript 即可提升 wcag 合规性。
在构建可访问的卡片组件时,仅依赖 :hover 显示辅助信息(如扩展描述、上下文提示)会遗漏键盘用户和屏幕阅读器使用者——这是常见的无障碍断点。现代 CSS 提供了优雅的纯样式解决方案::has() 关系选择器,它允许我们根据子元素或后代元素的状态(例如 a:focus)向上匹配父容器,并触发对应样式的变更。
以下是以您提供的卡片结构为基础的完整实现方案:
将原本用于视觉隐藏的文本(如 包裹的说明内容)设为 opacity: 0 + transform: translateY(5px) 等过渡友好属性,并利用 :has() 检测卡片内可聚焦元素(如链接 )是否处于 :focus 状态,从而激活显示规则。
/* 隐藏文本默认状态(建议用 class 而非内联 style) */
.suba-priority-card__paragraph span {
opacity: 0;
transform: translateY(5px);
transition: opacity 0.2s ease, transform 0.2s ease;
pointer-events: none; /* 防止干扰焦点流 */
}
/* 当卡片内任意链接获得焦点时,显示其后 sibling 的 span */
.suba-priority-card__body h3:has(a:focus) + .fr-article-card-foxtrot__paragraph span,
.suba-priority-card__body footer:has(a:focus) ~ .fr-article-card-foxtrot__paragraph span {
opacity: 1;
transform: translateY(0);
}? 为什么用 :has()? 它是首个支持“父选择子状态”的原生 CSS 机制,避免了为每个可聚焦元素单独绑定 JS 事件监听器,也规避了 :focus-within 可能误触(如表单控件嵌套)的风险,语义更精准。

The Black & Latino Employee Network for Diversity at xxxx(BLENDS) mission is to empower Black
and Latino employees by creating professional development programs...
用 :has() 实现“焦点即显示”,是当前最简洁、语义清晰且符合 Web 标准的无障碍增强方式。它让键盘用户与鼠标用户获得一致的信息层级体验,同时保持代码轻量、维护成本低。只要确保隐藏内容不承载关键交互语义,并辅以适当的 ARIA 属性,即可满足 WCAG 2.1 AA 级别中关于“键盘可操作性”与“信息可感知性”的核心要求。