วิธีตรวจสอบคอนทราสต์สีโดยไม่ต้องติดตั้งอะไรเพิ่ม
เวิร์กโฟลว์ที่ใช้งานได้จริงโดยเริ่มจากเบราว์เซอร์ สำหรับตรวจข้อความ ปุ่ม สถานะโฟกัส แผนภูมิ และโอเวอร์เลย์บนภาพ ให้สอดคล้องกับข้อกำหนดคอนทราสต์ของ WCAG
สารบัญ
- กฎคอนทราสต์ที่คุณจำเป็นต้องใช้จริง
- เริ่มจากหน้าที่เรนเดอร์จริง ไม่ใช่ไฟล์ดีไซน์
- สร้างรายการตรวจสอบเล็ก ๆ ก่อน
- ตรวจ text contrast ใน DevTools
- ตรวจพื้นหลังจริง รวมถึง opacity
- อย่าลืมสถานะต่าง ๆ
- ใช้ Lighthouse ได้ แต่อย่ามอบการตัดสินใจทั้งหมดให้มัน
- ตรวจ non-text contrast ด้วย
- บันทึกผลในรูปแบบที่นักพัฒนาใช้ได้
- แก้ให้แข็งแรงกว่าขั้นต่ำเล็กน้อย
- เช็กลิสต์ตรวจคอนทราสต์แบบไม่ต้องติดตั้งอะไร
การตรวจสอบคอนทราสต์สีมักถูกมองว่าเป็นงานด้าน accessibility สำหรับผู้เชี่ยวชาญ: เปิดไฟล์ดีไซน์ ติดตั้งปลั๊กอิน ส่งออกภาพหน้าจอ รันรายงาน แล้วถกเถียงเรื่องสีแบรนด์ วิธีนั้นอาจมีประโยชน์ แต่ไม่ใช่จุดที่ทีมส่วนใหญ่ควรเริ่มต้น
สำหรับเว็บไซต์ที่ใช้งานจริง การตรวจสอบที่เร็วและเชื่อถือได้ที่สุดมักทำได้ในเบราว์เซอร์ที่คุณเปิดใช้อยู่แล้ว Modern browser DevTools สามารถตรวจ computed colors แสดง contrast ratios เปิดเผยสไตล์ของสถานะต่าง ๆ และช่วยทดสอบกรณียุ่งยากที่รายงานอัตโนมัติมักพลาด
คู่มือนี้ตั้งอยู่บนสมมติฐานว่าคุณจะไม่ติดตั้งอะไรเลย ไม่มี browser extensions ไม่มี design plugins ไม่มีชุดตรวจสอบแบบเสียเงิน มีแค่หน้าเว็บ เบราว์เซอร์ และวิธีการง่าย ๆ
กฎคอนทราสต์ที่คุณจำเป็นต้องใช้จริง
สำหรับงานเว็บส่วนใหญ่ WCAG contrast สรุปเป็นเกณฑ์ไม่กี่ข้อ:
- ข้อความปกติ: ต้องมีคอนทราสต์กับพื้นหลังอย่างน้อย 4.5:1
- ข้อความขนาดใหญ่: อย่างน้อย 3:1 WCAG ให้นิยามไว้ประมาณ 24 CSS pixels หรือประมาณ 18.66 CSS pixels หากเป็นตัวหนา
- UI components and graphical objects: อย่างน้อย 3:1 สำหรับขอบเขต ไอคอน สถานะ และส่วนของแผนภูมิที่มีความหมายและจำเป็นต่อการเข้าใจอินเทอร์เฟซ
- Enhanced contrast: 7:1 สำหรับข้อความปกติ และ 4.5:1 สำหรับข้อความขนาดใหญ่ หากคุณตั้งเป้าให้สูงกว่าระดับพื้นฐาน
มีข้อยกเว้นบางอย่าง เช่น คอนโทรลที่ไม่ทำงาน องค์ประกอบตกแต่ง และโลโก้ ใช้ข้อยกเว้นเหล่านี้อย่างระมัดระวัง “มันเป็นส่วนหนึ่งของแบรนด์” ไม่ใช่ข้อยกเว้น แต่เป็นข้อจำกัดทางการออกแบบ
และอย่าลืมว่าคอนทราสต์เป็นเพียงส่วนหนึ่งของการใช้สีให้เข้าถึงได้ หากสถานะข้อผิดพลาดสีแดงมีคอนทราสต์เพียงพอ แต่ไม่มีข้อความ ป้ายกำกับไอคอน หรือการบ่งชี้เชิงโปรแกรม ก็ยังอาจทำให้ผู้ใช้ที่แยกสีแดงจากสีใกล้เคียงไม่ได้ใช้งานลำบากอยู่ดี
เริ่มจากหน้าที่เรนเดอร์จริง ไม่ใช่ไฟล์ดีไซน์
ไฟล์ดีไซน์มีประโยชน์ แต่ไม่ได้รวมตัวแปรในโลกจริงทั้งหมด: CSS overrides, opacity, hover states, browser font rendering, user zoom, dark mode, inherited styles, CMS content และ marketing embeds
ตรวจสอบหน้าเว็บในแบบที่ผู้ใช้ได้รับจริง
เปิดหน้าเว็บในเบราว์เซอร์เดสก์ท็อปเวอร์ชันปัจจุบัน Chrome, Edge, Firefox และ Safari ล้วนมีเครื่องมือตรวจสอบที่เป็นประโยชน์ ป้ายกำกับอาจต่างกันเล็กน้อย แต่เวิร์กโฟลว์เหมือนกัน:
- คลิกขวาที่ข้อความหรือ UI element
- เลือก Inspect
- หา computed
colorและbackground-color - ใช้ color swatch หรือ accessibility panel ของเบราว์เซอร์เพื่ออ่าน contrast ratio
- บันทึกว่า pass, fail และจุดที่ยังไม่แน่ใจ
ในเบราว์เซอร์ที่ใช้ Chromium ตัว color picker มักแสดง contrast ratio และคำแนะนำ pass/fail ตาม WCAG สำหรับข้อความ Firefox DevTools ก็แสดงข้อมูล accessibility และเครื่องมือสีเช่นกัน ส่วน Safari’s Web Inspector สามารถแสดง computed styles และข้อมูล accessibility ได้ แม้เวิร์กโฟลว์จะแตกต่างเล็กน้อย
ประเด็นสำคัญไม่ใช่เบราว์เซอร์ตัวใดตัวหนึ่ง แต่คือการอ่าน computed result ไม่ใช่ค่าที่ใครบางคนคิดว่าคอมโพเนนต์นั้นใช้
สร้างรายการตรวจสอบเล็ก ๆ ก่อน
อย่าสุ่มตรวจข้อความไปเรื่อย ๆ จนหมดแรง ให้ทำรายการสั้น ๆ ของแพตเทิร์นก่อน:
- Body text บนพื้นหลังหลักของหน้า
- ข้อความจาง คำบรรยาย metadata และ placeholders
- ลิงก์ในสถานะ normal, hover, visited และ focus
- ปุ่ม primary, secondary และ destructive
- ป้ายกำกับฟอร์ม ข้อความช่วยเหลือ ข้อผิดพลาด และข้อความสำเร็จ
- รายการนำทาง breadcrumbs และ tabs
- Cards, badges, pills และ tags
- ไอคอนที่สื่อความหมาย
- แผนภูมิ แผนที่ progress bars และสีสถานะ
- ข้อความบนภาพ วิดีโอ gradients หรือ translucent overlays
แค่นี้ก็เพียงพอที่จะพบปัญหาส่วนใหญ่ในเว็บไซต์ทั่วไป และยังช่วยผูกการตรวจสอบกับคอมโพเนนต์ ไม่ใช่พิกเซลเฉพาะจุด
หากการตรวจสอบของคุณรวมถึงปุ่ม ให้ตรวจคอนทราสต์ควบคู่กับพื้นฐานใน เช็กลิสต์ปุ่มเว็บที่เข้าถึงได้ของเรา ปัญหาคอนทราสต์ของปุ่มมักอยู่ข้าง ๆ ปัญหา focus states ที่หายไป ป้ายกำกับที่ไม่ชัดเจน หรือพฤติกรรมคีย์บอร์ดที่เสีย
ตรวจ text contrast ใน DevTools
สำหรับข้อความธรรมดาบนพื้นหลังสีทึบ เบราว์เซอร์มักคำนวณคอนทราสต์ให้คุณได้
Inspect องค์ประกอบนั้น แล้วมองหา property color เปิด color picker จาก swatch หากเบราว์เซอร์ระบุพื้นหลังได้ ก็จะแสดง contrast ratio เครื่องมือบางตัวอาจวาดเส้นใน color picker เพื่อบอกว่าสีจะผ่าน 3:1, 4.5:1 หรือ 7:1 ตรงจุดใด
เมื่อเบราว์เซอร์รายงานว่าไม่ผ่าน ให้เชื่อไว้ก่อนจนกว่าคุณจะพิสูจน์ได้ว่าไม่ใช่ เมื่อรายงานว่าผ่าน ก็ยังต้องใช้วิจารณญาณ ตัวอักษรเล็กบาง จอคุณภาพต่ำ anti-aliasing หนัก และพื้นหลังที่ยุ่ง อาจทำให้ข้อความที่ผ่านตามเทคนิคแล้วยังดูอ่านยากได้
กฎที่ใช้ได้จริง: หาก body text เพิ่งผ่านแบบเฉียด ๆ ที่ 4.55:1 อย่าเพิ่งดีใจ ให้เว้นระยะปลอดภัยมากกว่านั้น ข้อกำหนดคอนทราสต์คือขั้นต่ำ ไม่ใช่เป้าหมายในอุดมคติ
Typography ก็สำคัญเช่นกัน ระบบตัวอักษรที่ใหญ่ขึ้นและชัดขึ้นช่วยลดภาระการอ่านได้ก่อนที่คุณจะต้องปรับสีเสียอีก หากหน้าดูอ่านยากแม้คอนทราสต์ผ่านแล้ว ให้กลับไปทบทวน line length, size, weight และ spacing ด้วยมุมมองด้าน readability ที่กว้างขึ้น เช่น คู่มือใช้งานจริงเพื่อ type ที่อ่านง่ายบนเว็บยุคใหม่
ตรวจพื้นหลังจริง รวมถึง opacity
ข้อผิดพลาดด้านคอนทราสต์จำนวนมากเกิดขึ้นเพราะพื้นหลังที่มองเห็นไม่ใช่พื้นหลังที่ประกาศไว้
กับดักที่พบบ่อย ได้แก่:
- ข้อความใน card แบบกึ่งโปร่งใส
- ข้อความบน parent ที่ใช้
opacity - Overlays ที่ใช้
rgba()หรือcolor-mix() - Gradients หลัง headings
- Background images ที่เปลี่ยนไปตามพื้นที่ด้านหลังข้อความ
- Theme variables ที่เปลี่ยนใน dark mode
หาก DevTools คำนวณคอนทราสต์อย่างมั่นใจไม่ได้ ให้ระบุสี foreground และ background ที่เรนเดอร์ออกมาจริงด้วยตนเอง ใช้ computed styles panel ปิดเลเยอร์ชั่วคราว หรือ sampling สีที่มองเห็นด้วย built-in color picker หากเบราว์เซอร์ของคุณรองรับ
สำหรับข้อความบนภาพ อย่า sample จากส่วนที่สวยที่สุดของภาพ ให้ sample จากบริเวณที่เป็นไปได้ว่าแย่ที่สุดด้านหลังข้อความ หากภาพเปลี่ยนผ่าน CMS uploads, carousels หรือ responsive crops นี่ไม่ใช่ระบบคอนทราสต์ที่เสถียร ควรเพิ่ม overlay ที่เชื่อถือได้ text shadow กล่องทึบ หรือ gradient treatment ที่ปกป้องข้อความได้ไม่ว่าภาพจะเป็นอย่างไร
ระบบ image overlay ที่ดีมักน่าเบื่อ: ความเข้ม overlay เท่ากัน พื้นที่ crop คาดเดาได้ และมีคอนทราสต์เพียงพอแม้เป็นภาพสว่าง ความน่าเบื่อไม่ใช่ปัญหา ผู้ใช้กำลังพยายามอ่าน
อย่าลืมสถานะต่าง ๆ
ภาพหน้าจอแบบ static พลาดปัญหาคอนทราสต์จำนวนมาก ตรวจสถานะการโต้ตอบโดยตรงในเบราว์เซอร์
ใน DevTools ให้ force pseudo-classes เช่น:
:hover:focus:focus-visible:active:visited:disabled:checked:invalid
จากนั้นตรวจ computed colors อีกครั้ง
Focus indicators ควรได้รับความสนใจเป็นพิเศษ WCAG 2.2 เพิ่มความคาดหวังเรื่องรูปลักษณ์ของ focus และเส้นขอบสีฟ้าอ่อนบน card สีเทาอ่อนก็ยังเป็นปัญหาที่พบได้บ่อย ตัว focus indicator ต้องมีคอนทราสต์เพียงพอกับสีที่อยู่ติดกัน และมีพื้นที่มากพอให้สังเกตเห็นได้
สำหรับ disabled controls กฎคอนทราสต์ของ WCAG มีข้อยกเว้นสำหรับ inactive components แต่นั่นไม่ได้หมายความว่า disabled controls ควรอ่านไม่ออกโดยค่าเริ่มต้น หากสถานะ disabled สื่อข้อมูลที่เป็นประโยชน์ ก็ควรอ่านได้ หากไม่สื่อข้อมูลอะไร ลองพิจารณาว่าจำเป็นต้องแสดงอยู่หรือไม่
ใช้ Lighthouse ได้ แต่อย่ามอบการตัดสินใจทั้งหมดให้มัน
Browser audits เช่น Lighthouse ช่วยจับปัญหาคอนทราสต์บางอย่างได้อย่างรวดเร็ว รัน built-in audit หากเบราว์เซอร์ของคุณมี แล้วใช้ผลลัพธ์เป็นจุดเริ่มต้น
Automated checks เก่งในการค้นหา text nodes ที่มี computed contrast failures ชัดเจน แต่จะอ่อนกว่าในเรื่อง:
- ข้อความที่ฝังอยู่ในภาพ
- Labels ที่เรนเดอร์ด้วย canvas
- กรณีขอบของ SVG
- ปัญหาที่เกิดเฉพาะ hover
- คุณภาพของ focus indicator
- แผนภูมิที่ความสัมพันธ์ของสีสื่อความหมาย
- คอมโพเนนต์ที่ซ่อนอยู่หลัง authentication, menus หรือ form steps
หากรายงานออกมาเป็นสีเขียว คุณยังต้องตรวจคอมโพเนนต์ตัวแทนอยู่ดี หากรายงานออกมาเป็นสีแดง อย่าตื่นตระหนก ให้จัดลำดับปัญหาตามผลกระทบต่อผู้ใช้ หลักการเดียวกันนี้ใช้กับรายงาน performance และ accessibility โดยทั่วไปด้วย: อ่านผลจากเครื่องมือเป็นหลักฐาน ไม่ใช่คำตัดสิน เราใช้มุมมองนี้ใน คู่มือการอ่านรายงาน Lighthouse โดยไม่ตื่นตระหนกของเรา และนำมาใช้กับเรื่องนี้ได้อย่างตรงไปตรงมา
ตรวจ non-text contrast ด้วย
ข้อความได้รับความสนใจมากที่สุด แต่ WCAG ยังครอบคลุม non-text content ที่จำเป็นต่อการเข้าใจหรือใช้งานอินเทอร์เฟซด้วย
ตรวจอย่างน้อยกรณีเหล่านี้:
- Input borders เทียบกับพื้นหลังของหน้า
- Checkbox และ radio outlines
- Toggle states
- Icon-only buttons
- Error icons และ warning symbols
- Chart lines, bars และ labels
- Progress indicators
- Selected tab หรือ active navigation indicators
เป้าหมายมักเป็น 3:1 เมื่อเทียบกับสีที่อยู่ติดกัน ตัวอย่างเช่น input border สีเทาอ่อนบนพื้นหลังสีขาวอาจแทบมองไม่เห็น แผนภูมิที่มีเส้นสีพาสเทลห้าเส้นอาจดูสง่างาม แต่ยังใช้งานไม่ได้
สำหรับแผนภูมิ คอนทราสต์เพียงอย่างเดียวไม่พอ ใช้ labels, patterns, line styles, direct annotation หรือ spacing เพื่อให้ข้อมูลไม่ได้พึ่งพาเฉพาะสี สิ่งนี้ช่วยผู้ใช้ตาบอดสี ผู้ใช้สายตาเลือนราง คนที่ดูหน้าจอกลางแสงจ้า และใครก็ตามที่อ่านภาพหน้าจอในเอกสาร
บันทึกผลในรูปแบบที่นักพัฒนาใช้ได้
การตรวจคอนทราสต์ที่มีประโยชน์ไม่ควรพูดว่า “สีเทาบางอันไม่ผ่าน” แต่ควรระบุคอมโพเนนต์ สถานะ ค่าปัจจุบัน เกณฑ์ที่คาดหวัง และข้อเสนอแนะในการแก้ไข
รูปแบบที่กระชับใช้ได้ดี:
| คอมโพเนนต์ | สถานะ | Foreground | Background | Ratio | Target | Result | ข้อเสนอแนะการแก้ไข | |---|---:|---:|---:|---:|---:|---|---| | Card metadata | Default | #8A8F98 | #FFFFFF | 3.2:1 | 4.5:1 | Fail | ใช้ --color-text-muted-strong | | Primary button | Hover | #FFFFFF | #2F6FEA | 4.8:1 | 4.5:1 | Pass | คงไว้ | | Input border | Default | #D7DCE2 | #FFFFFF | 1.4:1 | 3:1 | Fail | ทำให้ border token เข้มขึ้น |
ผูกการแก้ไขเข้ากับ design tokens หากไซต์มี อย่า patch คอมโพเนนต์ทีละยี่สิบจุด หาก token ที่อ่อนเกินไปเพียงตัวเดียวคือปัญหาจริง
แก้ให้แข็งแรงกว่าขั้นต่ำเล็กน้อย
ปัญหาคอนทราสต์มักแก้แบบไม่ดีได้ง่าย ทีมปรับสีไปทีละนิดจน checker บอกว่า 4.51:1 แล้วก็ไปต่อ วิธีนี้ไม่เหลือ margin สำหรับ font rendering, transparency, browser differences, theming, image variance หรือการแก้สีแบรนด์ในอนาคต
ควรตั้งเป้าที่อ่านสบาย:
- Body text: เข้าใกล้ 7:1 เมื่อทำได้จริง
- Muted text: ยังควรสูงกว่า 4.5:1 หากเป็นเนื้อหาจริง
- UI borders และ icons: สูงกว่า 3:1 อย่างสบาย
- Text over images: ใช้ overlay ที่ควบคุมได้ แทนการเดาเป็นภาพ ๆ
เว็บถูกดูบนแล็ปท็อปราคาถูก โทรศัพท์ที่หรี่แสง ทางเท้ากลางแดด จอมอนิเตอร์ที่ติดฟิล์มสี และหน้าจอที่เสื่อมตามเวลา การผ่านขั้นต่ำไม่ใช่สิ่งเดียวกับการอ่านอย่างสบาย
<!-- tool-cta:start -->
💡 ลองทำสิ่งนี้: เมื่อคุณตรวจสอบคู่คอนทราสต์ที่ดึงมาจาก DevTools, Color Converter จะช่วยแปลงระหว่าง hex, RGB และ HSL เพื่อให้ค่าตรงกับบันทึกการตรวจสอบของคุณ
<!-- tool-cta:end -->
เช็กลิสต์ตรวจคอนทราสต์แบบไม่ต้องติดตั้งอะไร
ใช้ลำดับนี้เมื่อต้องการตรวจอย่างรวดเร็วแต่เชื่อถือได้:
- เปิดหน้า production ในเบราว์เซอร์สมัยใหม่
- ทำรายการแพตเทิร์นหลักของข้อความ UI และสถานะ
- ตรวจ computed foreground และ background colors ใน DevTools
- ใช้ built-in color picker หรือ accessibility panel เพื่ออ่านคอนทราสต์
- Force สถานะ hover, focus, active, visited และ invalid
- ตรวจข้อความบนภาพและ gradients เทียบกับพื้นหลังที่แย่ที่สุดซึ่งเป็นไปได้
- ตรวจส่วน UI ที่ไม่ใช่ข้อความตามข้อกำหนด 3:1
- รัน built-in automated audit เป็น safety net ไม่ใช่การตรวจทั้งหมด
- บันทึกปัญหาตามคอมโพเนนต์และ token
- แก้โดยเผื่อ margin ไม่ใช่แค่ข้ามเกณฑ์แบบเฉียด ๆ
เท่านี้ก็เพียงพอที่จะจับปัญหาคอนทราสต์ส่วนใหญ่ได้โดยไม่ต้องเพิ่มเครื่องมืออีกตัวในสแต็กของคุณ การตรวจขั้นสูงยังมีที่ทางของมัน โดยเฉพาะสำหรับ design systems ขนาดใหญ่ ผลิตภัณฑ์ที่มีข้อกำกับดูแล หรือ data visualization ที่ซับซ้อน แต่สำหรับหลายเว็บไซต์ เบราว์เซอร์ให้หลักฐานที่คุณต้องการอยู่แล้ว ส่วนที่ยากคือการมีระบบมากพอที่จะใช้มันให้เต็มที่