버그 우선 순위를 높이려면 Chrome 버그에 별표를 표시하십시오.
이것은 Chrome의 버그입니다. 이 문제에 별표를 추가하여 우선 순위를 높이십시오 (
https://bugs.chromium.org/p/chromium/issues/detail?id=375693).
그 동안이 문제를 해결하는 방법을 보여주기 위해이 세 가지 코드 펜 예제를 만들었습니다. 예제를 위해 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>
fieldset 및 legend 대신 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 래퍼를 넣으면 두 요소 간의 관계가 끊어진다는 것입니다. 이로 인해 fieldset / legend의 의미가 깨집니다.
따라서 이렇게하면 fieldset / legend 사용의 전체 목적을 처음부터 이겼습니다.
또한 해당 필드 세트에 범례를 제공하지 않으면 필드 세트를 사용하는 데 큰 의미가 없습니다.