请加注Chrome错误以提高错误优先级
这是Chrome中的错误。请在此问题上加一个星号,以增加其优先级:https:
//bugs.chromium.org/p/chromium/issues/detail?id = 375693
同时,我创建了这三个Code Pen示例,以展示如何解决此问题。对于示例,它们使用CSS Grid构建,但是可以将相同的技术用于flexbox。
使用aria-labelledby而不是图例
这是处理问题的更合适的方法。缺点是您必须处理生成应用于每个假图例元素的唯一ID。
https://codepen.io/daniel-tonon/pen/vaaGzZ
<style>
.flex-container {
display: flex;
}
</style>
<fieldset aria-labelledby="fake-legend">
<div class="flex-container">
<div class="flex-child" id="fake-legend">
I am as good accessibilty wise as a real legend
</div>
...
</div>
</fieldset>
使用role =“ group”和aria-labelledby代替字段集和图例
如果您需要flex容器能够拉伸到同级元素的高度,然后又将该拉伸传递到其子元素上,则需要使用role="group"
而不是<fieldset>
https://codepen.io/daniel-tonon/pen/BayRjGz
<style>
.flex-container {
display: flex;
}
</style>
<div role="group" class="flex-container" aria-labelledby="fake-legend">
<div class="flex-child" id="fake-legend">
I am as good accessibilty wise as a real legend
</div>
...
</div>
创建用于样式目的的伪造重复图例
这是一种更简单的方法。它仍然可以访问,但是用这种方法不必处理ID。主要的缺点是,真实图例元素和假图例元素之间将有重复的内容。
https://codepen.io/daniel-tonon/pen/zLLqjY
<style>
.screen-reader-only {
position: absolute;
opacity: 0;
pointer-events: none;
}
.flex-container {
display: flex;
}
</style>
<fieldset>
<legend class="screen-reader-only">
I am a real screen-reader accessible legend element
</legend>
<div class="flex-container">
<div class="flex-child" aria-hidden="true">
I am a fake legend purely for styling purposes
</div>
...
</div>
</fieldset>
图例必须是直接下属
当您首次尝试自己修复此问题时,您可能会尝试执行以下操作:
<!-- DO NOT DO THIS! -->
<fieldset>
<div class="flex-container">
<legend class="flex-child">
Broken semantics legend text
</legend>
...
</div>
</fieldset>
您会发现它起作用,然后您可能会继续前进而无需再三思。
问题在于,在字段集和图例之间放置div包装器会破坏两个元素之间的关系。这破坏了字段集/传奇的语义。
因此,这样做首先就使您无法使用字段集/图例的整个目的。
另外,如果不给该字段集一个图例,那么使用该字段集也没有多大意义。