โปรดติดดาวข้อบกพร่องของ Chrome เพื่อเพิ่มลำดับความสำคัญของข้อบกพร่อง
นี่เป็นข้อผิดพลาดใน Chrome โปรดเพิ่มดาวในปัญหานี้เพื่อเพิ่มความสำคัญที่ต้องแก้ไข:
https://bugs.chromium.org/p/chromium/issues/detail?id=375693
ในเวลานั้นฉันได้สร้างตัวอย่างโค้ดสำหรับปากกาทั้งสามนี้เพื่อแสดงวิธีแก้ไขปัญหา พวกเขาสร้างขึ้นโดยใช้ 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 แทน fieldset และ legend
หากคุณต้องการ 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>
คุณจะค้นพบว่ามันใช้งานได้และจากนั้นคุณอาจจะดำเนินต่อไปโดยไม่ให้ความคิดที่สอง
ปัญหาคือการวาง wrapper div ระหว่าง fieldset และ legend ทำให้ความสัมพันธ์ระหว่างทั้งสององค์ประกอบแตกหัก สิ่งนี้จะแบ่งความหมายของ fieldset / legend
ดังนั้นในการทำเช่นนี้คุณได้เอาชนะวัตถุประสงค์ทั้งหมดของการใช้ fieldset / legend ในตอนแรก
นอกจากนี้ยังมีจุดไม่มากในการใช้ fieldset ถ้าคุณไม่ให้ fieldset ที่เป็นตำนาน