Позначте помилку Chrome, щоб збільшити пріоритет помилки
Це помилка в Chrome. Додайте до цього питання зірку, щоб збільшити пріоритет:
https://bugs.chromium.org/p/chromium/isissue/detail?id=375693
Тим часом я створив ці три приклади Code Pen, щоб показати, як вирішити проблему. Вони побудовані за допомогою CSS Grid для прикладів, але ті ж самі методи можна використовувати і для flexbox.
Використання aria-labelledby замість легенди
Це більш простірний спосіб вирішення проблеми. Мінус у тому, що вам доведеться мати справу з створенням унікальних ідентифікаторів, застосованих до кожного елемента підробленої легенди.
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 замість набору полей та легенди
Якщо вам потрібен флекс-контейнер, щоб можна було розтягнутись до висоти рідного елемента, а потім також пройти цей натяг на його дітей, вам потрібно буде використовувати 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>
Створення фальшивої дублюючої легенди для стилістичних цілей
Це набагато більш хакітний спосіб зробити це. Він все ще такий же доступний, але вам не доведеться мати справу з ідентифікаторами, роблячи це таким чином. Основна сторона полягає в тому, що між реальним елементом легенди та підробленим елементом легенди буде дублювати вміст.
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>
Ви виявите, що це працює, і тоді ви, ймовірно, рухатиметесь далі, не замислюючись над цим.
Проблема полягає в тому, що, якщо помістити оболонку діва між набором поля та легендою, розривається зв'язок між двома елементами. Це порушує семантику набору поля / легенди.
Таким чином, зробивши це, ви перемогли в першу чергу ціль використання поля / легенди.
Крім того, немає великого сенсу використовувати набір полів, якщо ви не даєте цьому набору поля легендою.