ฉันใช้เว็บแค่วันเดียวโดยใช้คีย์บอร์ด

เผยแพร่แล้ว: 2022-03-10
สรุปโดยย่อ ↬ พวกเราหลายคนได้รับการสอนเพื่อให้แน่ใจว่าเว็บไซต์ของเราสามารถใช้ผ่านแป้นพิมพ์ได้ ทำไมถึงเป็นเช่นนั้น และในทางปฏิบัติเป็นอย่างไร? Chris Ashton ทำการทดลองเพื่อหาคำตอบ

บทความนี้เป็นส่วนหนึ่งของชุดข้อมูลที่ฉันพยายามใช้เว็บภายใต้ข้อจำกัดต่างๆ ซึ่งแสดงถึงข้อมูลประชากรของผู้ใช้ที่กำหนด ฉันหวังว่าจะเพิ่มรายละเอียดของความยากลำบากที่คนจริงต้องเผชิญ ซึ่งสามารถหลีกเลี่ยงได้หากเราออกแบบและพัฒนาในลักษณะที่เห็นอกเห็นใจต่อความต้องการของพวกเขา คราวที่แล้วฉันใช้เว็บโดยไม่มี JavaScript วันนี้ ฉันบังคับตัวเองให้ท่องเว็บโดยใช้แป้นพิมพ์เพียงอย่างเดียว

ใครใช้แป้นพิมพ์เพื่อนำทาง?

ผู้ใช้แป้นพิมพ์โดยทั่วไปมีสามประเภท:

  • ผู้ใช้ที่มีความบกพร่องในการเคลื่อนไหวที่พยายามใช้เมาส์
  • ผู้ใช้ที่มีความบกพร่องทางการมองเห็นที่ไม่สามารถเห็นองค์ประกอบที่คลิกได้ในหน้า
  • ผู้ใช้ระดับสูงที่สามารถใช้เมาส์ได้ แต่พบว่าใช้แป้นพิมพ์ได้เร็วกว่า

เรากำลังพูดถึงผู้ใช้กี่คน?

ฉันได้สืบค้นข้อมูลสถิติเกี่ยวกับการใช้แป้นพิมพ์ในเว็บแล้ว และไม่พบสิ่งใดเลย อย่างจริงจัง. ไม่ใช่ หนึ่ง การศึกษา

ไซต์คำแนะนำการช่วยสำหรับการเข้าถึงของแป้นพิมพ์ส่วนใหญ่มักจะถือว่า "ผู้ใช้จำนวนมาก" พึ่งพาแป้นพิมพ์เพื่อไปยังที่ต่างๆ ทุกคนที่พยายามหาตัวเลขโดยประมาณมักจะถูกละเลยโดยเทศน์ว่า "สถิติไม่สำคัญ — ไซต์ของคุณควรเข้าถึงได้"

ใช่ เป็น ความจริงที่ระดับของการใช้เมาส์ไม่ใช่จุดที่สงสัย หากคุณสามารถเปลี่ยนแปลงได้แม้กระทั่งผู้ใช้เพียงคนเดียว การเปลี่ยนแปลงก็คุ้มค่าที่จะทำ แต่มีสถิติมากมายเกี่ยวกับสิ่งต่าง ๆ เช่น การตาบอดสี การใช้เบราว์เซอร์ ความเร็วในการเชื่อมต่อ และอื่นๆ — เหตุใดจึงมีความยุ่งยากเกี่ยวกับสถิติของแป้นพิมพ์ หากตัวเลขเป็นที่แพร่หลายตามที่ไซต์ต่างๆ ดูเหมือนจะแนะนำ แน่นอนว่าการมีตัวเลขเหล่านั้นจะทำให้กรณีธุรกิจแข็งแกร่งขึ้นและทำให้การเข้าถึงคีย์บอร์ดปกป้องผู้มีส่วนได้ส่วนเสียของคุณง่ายขึ้น

เพิ่มเติมหลังกระโดด! อ่านต่อด้านล่าง↓

สิ่งที่ใกล้เคียงที่สุดกับตัวเลขที่ฉันสามารถหาได้คือบทความเกี่ยวกับ PowerMapper ซึ่งแนะนำว่า 7% ของผู้ใหญ่วัยทำงานในสหรัฐอเมริกา สหราชอาณาจักร และแคนาดามี “ปัญหาด้านความคล่องแคล่วอย่างมาก” ซึ่งจะทำให้พวกเขา “ไม่น่าจะใช้เมาส์และต้องพึ่งคีย์บอร์ดแทน”

ผู้ใช้ที่มีความบกพร่องทางการมองเห็นขั้นรุนแรงใช้ซอฟต์แวร์ที่เรียกว่าโปรแกรมอ่านหน้าจอ ซึ่งเป็นซอฟต์แวร์ที่อ่านเนื้อหาบนหน้าจอเป็นคำพูดสังเคราะห์ เช่นเดียวกับผู้ใช้ที่มองไม่เห็น ผู้ใช้ที่มองไม่เห็นต้องการสแกนหน้าเว็บเพื่อดูข้อมูลที่น่าสนใจ ดังนั้นโปรแกรมอ่านหน้าจอจึงมีแป้นพิมพ์ลัดสำหรับการนำทางผ่านหัวเรื่องและลิงก์ และอาศัยองค์ประกอบที่เน้นคีย์บอร์ดสำหรับการโต้ตอบ

“คนตาบอดจำเป็นต้องเข้าถึงคีย์บอร์ดเต็มรูปแบบ ระยะเวลา."

— David Macdonald บรรณาธิการร่วมของการใช้ WAI ARIA ใน HTML5

ผู้ใช้กลุ่มเดียวกันนี้ยังมีโปรแกรมอ่านหน้าจอบนอุปกรณ์เคลื่อนที่ ซึ่งพวกเขาใช้การเลื่อนนิ้วแทนการกดแป้นพิมพ์เพื่อ 'แท็บรอบๆ' เนื้อหา ดังนั้น แม้ว่าพวกเขาจะไม่ได้ใช้แป้นพิมพ์อย่างแท้จริง แต่พวกเขาต้องการเว็บไซต์ที่สามารถเข้าถึงคีย์บอร์ดได้ เนื่องจากเทคโนโลยีโปรแกรมอ่านหน้าจอเชื่อมต่อกับแท็บเดียวกันและตัวฟังเหตุการณ์ราวกับว่าพวกเขาใช้คีย์บอร์ด เป็นที่น่าสังเกตว่าผู้ใช้โปรแกรมอ่านหน้าจอประมาณสองในสามถึงสามในสี่เท่านั้นที่ตาบอด ซึ่งหมายความว่าส่วนที่เหลืออาจใช้เทคนิคโปรแกรมอ่านหน้าจอและการขยายร่วมกัน

2.3% ของคนอเมริกัน (ทุกวัย) มีความบกพร่องทางสายตา ซึ่งไม่จำเป็นต้องรับประกันการใช้โปรแกรมอ่านหน้าจอทั้งหมด ในปี 2559 Addy Osmani ประมาณการการใช้งานโปรแกรมอ่านหน้าจอจริงจะอยู่ที่ประมาณ 1 ถึง 2% หากเรานำผู้ใช้เหล่านี้มาพิจารณาร่วมกับผู้ใช้ที่มีความบกพร่องด้านการเคลื่อนไหวและผู้ใช้ระดับสูง การใช้แป้นพิมพ์จะเพิ่มขึ้นเป็นเปอร์เซ็นต์ของผู้ชมทั่วโลก ดังนั้น การดูแลเรื่องการช่วยสำหรับการเข้าถึงด้วยแป้นพิมพ์ไม่ได้เป็นเพียงการทำสิ่งที่ถูกต้องตามหลักศีลธรรม (และในทางกฎหมาย หลายๆ ประเทศต้องการให้เว็บไซต์เข้าถึงได้ตามกฎหมาย) แต่ยังสมเหตุสมผลในเชิงธุรกิจอีกด้วย

จากทั้งหมดที่กล่าวมา สถานะของเว็บในปัจจุบันเป็นอย่างไร? ถึงเวลาที่จะหา!

แล็ปท็อปที่มีที่รองแก้ววางอยู่บนทัชแพดเพื่อให้ใช้ทัชแพดไม่ได้
ฉันวางจานรองแก้วไว้บนทัชแพดเพื่อหลีกเลี่ยงความล่อใจในการใช้แป้นพิมพ์ในการทดลองนี้ (ตัวอย่างขนาดใหญ่)

การทดลอง

ทุกคนจะทำอย่างไรเมื่อพวกเขามีเวลาข่มขู่ล่วงหน้าหนึ่งวัน? ผัดวันประกันพรุ่ง! ฉันไปที่ youtube.com ฉันมีวิดีโอที่เจาะจงอยู่ในใจและรู้สึกขอบคุณที่พบว่าฉันไม่ต้องแท็บในช่องค้นหาหลัก เนื่องจากวิดีโอจะเน้นไปที่การโหลดหน้าเว็บโดยค่าเริ่มต้น

คุณสมบัติ autofocus

หน้าแรกของ YouTube ที่มีแถบค้นหาอยู่ในโฟกัสแล้ว
หน้าแรกของ YouTube ที่มีแถบค้นหาอยู่ในโฟกัสแล้ว (ตัวอย่างขนาดใหญ่)

ฉันคิดว่าสิ่งนี้จะเน้นที่ JavaScript ในการโหลดหน้าต่าง แต่เบราว์เซอร์นี้จัดการด้วยแอตทริบิวต์ autofocus ในองค์ประกอบอินพุต

ในฐานะผู้ใช้แป้นพิมพ์ที่มองเห็นได้ ฉันพบว่าสิ่งนี้มีประโยชน์อย่างยิ่ง ในฐานะผู้ใช้โปรแกรมอ่านหน้าจอตาบอด ฉันไม่แน่ใจว่าจะชอบหรือไม่ ความเห็นพ้องต้องกันคือการใช้ autofocus อย่างรอบคอบนั้นเป็นเรื่องปกติ ในกรณีที่หน้านั้นมีจุดประสงค์เพื่อโต้ตอบกับแบบฟอร์ม (เช่น หน้า Landing Page ของ Google หรือแบบฟอร์มการติดต่อไซต์)

สไตล์โฟกัสเริ่มต้น

ฉันค้นหา Whose Line Is It Anything? ดี และอดไม่ได้ที่จะสังเกตว่า YouTube ไม่ได้กำหนดรูปแบบ :focus ที่กำหนดเองใดๆ เลย แทนที่จะอาศัยสไตล์ดั้งเดิมของเบราว์เซอร์เพื่อระบุองค์ประกอบที่ฉันกำลังแท็บด้วยสายตา

การจัดรูปแบบโฟกัสของ Chrome — โครงร่างสีน้ำเงินที่มีชื่อเสียง
การจัดรูปแบบโฟกัสของ Chrome — โครงร่างสีน้ำเงินที่มีชื่อเสียง (ตัวอย่างขนาดใหญ่)

ฉันเคยรู้สึกว่าไม่ใช่ว่าทุกเบราว์เซอร์จะกำหนดสถานะ :focus ของตัวเอง ดังนั้นคุณ ต้อง กำหนดสไตล์ที่คุณกำหนดเอง ฉันตัดสินใจนำสิ่งนี้ไปทดสอบและดูว่าเบราว์เซอร์ใดละเลยที่จะใช้รูปแบบเริ่มต้น แต่ฉันไม่พบรูปแบบนี้จนต้องแปลกใจ ทุกเบราว์เซอร์ที่ฉันทดสอบมีการนำ :focus มาใช้งานจริง แม้ว่าแต่ละเบราว์เซอร์จะมีสไตล์แตกต่างกันไป

Firefox เน้นสไตล์ — เส้นประ
Firefox focus styling — เส้นประ (ตัวอย่างขนาดใหญ่)
การจัดรูปแบบโฟกัสของ Safari — คล้ายกับ Chrome แต่รัศมีสีน้ำเงินไม่หนาเท่า
การจัดรูปแบบโฟกัสของ Safari — คล้ายกับ Chrome แต่รัศมีสีน้ำเงินไม่หนาเท่า (ตัวอย่างขนาดใหญ่)
การจัดรูปแบบโฟกัสของ Opera นั้นเหมือนกับ Chrome เนื่องจากทั้งคู่สร้างขึ้นจากเอ็นจิ้นเบราว์เซอร์ Blink
การจัดรูปแบบโฟกัสของ Opera นั้น เหมือนกับ Chrome เนื่องจากทั้งคู่สร้างขึ้นจากเอ็นจิ้นเบราว์เซอร์ Blink (ตัวอย่างขนาดใหญ่)
การจัดสไตล์โฟกัสใน Edge นั้นเหมือนกับใน Firefox มาก
การจัดสไตล์โฟกัสใน Edge นั้นเหมือนกับใน Firefox มาก (ตัวอย่างขนาดใหญ่)
IE11 ขีดเส้นใต้ลิงก์ด้วยเส้นประ
IE11 ขีดเส้นใต้ลิงก์ด้วยเส้นประ (ตัวอย่างขนาดใหญ่)

ฉันย้อนเวลากลับไปค่อนข้างไกล:

การจัดรูปแบบโฟกัส IE7 (บน XP) ดูเหมือนกับการใช้งาน Firefox ในปัจจุบันมาก!
การจัดรูปแบบโฟกัส IE7 (บน XP) ดูเหมือนกับการใช้งาน Firefox ในปัจจุบันมาก! (ตัวอย่างขนาดใหญ่)

หากคุณต้องการดูเพิ่มเติม มีคอลเล็กชันภาพหน้าจอที่ครอบคลุมขององค์ประกอบต่างๆ ในสถานะดั้งเดิมของเบราว์เซอร์

สิ่งนี้บอกฉันว่าคุณสามารถสันนิษฐานได้อย่างสมเหตุสมผลว่า ทุก เบราว์เซอร์มาพร้อมกับสไตล์พื้นฐาน :focus เป็นเรื่องปกติที่จะให้เบราว์เซอร์ทำงาน สิ่งที่คุณเสี่ยงคือความไม่สอดคล้องกัน: องค์ประกอบของสไตล์เบราว์เซอร์ทั้งหมดแตกต่างกันอย่างละเอียด และบางส่วนมีความละเอียดอ่อนจนไม่สามารถเข้าถึงได้โดยเฉพาะอย่างยิ่ง

เป็นไปได้ที่จะปิดใช้งานรูปแบบโฟกัสเริ่มต้นของเบราว์เซอร์ — โดยการตั้งค่า outline: none ในองค์ประกอบของคุณ — แต่คุณควรทำเช่นนี้ ก็ต่อเมื่อคุณใช้ทางเลือกที่มีสไตล์ของคุณเอง Heydon Pickering แนะนำวิธีการนี้ โดยอ้างถึงค่าเริ่มต้นที่ไม่ชัดเจนหรือน่าเกลียดที่ใช้โดยเบราว์เซอร์บางตัว หากคุณตัดสินใจที่จะเปิดตัวสไตล์ของคุณเอง อย่าลืมใช้มากกว่าสีเป็นตัวแก้ไข: เพิ่มเค้าร่างหรือขีดเส้นใต้หรือตัวบ่งชี้ภาพอื่น ๆ เพื่อสนับสนุนผู้ใช้ที่ตาบอดสี

ไซต์หลายแห่งระงับรูปแบบการโฟกัสเริ่มต้น แต่ไม่สามารถจัดเตรียมสไตล์ที่กำหนดเองได้ ส่งผลให้ใช้งานไม่ได้ หากไซต์ของคุณใช้การรีเซ็ต CSS ของ Eric Meyer ไซต์อาจไม่สามารถเข้าถึงได้ ไฟล์ที่ใช้กันทั่วไปนี้จะรีเซ็ตรูปแบบเริ่มต้น :focus แต่แนะนำให้นักพัฒนาเขียนเอง และหลายๆ คนกลับมองไม่เห็นคำแนะนำ

บางคนโต้แย้งว่าอาจทำให้ผู้ใช้สับสนได้หากคุณปิดใช้งานค่าเริ่มต้นของเบราว์เซอร์ เนื่องจากพวกเขาสูญเสียความสามารถในการมองเห็นของสถานะโฟกัสที่พวกเขาคุ้นเคย และต้องเรียนรู้ว่าสถานะโฟกัสของไซต์ของคุณเป็นอย่างไร ในทางกลับกัน บางคนโต้แย้งว่าค่าเริ่มต้นของเบราว์เซอร์นั้นน่าเกลียด หรือแม้กระทั่งสร้างความสับสนให้กับผู้ใช้ที่ไม่ใช้แป้นพิมพ์

ทำไมสับสน? ลองดูรูปแบบภาพหมุนแบบเคลื่อนไหวบน BBC มีปุ่มนำทางสองปุ่ม — ถัดไปและก่อนหน้า — และมีประโยชน์สำหรับผู้ใช้คีย์บอร์ดที่โฟกัสจะอยู่ที่ปุ่มเหล่านั้นตลอดการบรรยาย แต่สำหรับผู้ใช้เมาส์ อาจค่อนข้างสับสนว่าปุ่มที่คลิกยังคง 'เพ่งความสนใจ' หลังจากที่เลื่อนเคอร์เซอร์ออกไปแล้ว

รูปแบบหมุนภาพเคลื่อนไหวของ BBC
รูปแบบหมุนภาพเคลื่อนไหวของ BBC (ตัวอย่างขนาดใหญ่)

ตัวเลือก CSS :focus-visible CSS

หากคุณต้องการสิ่งที่ดีที่สุดของทั้งสองโลก คุณอาจต้องการสำรวจ CSS4 :focus-visible pseudo-class ซึ่งจะช่วยให้คุณกำหนดสไตล์การโฟกัสที่แตกต่างกันขึ้นอยู่กับบริบท :focus-visible จะกำหนดเป้าหมายเฉพาะองค์ประกอบที่เน้นด้วยแป้นพิมพ์ ไม่ใช่ด้วยการคลิกเมาส์ สิ่งนี้ยอดเยี่ยมมาก แม้ว่าปัจจุบันรองรับเฉพาะใน Firefox เท่านั้น สามารถเปิดใช้งานใน Chrome ได้โดยเปิดแฟล็ก 'Experimental Web Platform Features'

ปุ่มเป็นสีเขียวเมื่อฉันแตะผ่านแป้นพิมพ์ และเป็นสีแดงเมื่อฉันคลิก
ปุ่มเป็นสีเขียวเมื่อฉันแตะผ่านแป้นพิมพ์ และเป็นสีแดงเมื่อฉันคลิก (ตัวอย่างขนาดใหญ่)

วิดีโอ YouTube และการช่วยสำหรับการเข้าถึงแป้นพิมพ์

YouTube ทำงานได้ดีมากด้วยโปรแกรมเล่นวิดีโอ — ทุกส่วนของเครื่องเล่นสามารถใช้คีย์บอร์ดได้ ฉันชอบที่ตัวควบคุมระดับเสียงจะเลื่อนออกเมื่อคุณแท็บโฟกัสออกจากไอคอนปิดเสียง ตรงกันข้ามกับการเลื่อนออกเมื่อวางเมาส์เหนือไอคอนปิดเสียง

youtube
ตัวอย่างขนาดใหญ่

สิ่งที่ฉันไม่ชอบคือป้ายกำกับที่เป็นประโยชน์ เช่น ข้อความ "ปิดเสียง" ที่ปรากฏขึ้นเมื่อวางเมาส์เหนือไอคอนปิดเสียง จะไม่แสดงในโฟกัส

อีกประเด็นหนึ่งที่ทำให้ YouTube ผิดหวังก็คือการระงับการจัดสไตล์การโฟกัสบางอย่าง ฉันกำลังพยายามแท็บไปที่ปุ่ม "แสดงเพิ่มเติม"

ฉันพยายามแท็บไปที่ปุ่ม "แสดงเพิ่มเติม" ผ่านอวาตาร์ของผู้เขียนวิดีโอ ชื่อและลิงก์ในคำอธิบาย แต่จบลงด้วยการแท็บไปที่ส่วน "เพิ่มความคิดเห็น" โดยไม่ได้ตั้งใจ
ฉันพยายามแท็บไปที่ปุ่ม "แสดงเพิ่มเติม" ผ่านอวาตาร์ของผู้เขียนวิดีโอ ชื่อและลิงก์ในคำอธิบาย แต่จบลงด้วยการแท็บไปที่ส่วน "เพิ่มความคิดเห็น" โดยไม่ได้ตั้งใจ (ตัวอย่างขนาดใหญ่)

ฉันเผลอแตะปุ่ม "แสดงเพิ่มเติม" โดยไม่ได้ตั้งใจเพราะฉันไม่เห็นการใช้สไตล์ :focus เลย ไม่ว่าจะกำหนดเองหรือเนทีฟ ฉันพบว่าสไตล์ดั้งเดิมถูกแทนที่ด้วย outline-width :

การยกเลิกการเลือกความกว้างเค้าร่าง: กฎ 0 เปิดใช้งานการกำหนดสไตล์โฟกัสดั้งเดิมของ Chrome ที่มีเส้นขอบสีน้ำเงิน
การยกเลิกการเลือก outline-width: 0 เปิดใช้งานการกำหนดสไตล์โฟกัสดั้งเดิมของ Chrome ที่มีเส้นขอบสีน้ำเงิน (ตัวอย่างขนาดใหญ่)

การช่วยการเข้าถึงแป้นพิมพ์ GitHub

โอเค เวลาทำงาน ที่ไหนดีกว่าที่จะทำงานมากกว่าที่บ้านของรหัส github.com?

ฉันสังเกตเห็นสามสิ่งเกี่ยวกับ GitHub: หนึ่งที่ยอดเยี่ยม หนึ่งสมเหตุสมผล และหนึ่งแย่

ประการแรกความดี

'ข้ามไปยังเนื้อหา' ลิงค์

มุมมองเชื่อมโยงไปถึง GitHub… จับตาดูมุมนี้
มุมมองเชื่อมโยงไปถึง GitHub… จับตาดูมุมนี้ (ตัวอย่างขนาดใหญ่)

GitHub เสนอลิงก์ Skip to content ซึ่งข้ามผ่านเมนูหลัก

หลังจากแท็บหนึ่งครั้ง ลิงค์ข้ามไปที่เนื้อหาจะปรากฏขึ้น!
หลังจากแท็บหนึ่งครั้ง ลิงค์ Skip to content จะปรากฏขึ้น! (ตัวอย่างขนาดใหญ่)

หากคุณกด ENTER ขณะที่เพ่งความสนใจไปที่ลิงก์ 'ข้ามไปยังเนื้อหา' คุณจะข้ามรายการเมนูทั้งหมดที่ด้านบนของหน้า และสามารถเริ่มแท็บภายในพื้นที่หลักของเนื้อหาได้ ซึ่งช่วยประหยัดเวลาในการนำทาง นี่เป็นรูปแบบการช่วยสำหรับการเข้าถึงทั่วไปซึ่งมีประโยชน์มากสำหรับผู้ใช้แป้นพิมพ์และโปรแกรมอ่านหน้าจอ ผู้ใช้โปรแกรมอ่านหน้าจอประมาณ 30% จะใช้ลิงก์ข้ามหากคุณระบุ

หรือบางไซต์เลือกที่จะวางเนื้อหาหลักก่อนในลำดับการอ่าน เหนือการนำทาง วิธีการนี้ล้าสมัยเนื่องจากเป็นการฝ่าฝืนแนวทางในการทำให้เนื้อหา DOM ของคุณตรงกับลำดับภาพ (เว้นแต่การนำทางของคุณจะปรากฏที่ด้านล่าง) และในขณะที่วิธีนี้หมายความว่าเราไม่ต้องการลิงก์ 'ข้ามการนำทาง' เลย เราอาจต้องการลิงก์ 'ข้าม ไปยัง การนำทาง' แทน

แท็บเพื่อดูเนื้อหา

คุณลักษณะหนึ่งที่ฉันสังเกตเห็นว่าทำงานแตกต่างไปจากเวอร์ชัน 'ที่ไม่ใช่แป้นพิมพ์' คือตัวบ่งชี้การแบ่งรหัส

เมื่อใช้เมาส์ คุณสามารถคลิกแถบสีใต้ที่เก็บใดก็ได้เพื่อดูรายละเอียดตามสัดส่วนของภาษาโปรแกรมต่างๆ ที่ใช้ใน repo เมื่อใช้แป้นพิมพ์ คุณจะไม่สามารถนำทางไปยังแถบสีได้ แต่ภาษาต่างๆ จะถูกแสดงโดยอัตโนมัติเมื่อคุณแตะผ่านจุดสิ้นสุดของข้อมูลเมตา

ฉันอ่านรายละเอียดเกี่ยวกับภาษาของโค้ดก่อนที่จะแสดงวิธีดำเนินการด้วยเมาส์
ฉันอ่านรายละเอียดเกี่ยวกับภาษาของโค้ดก่อนที่จะแสดงวิธีการดำเนินการด้วยเมาส์ (ตัวอย่างขนาดใหญ่)

ดูเหมือนจะไม่จำเป็นจริงๆ — ฉันจะแตะแถบสีอย่างมีความสุขแล้วกด ENTER ที่นั้น — แต่พฤติกรรมที่แตกต่างนี้ก็ไม่ก่อให้เกิดอันตรายใดๆ เช่นกัน

ลิงค์ที่มองไม่เห็น

ปัญหาหนึ่งที่ฉันเจอคือมีลิงก์ "มองไม่เห็น" หลังจากแท็บผ่านรูปโปรไฟล์ของฉันที่ด้านบนขวา ลำดับแท็บของฉันจะแท็บไปที่รูปภาพ จากนั้นไปที่ลิงก์ที่มองไม่เห็น จากนั้นไปที่ปุ่ม 'ดู' บน repo (ดู gif ด้านล่าง) ฉันไม่รู้ว่าลิงก์ล่องหนทำอะไร ดังนั้นเมื่อฉันรู้ว่าฉันอยู่บนนั้น ฉันกด ENTER และออกจากระบบทันที!

ระวังการคลิกลิงก์ที่มองไม่เห็น
ระวังการคลิกลิงก์ที่มองไม่เห็น (ตัวอย่างขนาดใหญ่)

ในการตรวจสอบอย่างใกล้ชิด ดูเหมือนว่าฉันได้ไปที่แบบฟอร์ม "โปรแกรมอ่านหน้าจอเท่านั้น" ( sr-only คือชื่อคลาสของโปรแกรมอ่านหน้าจอทั่วไป) ซึ่งมีคุณลักษณะ "ออกจากระบบ"

โปรแกรมอ่านหน้าจอเท่านั้น
ตัวอย่างขนาดใหญ่

ลิงก์ออกจากระบบนี้ เพิ่มเติม จากลิงก์ออกจากระบบในเมนูแบบเลื่อนลงโปรไฟล์ของคุณ:

ลิงก์ออกจากระบบในเมนูดรอปดาวน์
ตัวอย่างขนาดใหญ่

ฉันไม่แน่ใจว่าจำเป็นต้องมีลิงก์ออกจากระบบ HTML แยกกันสองลิงก์ เนื่องจากผู้ใช้โปรแกรมอ่านหน้าจอควรทริกเกอร์รายการแบบเลื่อนลงและนำทางไปยังลิงก์ออกจากระบบหลักได้ และถ้าเรา ต้องการ เก็บลิงก์แยกต่างหาก ฉันขอแนะนำให้ใช้ :focus styling กับเนื้อหาโปรแกรมอ่านหน้าจอ เพื่อที่ผู้ใช้ที่มองเห็นจะไม่ทริกเกอร์การออกจากระบบโดยไม่ได้ตั้งใจ!

ตัวอย่างการจัดรูปแบบการโฟกัสข้อความของโปรแกรมอ่านหน้าจอ
ตัวอย่างการจัดรูปแบบการโฟกัสข้อความของโปรแกรมอ่านหน้าจอ (ตัวอย่างขนาดใหญ่)

วิธีสร้างทางลัด 'ข้ามไปยังเนื้อหา'

แล้วเราจะสร้างทางลัด 'ข้ามไปยังเนื้อหา' ขึ้นมาใหม่ได้อย่างไร มันค่อนข้างง่ายที่จะนำไปใช้ แต่อาจหลอกลวงเพื่อให้สมบูรณ์แบบ - ดังนั้นนี่คือสิ่งที่ฉันคิดว่าเป็นจอกศักดิ์สิทธิ์ของโซลูชันลิงก์ข้าม

'ข้ามลิงก์' หรือเรียกอีกอย่างว่า 'ข้ามการนำทาง', 'ข้ามการนำทางหลัก', 'ข้ามลิงก์การนำทาง' หรือ 'ข้ามไปยังเนื้อหาหลัก' 'ข้ามไปยังเนื้อหาหลัก' น่าจะชัดเจนที่สุดเพราะจะบอกคุณว่าคุณกำลังนำทางไปยังที่ใด มากกว่าที่คุณกำลังข้ามไป

ลิงก์ทางลัดควรปรากฏตามหลังแท็กเปิด <body> อาจ ปรากฏขึ้นภายหลังใน DOM แม้จะอยู่ด้านหลังส่วนท้าย โดยที่คุณมีแอตทริบิวต์ tabindex="1" เพื่อบังคับให้เป็นองค์ประกอบแบบโต้ตอบแรกในลำดับแท็บ อย่างไรก็ตาม การใช้ tabindex ที่มีตัวเลขมากกว่าศูนย์มักเป็นแนวทางที่ไม่ดี และมักจะส่งผลให้เกิดการเตือนเมื่อใช้เครื่องมือตรวจสอบความถูกต้อง เช่น Lighthouse

ไม่ใช่เรื่องเข้าใจผิดที่จะพึ่งพา tabindex เนื่องจากคุณอาจมีลิงก์มากกว่าหนึ่งลิงก์ที่มี tabindex="1" ในกรณีเหล่านี้ จะเป็นลิงก์ แรก ที่จะได้รับโฟกัสแท็บก่อน ไม่ใช่ลิงก์ภายหลัง อ่านเพิ่มเติมเกี่ยวกับการใช้แอตทริบิวต์ tabindex ที่นี่ แต่จำไว้ว่าคุณควรย้ายลิงก์ไปยังจุดเริ่มต้นของ DOM ทางกายภาพจะดีกว่าเสมอเพื่อความปลอดภัย

 <a class="screen-reader-shortcut" href="#main-content"> Skip to main content </a>

ลิงก์ 'ข้ามไปยังเนื้อหาหลัก' ใช้งานได้จำกัดสำหรับผู้ใช้ที่มองเห็น ซึ่งสามารถข้ามการนำทางโดยใช้สายตาของตนเองได้ ดังนั้น แม้ว่าบางไซต์จะมองเห็นการข้ามลิงก์อยู่ตลอดเวลา ธรรมเนียมในปัจจุบันคือการซ่อนลิงก์ไว้จนกว่าคุณจะแตะเข้าไป ซึ่งในจุดนั้น ลิงก์จะอยู่ในโฟกัสและได้สไตล์ที่ใช้โดยตัวเลือก :focus pseudo

 .screen-reader-shortcut { position: absolute; top: -1000em; } .screen-reader-shortcut:focus { position: fixed; top: 0; left: 0; z-index: 999; /* ...and now any nice styling you want to apply... */ padding: 1em; background-color: rgb(114, 105, 105); color: white; text-decoration: none; }

จริง ๆ แล้วเราข้ามไปที่อะไร? #main-content อะไร ? มันสามารถเป็นอะไรก็ได้:

  1. เนื้อหาแบบอินไลน์
    เช่น id ของแท็ก h1 ของคุณ: <h1 id="main-content">
  2. คอนเทนเนอร์
    เช่น id ของคอนเทนเนอร์รอบๆ เนื้อหาหลักของคุณ เช่น <main id="main-content">
  3. พี่น้องผู้ประกาศข่าว
    คุณสามารถเชื่อมโยงไปยังแท็กที่มีชื่ออยู่เหนือเนื้อหาหลักของคุณ เช่น <a name="main-content"></a> แนวทางนี้มักจะอธิบายไว้ในบทช่วยสอนที่เก่ากว่า — ฉันจะไม่แนะนำในทุกวันนี้

เพื่อความเข้ากันได้สูงสุดกับโปรแกรมอ่านหน้าจอทั้งหมด ขอแนะนำให้ลิงก์ไปยังแท็ก h1 เพื่อให้แน่ใจว่าเนื้อหาจะถูกอ่านทันทีที่คุณใช้ลิงก์ข้าม การเชื่อมโยงกับคอนเทนเนอร์สามารถนำไปสู่พฤติกรรมที่ตลก เช่น โปรแกรมอ่านหน้าจอเริ่มอ่านเนื้อหา ทั้งหมด ภายในคอนเทนเนอร์

#main-content ของคุณควรมี tabindex เป็น -1 เพื่อให้แน่ใจว่าสามารถโฟกัสแบบเป็นโปรแกรมได้ โปรแกรมอ่านหน้าจอบางตัวอาจไม่เชื่อฟังลิงก์ข้าม

 <h1 tabindex="-1">This is the title of the page</h1>

การพิจารณาครั้งสุดท้าย: การสนับสนุนเบราว์เซอร์รุ่นเก่า หากคุณมีผู้ใช้ใน IE9 หรือต่ำกว่านั้นเพียงพอ คุณอาจต้องใช้โปรแกรมแก้ไข JavaScript เล็กน้อยกับลิงก์ที่ข้ามเพื่อให้แน่ใจว่าโฟกัสจะเปลี่ยนไปตามที่คาดไว้ และผู้ใช้ของคุณข้ามการนำทางได้สำเร็จ

ทำไมเราถึงคิดค้นล้อใหม่?

ดูเหมือนว่าบ้าในฐานะนักพัฒนาเว็บ เราต้องใช้แฮ็ค 'ข้ามการนำทาง' นี้บนไซต์ทั้งหมดของเราตามกฎ คุณคงคิดว่าเราสามารถปล่อยให้มาตรฐานทำงานแทนได้

ตั้งแต่ HTML5 เรามีองค์ประกอบเชิงความหมายเช่น <main> , <nav> และ <header> ก่อนหน้านั้น เรามีจุดสังเกตของ ARIA เช่น role="main" , role="navigation" และ role="banner" ตามลำดับ ในภูมิทัศน์ปัจจุบันของเว็บ แนวปฏิบัติที่ดีที่สุดกำหนดว่าคุณต้องการทั้งสองอย่าง กล่าวคือ <main role="main"> ซึ่งเป็นการละเมิดหลักการ DRY อย่างร้ายแรง แต่เราไปต่อแล้ว

ด้วยความสมบูรณ์ของความหมายนี้ คุณจึงหวังว่าเบราว์เซอร์จะเริ่มสนับสนุนการนำทางผ่านจุดสังเกตเหล่านี้โดยกำเนิด เช่น โดยการเปิดเผยแป้นพิมพ์ลัดให้ผู้ใช้แท็บตรงไปยังส่วน <main> ของหน้าเว็บ ไม่มีโชคเช่นนี้ - ไม่มีการสนับสนุนในขณะนี้ ทางออกที่ดีที่สุดของคุณคือการใช้ส่วนขยาย Landmark Navigation ผ่านแป้นพิมพ์สำหรับ Chrome, Opera หรือ Firefox

อย่างไรก็ตาม ผู้ใช้โปรแกรมอ่านหน้าจอ สามารถ เริ่มนำทางไปยังบริเวณจุดสังเกตเหล่านี้ได้โดยตรง ตัวอย่างเช่น บน VoiceOver บน Mac คุณสามารถกด CTRL + ALT + U เพื่อเปิดเมนู Landmarks และไปที่จุดสังเกต 'หลัก' ซึ่งเป็นทางลัดที่รวดเร็วและสม่ำเสมอเพื่อไปยังเนื้อหาหลัก แน่นอนว่าต้องอาศัยไซต์ที่ทำเครื่องหมายเอกสารอย่างถูกต้อง

นี่เป็นจุดเริ่มต้นที่ดีสำหรับไซต์ของคุณ หากคุณต้องการให้ไซต์นำทางผ่านภูมิภาคที่เป็นสถานที่สำคัญได้:

 <body> <header role="banner"> <!-- Logo and things can go here --> <nav role="navigation"> <!-- Site navigation links go here --> </nav> </header> <main role="main"> <!-- Main content lives here - including our h1 --> </main> <footer role="contentinfo"> <!-- Copyright statement, etc --> </footer> </body>

มาร์กอัปทั้งหมดนี้เป็นงานที่กระหายน้ำ เวลาสำหรับกาแฟ

Pact Coffee

ฉันจำได้ว่าเห็นใบปลิวสำหรับ pactcoffee.com... ไปดูกันเลย!

แบนเนอร์คุกกี้

ภาพหน้าจอของเว็บไซต์ Pact พร้อมแบนเนอร์นโยบายคุกกี้ที่แก้ไขที่ด้านล่างของวิวพอร์ต
ตัวอย่างขนาดใหญ่

แบนเนอร์ 'นโยบายคุกกี้' เป็นหนึ่งในสิ่งแรกที่คุณสังเกตเห็นที่นี่ และการยกเลิกแบนเนอร์นั้นเกือบจะเป็นการสะท้อนสัญชาตญาณสำหรับผู้ใช้เมาส์ที่มองเห็น ผู้ใช้โปรแกรมอ่านหน้าจอบางคนอาจไม่สนใจมัน (ถ้าคุณตาบอด คุณจะไม่รู้ว่ามันอยู่ที่นั่นจนกว่าคุณจะไปถึง) แต่ในฐานะผู้ใช้สายตา คุณเห็นมัน คุณต้องการฆ่ามัน และในกรณีของ ไซต์นี้ คุณต้องแท็บผ่านลิงก์อื่น ๆ ทั้งหมดก่อนจึงจะสามารถปิดได้

ฉันใช้ส่วนขยายการเข้าถึง ChromeLens เพื่อติดตามลำดับแท็บของหน้า:

ฉันต้องแท็บทุกลิงก์ในหน้าก่อนจึงจะยกเลิกแบนเนอร์คุกกี้ได้
ฉันต้องแท็บทุกลิงก์ในหน้าก่อนจึงจะสามารถปิดแบนเนอร์คุกกี้ได้ (ตัวอย่างขนาดใหญ่)

ซึ่งสามารถแก้ไขได้โดยการย้ายประกาศไปที่ด้านบนของเอกสาร (ยังคงสามารถตรึงไว้ที่ด้านล่างด้วยสายตาด้วย CSS) หรือโดยการเพิ่ม tabindex="1" ไปที่ปุ่ม OK ฉันขอแนะนำให้ใช้การแก้ไขนี้กับเนื้อหาใดๆ ที่ผู้ใช้ต้องการยกเลิกการแก้ไขนี้

ลิงค์ที่มองไม่เห็นเพิ่มเติม

เช่นเดียวกับ GitHub ฉันพบว่าตัวเองกำลังแท็บไปยังองค์ประกอบนอกหน้าจอซึ่งมีวัตถุประสงค์ไม่ชัดเจน ปรากฏว่าเป็นการสลับ 'ดูน้อยลง…' ซึ่งอยู่ ด้านหลัง การ์ด 'ดูเพิ่มเติม…'

แท็บจาก See More ไปยังพื้นที่ที่ซ่อนอยู่ไปยังปุ่ม See More อื่น
แท็บจาก 'ดูเพิ่มเติม' ไปยังพื้นที่ที่ซ่อนอยู่ ไปยังปุ่ม 'ดูเพิ่มเติม' อีกปุ่มหนึ่ง พื้นที่ลึกลับที่ซ่อนอยู่นั้นคืออะไร? อ้อ มันคือปุ่ม "ดูน้อยลง" "อยู่อีกด้าน" (ตัวอย่างขนาดใหญ่)

นี่เป็นเพราะว่าพื้นที่ 'ซ่อน' ไม่ได้ถูกซ่อนจริงๆ มันแค่หมุนไป 180 องศา โดยใช้:

 transform: rotateY(180deg);

…ซึ่งหมายความว่าปุ่ม 'ดูน้อยลง…' ยังคงเป็นส่วนหนึ่งของลำดับแท็บ ซึ่งสามารถแก้ไขได้โดยใช้ display: none จนกว่าแอปพลิเคชันจะพร้อมที่จะทริกเกอร์การหมุน:

การใช้การแสดงผล: ไม่มีลิงก์ "ดูน้อยลง…" นำออกจากลำดับแท็บและทำให้ประสบการณ์การใช้แป้นพิมพ์สับสนน้อยลง
การใช้การ display: none ลิงก์ 'ดูน้อยลง…' นำออกจากลำดับแท็บและทำให้ประสบการณ์การใช้แป้นพิมพ์สับสนน้อยลง (ตัวอย่างขนาดใหญ่)

สั่งกาแฟ. ถึงเวลาดำเนินการวิจัยต่อแล้ว

ไอทีเวิลด์

ฉันกำลังค้นคว้าสำหรับบทความนี้และพบการทดลองที่คล้ายคลึงกันกับของฉันเอง Kevin Purdy ท่องเว็บเป็นเวลาเจ็ดวันโดยใช้เพียงแป้นพิมพ์ของเขา ฉันพบว่าเป็นเรื่องน่าขันที่ฉันไม่สามารถอ่านบทความของเขาภายใต้ข้อจำกัดเดียวกันได้!

ปัญหาคือแบนเนอร์คุกกี้แบบเต็มหน้า ทำให้ฉันต้อง "อัปเดตการตั้งค่าความเป็นส่วนตัว" หรือยอมรับการตั้งค่าคุกกี้เริ่มต้น ไม่ว่าจะแท็บกี่ครั้ง ฉันก็ไม่สามารถเพ่งความสนใจไปที่แบนเนอร์คุกกี้แล้วละทิ้งได้

gif แสดงว่าการแท็บอย่างรวดเร็วผ่านหน้าไม่ถึงปุ่มโมดอลป๊อปอัป
การกด TAB ไว้ไม่ได้ช่วยอะไร (ตัวอย่างขนาดใหญ่)

ฉันขุดซอร์สโค้ดเพื่อค้นหาว่าเกิดอะไรขึ้น สักครู่ ฉันคิดว่ามันอาจจะเป็นตัวซวยของเรา ซึ่งเป็นคุณสมบัติ CSS ของ outline

ผู้ร้าย itworld
ตัวอย่างขนาดใหญ่

การตรวจสอบลิงก์ "อัปเดตการตั้งค่าความเป็นส่วนตัว" ฉันสามารถเห็น outline: 0 ตามที่ฉันสงสัย ดังนั้นบางที ฉัน อาจเพ่งความสนใจไปที่ปุ่มต่างๆ แต่ไม่มีการตอบสนองด้วยภาพเมื่อสิ่งนั้นเกิดขึ้น

ฉันพยายามตั้งค่าสถานะเป็น :hover เพื่อดูว่าฉันพลาดรูปแบบใด ๆ ในฐานะผู้ใช้แป้นพิมพ์หรือไม่:

itworld บังคับโฟกัส
ตัวอย่างขนาดใหญ่

แน่นอนว่าลิงก์เปลี่ยนเป็นสีส้มที่สวยงามอย่างเห็นได้ชัดเมื่อวางเมาส์เหนือ ซึ่งเป็นสิ่งที่ฉันไม่เคยเห็นในโฟกัส:

itworld โฮเวอร์
ตัวอย่างขนาดใหญ่

ฮูรา! แตกมัน! ฉันไม่เคยเห็นสถานะ :focus เพราะการใช้สไตล์แบบกำหนดเองถูกนำไปใช้กับ :hover เท่านั้น ฉันต้องข้ามปุ่มโดยไม่ได้สังเกตใช่ไหม

ผิด. แม้ว่าฉันจะแฮ็ค CSS ในเครื่อง ฉันก็ไม่เห็นการจัดสไตล์โฟกัสเลย หมายความว่าฉันไม่ค่อยได้เข้าไปที่คุกกี้โมดอลด้วยซ้ำ จากนั้นฉันก็รู้ว่า… ลิงก์ไม่มีแอตทริบิวต์ href :

มาร์กอัป itworld
ตัวอย่างขนาดใหญ่

นั่น คือผู้กระทำความผิดที่แท้จริง outline: 0 ไม่ใช่ปัญหา — เบราว์เซอร์ไม่เคยไปที่แท็บไปที่ลิงก์เพราะไม่ใช่ลิงก์ที่ถูกต้อง!

จากข้อกำหนด HTML 5.2:

ปลายทางของลิงก์ถูกกำหนดโดยแอตทริบิวต์ href ซึ่งต้องมีอยู่และต้องมี URL ที่ไม่ว่างเปล่าที่ถูกต้องซึ่งล้อมรอบด้วยช่องว่าง หากไม่มีแอตทริบิวต์ href แสดงว่าองค์ประกอบนั้นไม่ได้กำหนดลิงก์

การระบุแอตทริบิวต์ href ให้กับลิงก์แม้ว่าจะเป็นเพียง # จะทำให้ลิงก์ถูกต้องและเพิ่มลงในลำดับแท็บของหน้า

ที่น่าตลกคือ ต่อมาในวันนั้น ฉันถูกส่งบทความเกี่ยวกับ PC World เพื่ออ่าน และฉันพบปัญหา เดียวกัน ทุกประการ

ป๊อปอัปบนเว็บไซต์ pcworld
ตัวอย่างขนาดใหญ่

ดูเหมือนว่าทั้งสองไซต์ใช้แพลตฟอร์มการจัดการคำยินยอม (CMP) เดียวกัน ฉันขุดค้นเล็กน้อยและอนุมานได้ว่าไซต์ดังกล่าวมีผลกระทบต่อไซต์จำนวนหนึ่งที่เป็นของบริษัทเดียวกัน และหลังจากนั้นได้ติดต่อพวกเขาโดยตรงเพื่อแจ้งแนวทางแก้ไขที่แนะนำ

Kinetico

ก๊อกน้ำในครัวของฉันรั่ว และฉันตั้งใจจะเปลี่ยนมัน ฉันเห็นโฆษณาในหนังสือพิมพ์ท้องถิ่นของ kinetico.co.uk เลยคิดว่าจะลองดู

เป็นไปไม่ได้ที่จะนำทางไปยังรายการเมนูที่ซ้อนกันผ่านแป้นพิมพ์
เป็นไปไม่ได้ที่จะนำทางไปยังรายการเมนูที่ซ้อนกันผ่านแป้นพิมพ์ (ตัวอย่างขนาดใหญ่)

ฉันไม่สามารถนำทางไปยังส่วน 'Kitchen Taps' ได้ เนื่องจากลิงก์ซ่อนอยู่หลังลิงก์หลัก 'Salt & Cartridges' ซึ่งจะแสดงเฉพาะลิงก์ย่อยเมื่อวางเมาส์เหนือ เป็นเรื่องที่น่าสนใจที่ไซต์มีความคิดก้าวหน้ามากพอที่จะให้ลิงก์ 'ข้ามไปยังเนื้อหา' (ดูสั้น ๆ ใน gif ด้านบน) แต่ไม่สามารถสร้างเมนูที่สามารถเข้าถึงได้!

นี่คือจุดที่เมนูผิดพลาด โดยจะแสดงเฉพาะเมนูย่อยเมื่อวางรายการเมนูหลักไว้เหนือ:

เมนูของ Kinetico แสดงเมนูย่อยเมื่อวางเมาส์เหนือ

การแก้ไขพูดง่ายกว่าทำ ในกรณีส่วนใหญ่ คุณสามารถ "เพิ่ม" ตัวเลือกของคุณเป็นสองเท่าเพื่อนำไปใช้กับการโฟกัสได้เช่นกัน:

 li:hover .nav_sub_menu, li:focus .nav_sub_menu { }

แต่วิธีนี้ใช้ไม่ได้ผลในกรณีนี้ เนื่องจากองค์ประกอบ <li> เป็นแบบโฮเวอร์ได้ จะไม่สามารถโฟกัสได้ เป็น ลิงก์ ภายใน <li> ที่โฟกัสได้ แต่เมนูย่อยไม่อยู่ในลิงก์ แต่ อยู่ติด กัน เราจำเป็นต้องใช้ตัวเลือกพี่น้องเพื่อแสดงเมนูย่อยเมื่อลิงก์อยู่ในโฟกัส

 li:hover .nav_sub_menu, a:focus + .nav_sub_menu { }

การปรับแต่งนี้หมายความว่าเราสามารถเห็นเมนูย่อยของเราเมื่อเราแตะไปที่รายการเมนูหลักบนแป้นพิมพ์ แต่จะเกิดอะไรขึ้นเมื่อคุณพยายามแท็บลงในเมนูย่อย

เราไม่สามารถแตะลิงก์ย่อย 'อาหารแช่แข็ง' ของ 'เรียกดูตามประเภท'
เราไม่สามารถแตะลิงก์ย่อย 'อาหารแช่แข็ง' ของ 'เรียกดูตามประเภท' ได้ (ตัวอย่างขนาดใหญ่)

เมื่อเราแท็บจากรายการเมนูหลัก โฟกัสจะเลื่อนไปที่ลิงก์แรกในเมนูย่อยตามที่คาดไว้ แต่สิ่งนี้จะย้ายโฟกัส ออก จากลิงก์เมนูหลัก ซึ่งหมายความว่าเมนูย่อยจะถูกซ่อนและรายการเมนูย่อยจะถูกลบออกจากลำดับแท็บอีกครั้ง!

นี่เป็นปัญหาที่สามารถแก้ไขได้ด้วย :focus-within ซึ่งช่วยให้คุณใช้การจัดสไตล์กับองค์ประกอบหลักได้หากองค์ประกอบนั้น หรือองค์ประกอบย่อยใดๆ ที่ มีโฟกัส ในกรณีนี้ เราต้องเพิ่มสามเท่า:

 li:hover .nav_sub_menu, /* hover over parent menu item, show child menu */ a:focus + .nav_sub_menu, /* focus onto parent menu item, show child menu */ .nav_sub_menu:focus-within { /* focus onto child menu item, keep showing child menu */ }

ขณะนี้เมนูของเราสามารถเข้าถึงแป้นพิมพ์ได้อย่างสมบูรณ์ผ่าน CSS บริสุทธิ์ ฉันชอบโซลูชัน CSS ที่สร้างสรรค์ แต่มีคำเตือนที่นี่: โซลูชัน "CSS เท่านั้น" ค่อนข้างมากในสถานการณ์ที่ล้มเหลวเมื่อพูดถึงการนำทางด้วยแป้นพิมพ์ การหลีกเลี่ยง JavaScript ไม่ได้ทำให้ไซต์สามารถเข้าถึงได้มากขึ้นเสมอไป

ขณะนี้เราสามารถแท็บผ่านรายการเมนูย่อยทั้งหมดได้
ขณะนี้เราสามารถแท็บผ่านรายการเมนูย่อยทั้งหมดได้ (ตัวอย่างขนาดใหญ่)

อันที่จริง เมนูที่ขับเคลื่อนด้วย JS อาจเป็นทางเลือกที่ดีกว่าในกรณีนี้ เนื่องจากเบราว์เซอร์รองรับโซลูชันนี้ค่อนข้างแย่ :focus-within ใช้ได้เฉพาะใน Chrome, Firefox และ Safari เท่านั้น แม้แต่ใน Chrome ฉันพบว่ามันเข้ากันไม่ได้กับ display: none ตรรกะใดที่ใช้แสดง/ซ่อนเมนูย่อย ฉันต้องซ่อนรายการเมนูโดยการตั้งค่า opacity: 0 แทน

ตกลง ฉันทำเสร็จแล้วสำหรับวันนี้ ถึงเวลาปิดท้ายด้วยโซเชียลมีเดียแล้ว

เฟสบุ๊ค

Facebook ทำงานได้อย่างยอดเยี่ยมที่นี่ โดยมอบมาสเตอร์คลาสในการเข้าถึงคีย์บอร์ด

ในการกด TAB ครั้งแรก เมนูที่ซ่อนอยู่จะเปิดขึ้น โดยมีทางลัดไปยังส่วนยอดนิยมของหน้าปัจจุบันและลิงก์ไปยังหน้ายอดนิยมอื่นๆ

เมนูซ่อน Facebook เปิดเผยตัวเลือกการเข้าถึง
เมนูที่ซ่อนอยู่ของ Facebook เผยให้เห็นตัวเลือกการช่วยสำหรับการเข้าถึง (ตัวอย่างขนาดใหญ่)

เมื่อคุณวนดูส่วนต่างๆ ของหน้าโดยใช้ปุ่มลูกศร ส่วนเหล่านั้นจะถูกเน้นเป็นภาพเพื่อให้คุณเห็นว่าคุณจะแท็บไปที่ใด

เมื่อฉันโฟกัสที่ตัวเลือก "นำทาง Facebook" ในเมนูแบบเลื่อนลง ส่วนที่เกี่ยวข้องจะถูกเน้นเป็นสีน้ำเงิน
เมื่อฉันโฟกัสที่ตัวเลือก 'นำทาง Facebook' ในเมนูแบบเลื่อนลง ส่วนที่เกี่ยวข้องจะถูกเน้นเป็นสีน้ำเงิน (ตัวอย่างขนาดใหญ่)

คุณลักษณะที่มีประโยชน์มากที่สุดคือ Facebook มีทางลัด OPT + / (หรือ ALT + / ) เพื่อกลับไปที่เมนูเมื่อใดก็ได้ โดยใช้แอตทริบิวต์ aria-keyshortcuts

 <div class="a11y-help"> Press opt + / to open this menu </div> <div aria-label="Navigation Assistant" aria-keyshortcuts="Alt+/" role="menubar"> <a class="screen-reader-shortcut" tabindex="1" href="#main-content"> Skip to main content </a> </div>

ต่างจากลิงก์ 'ข้ามไปยังเนื้อหาหลัก' ซึ่งสร้างขึ้นจากเทคโนโลยีการยึดแบบเนทีฟและ "ใช้งานได้" แอตทริบิวต์ aria-keyshortcuts กำหนดให้ผู้เขียนปรับใช้ลักษณะการทำงานของแป้นพิมพ์ทั้งหมด ดังนั้น คุณจะต้องเขียนบางส่วน JavaScript ที่กำหนดเองหากคุณต้องการใช้สิ่งนี้

นี่คือ JS บางส่วนที่ซ่อนและแสดงพื้นที่ menubar ซึ่งเป็นจุดเริ่มต้นที่มีประโยชน์:

 const a11yArea = document.querySelector('*[role="menubar"]'); document.addEventListener('keydown', (e) => { if (e.altKey && e.code === 'Slash') { a11yArea.style.display = a11yArea.style.display === 'block' ? 'none' : 'block'; } });

สรุป

การทดลองนี้เป็นประสบการณ์การใช้คีย์บอร์ดที่ยอดเยี่ยมและไม่ดี ฉันมีสามประเด็นหลัก

ให้มันมีสไตล์

จนถึงตอน นี้ ปัญหาการช่วยสำหรับการเข้าถึงคีย์บอร์ดที่พบบ่อยที่สุดที่ฉันพบในวันนี้คือการขาดสไตล์การโฟกัสสำหรับองค์ประกอบแบบแท็บได้ การระงับสไตล์การโฟกัสแบบเนทีฟโดยไม่กำหนดสไตล์การโฟกัสแบบกำหนดเองใดๆ ทำให้ยากอย่างยิ่ง แม้จะเป็นไปไม่ได้เลยที่จะรู้ว่าคุณอยู่ที่ใดบนหน้า การเอาเค้าร่างออกเป็นเรื่องปกติธรรมดาที่มีแม้กระทั่งไซต์ที่ทุ่มเทให้กับมัน

การทำให้มั่นใจว่าการจัดสไตล์โฟกัสแบบเนทีฟหรือแบบกำหนดเองนั้นมองเห็นได้เป็นสิ่งที่สร้างผลกระทบสูงสุดเพียงอย่างเดียวที่คุณสามารถทำได้ในด้านการเข้าถึงแป้นพิมพ์ และมักจะเป็นวิธีที่ง่ายที่สุดวิธีหนึ่ง กรณีง่าย ๆ ของการเพิ่มตัวเลือกเป็นสองเท่าในสไตล์ :hover ที่มีอยู่ของคุณ หากคุณทำสิ่งเดียวหลังจากอ่านบทความนี้แล้ว คุณควรค้นหา outline: 0 และ outline: none ใน CSS ของคุณ

ความหมายคือกุญแจสำคัญ

คุณพยายามเปิดลิงก์ในแท็บใหม่กี่ครั้งแล้ว เพื่อให้เปลี่ยนเส้นทางหน้าต่าง ปัจจุบัน ของคุณเท่านั้น มันเกิดขึ้นกับฉันทุก ๆ ครั้งและน่ารำคาญเหมือนเดิม ฉันโชคดีที่มันเป็นหนึ่งในปัญหาการใช้งานเพียงอย่างเดียวที่ฉันมักจะเผชิญเมื่อใช้งานเว็บ ปัญหาดังกล่าวเกิดขึ้นจากการใช้แพลตฟอร์มในทางที่ผิด

ลองดูรหัสนี้ที่นี่:

 <span>Click here</span>

ผู้ใช้ที่มองเห็นและมีความสามารถจะสามารถคลิกที่ <span> และถูกเปลี่ยนเส้นทางไปยัง Google อย่างไรก็ตาม เนื่องจากนี่คือ <span> และไม่ใช่ลิงก์หรือปุ่ม จึงไม่มีการโฟกัสได้โดยอัตโนมัติ ดังนั้นแป้นพิมพ์หรือโปรแกรมอ่านหน้าจอจึงไม่มีทางโต้ตอบกับมันได้

ผู้ใช้คีย์บอร์ดเป็นผู้ใช้ที่พึ่งพามาตรฐาน ในขณะที่กลุ่มประชากรที่มองเห็นได้นั้นได้รับสิทธิพิเศษเพียงพอที่จะสามารถโต้ตอบกับองค์ประกอบได้แม้ว่าจะไม่เป็นไปตามข้อกำหนดก็ตาม

ใช้คุณสมบัติดั้งเดิมของแพลตฟอร์ม เขียน HTML ที่ดีและสะอาด และใช้ตัวตรวจสอบความถูกต้อง เช่น https://validator.w3.org เพื่อตรวจจับสิ่งต่างๆ เช่น แอตทริบิวต์ href ที่ขาดหายไปบนจุดยึดของคุณ

เนื้อหาสำคัญ

คุณอาจจำเป็นต้องแสดงประกาศเกี่ยวกับคุกกี้ แบบฟอร์มสมัครสมาชิก โฆษณาหรือประกาศการบล็อกโฆษณา

ทำทุกอย่างที่ทำได้เพื่อทำให้ประสบการณ์เหล่านี้ไม่สร้างความรำคาญ หากคุณไม่สามารถทำให้พวกเขาไม่สร้างความรำคาญได้ อย่างน้อยก็ทำให้พวกเขาถูกมองข้าม

ผู้ใช้จะอยู่ที่นั่นเพื่อดูเนื้อหาของคุณ ไม่ใช่แบนเนอร์ของคุณ ดังนั้นให้ใส่องค์ประกอบที่ปิดได้เหล่านี้ไว้ก่อนใน DOM ของคุณ เพื่อให้สามารถปิดได้อย่างรวดเร็ว หรือกลับไปใช้ tabindex="1" หากคุณไม่สามารถย้ายได้

สุดท้าย สนับสนุนผู้ใช้ของคุณในการเข้าถึงเนื้อหาของคุณโดยเร็วที่สุดโดยใช้ลิงก์ 'ข้ามไปยังเนื้อหาหลัก' Holy Grail

โปรดคอยติดตามบทความถัดไปในซีรีส์นี้ ซึ่งฉันจะต่อยอดจากเทคนิคเหล่านี้เมื่อฉันใช้โปรแกรมอ่านหน้าจอเป็นเวลาหนึ่งวัน