Hata önceliğini artırmak için lütfen Chrome hatasını yıldızla işaretleyin
Bu Chrome'da bir hata. Düzeltilmesi önceliğini artırmak için lütfen bu soruna bir yıldız ekleyin:
https://bugs.chromium.org/p/chromium/issues/detail?id=375693
Bu arada, sorunun nasıl çözüleceğini göstermek için bu üç Kod Kalemi örneğini oluşturdum. Örnekler için CSS Izgarası kullanılarak oluşturulmuştur, ancak flexbox için aynı teknikler kullanılabilir.
Efsane yerine aria-labelledby kullanma
Bu, sorunla başa çıkmanın daha etkili bir yoludur. Dezavantajı, her sahte efsane öğeye uygulanan benzersiz kimlikler oluşturmakla uğraşmanız gerektiğidir.
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 ve legend yerine role = "group" ve aria-labelledby kullanma
Kardeş bir elemanın yüksekliğine gerilebilmesi için esnek konteynere ihtiyacınız varsa ve daha sonra bu gerginliği çocuklarına geçirmeniz gerekiyorsa, kullanmanız gerekir. role="group"
yerine .<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>
Stil oluşturma amacıyla sahte bir kopya efsanesi oluşturma
Bu, bunu yapmanın çok daha hileli bir yoludur. Yine de erişilebilir durumdadır, ancak bu şekilde yaparken kimliklerle uğraşmanıza gerek yoktur. Ana aşağı tarafı, gerçek gösterge öğesi ve sahte gösterge öğesi arasında yinelenen içerik olacağıdır.
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>
Efsane doğrudan bir karar olmalıdır ZORUNLU
Bunu ilk kez kendiniz düzeltmeye çalıştığınızda, muhtemelen bunu yapmaya çalışacaksınız:
<!-- DO NOT DO THIS! -->
<fieldset>
<div class="flex-container">
<legend class="flex-child">
Broken semantics legend text
</legend>
...
</div>
</fieldset>
Bunun işe yaradığını keşfedeceksiniz ve sonra muhtemelen ikinci bir düşünce vermeden devam edeceksiniz.
Sorun şu ki, alan kümesi ve gösterge arasına bir div sarmalayıcısı koymak, iki eleman arasındaki ilişkiyi bozuyor. Bu, fieldset / legend'in anlambilimini bozar.
Böylece bunu yaparak, ilk etapta fieldset / legend kullanma amacını yendiniz.
Ayrıca, bu alan kümesine bir açıklama vermezseniz, alan kümesi kullanmanın pek bir anlamı yoktur.