バグの優先度を上げるには、Chromeバグにスターを付けてください
これはChromeのバグです。修正する優先度を上げるには、この問題にスターを追加してください:https :
//bugs.chromium.org/p/chromium/issues/detail?id=375693
それまでの間、この問題を回避する方法を示すために、これら3つのコードペンの例を作成しました。これらは例としてCSSグリッドを使用して構築されていますが、同じ手法を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-containerが兄弟要素の高さまで伸ばし、その伸張をその子に渡すことができるようにする必要がある場合は、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ラッパーを配置すると、2つの要素間の関係が壊れることです。これはフィールドセット/レジェンドのセマンティクスを壊します。
したがって、これを行うことで、最初にfieldset / legendを使用するという目的全体を打ち破っています。
また、フィールドセットに凡例を指定しない限り、フィールドセットを使用してもあまり意味がありません。