Destaque el error de Chrome para aumentar la prioridad del error
Este es un error en Chrome. Agregue una estrella a este problema para aumentar su prioridad a solucionar:
https://bugs.chromium.org/p/chromium/issues/detail?id=375693
Mientras tanto, creé estos tres ejemplos de Code Pen para mostrar cómo solucionar el problema. Se crean utilizando CSS Grid para los ejemplos, pero se pueden usar las mismas técnicas para flexbox.
Usando aria-labelledby en lugar de leyenda
Esta es la forma más adecuada de lidiar con el problema. La desventaja es que tiene que lidiar con la generación de ID únicos aplicados a cada elemento de leyenda falso.
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>
Usando role = "group" y aria-labelledby en lugar de fieldset y legend
Si necesita el contenedor flexible para poder estirarse a la altura de un elemento hermano y luego también pasar ese estiramiento a sus elementos secundarios, deberá usarlo en role="group"
lugar de<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>
Crear una leyenda duplicada falsa para propósitos de estilo
Esta es una forma mucho más hacky de hacerlo. Todavía es igual de accesible, pero no tiene que lidiar con ID cuando lo hace de esta manera. El principal inconveniente es que habrá contenido duplicado entre el elemento de leyenda real y el elemento de leyenda falso.
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>
La leyenda DEBE ser un descendiente directo
Cuando intente solucionarlo usted mismo por primera vez, probablemente intente hacerlo:
<!-- DO NOT DO THIS! -->
<fieldset>
<div class="flex-container">
<legend class="flex-child">
Broken semantics legend text
</legend>
...
</div>
</fieldset>
Descubrirá que funciona, y luego probablemente continuará sin pensarlo dos veces.
El problema es que poner un contenedor div entre el conjunto de campos y la leyenda rompe la relación entre los dos elementos. Esto rompe la semántica del conjunto de campos / leyenda.
Entonces, al hacer esto, has derrotado el propósito de usar el conjunto de campos / leyenda en primer lugar.
Además, no tiene mucho sentido usar un conjunto de campos si no le da una leyenda a ese conjunto de campos.