Trình kiểm tra tương phản màu
Kiểm tra tỷ lệ tương phản WCAG 2.1 cho khả năng tiếp cận.
Cách sử dụng
- Chọn màu tiền cảnh (văn bản) và màu nền.
- Tỷ lệ tương phản được cập nhật ngay lập tức.
- Kiểm tra xếp hạng WCAG (AA/AAA) cho văn bản bình thường và lớn.
- Nhấp Hoán đổi để đảo các màu.
Câu hỏi thường gặp
WCAG là gì?
WCAG (Web Content Accessibility Guidelines) là các tiêu chuẩn quốc tế để làm cho nội dung web dễ tiếp cận. Cấp AA là tiêu chuẩn yêu cầu phổ biến nhất. Cấp AAA là cao nhất.
Cái gì được coi là «văn bản lớn»?
Văn bản lớn được định nghĩa là ít nhất 18 pt (24 px) hoặc 14 pt (18,66 px) đậm. Nó có yêu cầu tương phản thấp hơn vì nó dễ đọc hơn.
Tỷ lệ tương phản nào để hướng tới?
Đối với phần thân văn bản, hướng tới ít nhất 4,5 : 1 (AA). Để có khả năng tiếp cận tốt nhất, hướng tới 7 : 1 (AAA). Tiêu đề và văn bản lớn cần ít nhất 3 : 1.
WCAG thực sự đo lường điều gì
«Độ tương phản» trong khả năng tiếp cận web không phải là «màu sắc trông khác nhau như thế nào», mà là một tỷ lệ độ sáng tương đối chính xác giữa hai màu. Độ sáng là giá trị gần đúng theo nhận thức về độ sáng của màu đối với người quan sát có thị lực bình thường. Tỷ lệ chạy từ 1:1 (hai màu có độ sáng giống nhau, vô hình với nhau) đến 21:1 (đen thuần #000000 so với trắng thuần #ffffff). Ba tiêu chí thành công WCAG chuẩn sử dụng tỷ lệ này:
- 1.4.3 Contrast (Minimum), Level AA: ít nhất 4,5:1 cho văn bản thường, 3:1 cho văn bản lớn.
- 1.4.6 Contrast (Enhanced), Level AAA: ít nhất 7:1 thường, 4,5:1 lớn.
- 1.4.11 Non-text Contrast, Level AA (thêm vào trong WCAG 2.1), ít nhất 3:1 cho các thành phần UI và đối tượng đồ họa có ý nghĩa so với màu liền kề.
Ngưỡng 4,5:1 không phải tùy tiện. Cách dẫn xuất riêng của WCAG dùng đường cơ sở ANSI 3:1 cho thị lực bình thường nhân với 1,5 cho người dùng có thị lực 20/40 (ngưỡng thường được dùng để xác định «thị lực kém» về mặt pháp lý). 4,5 = 3 × 1,5. Ngưỡng AAA 7:1 mở rộng logic tương tự cho thị lực khoảng 20/80. Logo, tên thương hiệu, và văn bản ngẫu nhiên hoặc trang trí được miễn trừ, nhưng mọi thứ khác đều phải tuân theo quy tắc.
Công thức
Công thức tương phản trong kỹ thuật G18 của WCAG có ba bước. Đầu vào là các giá trị kênh sRGB 8-bit (0-255), mỗi giá trị được chuyển đổi sang phạm vi 0-1 trước:
- Tuyến tính hóa sRGB (hoàn tác đường cong gamma). Với mỗi kênh V: nếu V ≤ 0,04045, V_linear = V ÷ 12,92; ngược lại V_linear = ((V + 0,055) ÷ 1,055)^2,4. (Các tài liệu WCAG cũ dùng 0,03928; W3C đã cập nhật errata thành 0,04045 để khớp với đặc tả sRGB chính thức, sự khác biệt về số là không đáng kể.)
- Tính độ sáng tương đối: L = 0,2126·R + 0,7152·G + 0,0722·B (đã tuyến tính hóa). Các trọng số lấy từ hàm độ sáng quang học của người quan sát chuẩn CIE 1931, mắt người nhạy cảm nhất với màu xanh lá (~71%), rồi đến đỏ (~21%), rồi xanh lam (~7%). Đây là lý do tại sao văn bản xanh lam thuần trên nền trắng có thể không đạt tương phản dù các màu trông rất khác nhau.
- Tính tỷ lệ: (L1 + 0,05) ÷ (L2 + 0,05), trong đó L1 là màu sáng hơn và L2 là màu tối hơn. Độ lệch 0,05 mô phỏng ánh sáng môi trường trên màn hình thông thường, và ngăn tỷ lệ bị tràn khi một màu gần đen.
Ví dụ tính toán cho đen trên trắng: trắng có L = 1,0, đen có L = 0, vì vậy tỷ lệ là (1 + 0,05) ÷ (0 + 0,05) = 21. Đó là độ tương phản tối đa có thể trong sRGB.
Thế nào được tính là «văn bản lớn»?
WCAG định nghĩa văn bản cỡ lớn là ít nhất 18 point (độ đậm thường) hoặc 14 point đậm. Quy đổi sang CSS pixels theo tỷ lệ 1pt = 1,333px do W3C công bố:
- 18pt = 24px thường
- 14pt đậm = 18,66px đậm
Hầu hết trình duyệt mặc định văn bản thân trang là 16px / 12pt, không phải cỡ lớn. Một lỗi phổ biến là coi mọi tiêu đề là cỡ lớn; một <h3> được định kiểu ở 18px thường vẫn thuộc quy tắc văn bản thường 4,5:1.
Trường hợp biên nổi tiếng: #767676 trên nền trắng
Nhà thiết kế theo đuổi chủ nghĩa tối giản thường chọn màu xám trung tính cho văn bản. Hai giá trị trông giống nhau với mắt thường lại nằm ở hai phía đối lập của ngưỡng WCAG:
| Màu nền trước | Màu nền sau | Tỷ lệ | AA Bình thường |
|---|---|---|---|
| #000000 | #ffffff | 21.00 | Đạt (tối đa) |
| #595959 | #ffffff | ~7.0 | Đạt + AAA |
| #767676 | #ffffff | 4.54 | Đạt (vừa đủ) |
| #777777 | #ffffff | 4.48 | Không đạt |
| #959595 | #ffffff | 3.00 | Không đạt (chỉ cỡ lớn) |
| #ffff00 | #ffffff | 1.07 | Không đạt |
Một lần dịch chuyển hex một ký tự, sự khác biệt giữa #767676 và #777777: chuyển màu xám trông giống nhau từ đạt sang không đạt, vì WCAG cấm rõ ràng việc làm tròn tỷ lệ lên. WebAIM đặc biệt chỉ ra #777777 là «màu xám được dùng phổ biến» không đáp ứng AA. Điểm này tạo ra một phần đáng kể lỗi kiểm tra tự động trong các lần quét site thực tế.
Điểm yếu của công thức
Công thức độ sáng tương đối nhanh và xác định, nhưng có những điểm yếu về nhận thức đã được ghi nhận rõ:
- Đối xứng. WCAG 2 trả về cùng tỷ lệ dù bạn đặt văn bản sáng trên nền tối hay văn bản tối trên nền sáng. Các nghiên cứu đọc thực nghiệm cho thấy sáng-trên-tối cần nhiều hơn độ tương phản so với tối-trên-sáng để cảm thấy dễ đọc như nhau, một phần do giãn đồng tử và «ánh hào quang» trên các ký tự sáng trên nền tối. Các giao diện dark mode đạt WCAG 2 AA vẫn có thể trông nhạt màu.
- Mù không gian. Công thức bỏ qua độ đậm font, độ dày nét, và cỡ font ngoài ngưỡng Văn bản Lớn. Font 18px mảnh và font 18px độ đậm 900 được xử lý giống nhau.
- Vượt ngưỡng dark mode. Theo tài liệu APCA, công thức thường xuyên đánh giá quá cao độ tương phản cho màu tối. Hai màu xám tối đạt WCAG 2 về mặt toán học có thể không phân biệt được về mặt thị giác trên màn hình thực.
APCA (Accessible Perceptual Contrast Algorithm) là ứng viên thay thế đang được thử nghiệm cho WCAG 3. Nó trả về một giá trị Lc có dấu duy nhất từ khoảng −108 đến +106, nhận biết cực tính, và bao gồm bảng tra font-weight / cỡ chữ. APCA hiện là tài liệu tham khảo phi thương mại beta, không phải mục tiêu tuân thủ pháp lý (các site production vẫn nên nhắm WCAG 2.1 / 2.2 AA) nhưng là kiểm tra khả năng đọc chính xác hơn, đặc biệt cho dark mode. Chrome DevTools có bản xem trước APCA tích hợp trong color picker.
Tại sao điều này quan trọng về mặt pháp lý
WCAG 2.2 trở thành Khuyến nghị W3C vào ngày 5 tháng 10 năm 2023, nhưng các tiêu chí tương phản tiếp tục không thay đổi so với 2.1. Tương phản màu sắc là một trong những vấn đề được trích dẫn nhiều nhất trong các vụ kiện về khả năng tiếp cận kỹ thuật số, và một số khu vực pháp lý thực tế đã bắt buộc điều này:
- Hoa Kỳ, Section 508 (cập nhật năm 2017) được hài hòa với WCAG 2.0 AA, vì vậy 4,5:1 là bắt buộc cho mua sắm liên bang. Các phán quyết tòa án của ADA Title III liên tục trích dẫn WCAG AA là tiêu chuẩn thực tế cho các site thương mại đối mặt công chúng. DOJ đã thông qua quy tắc Title II vào tháng 4 năm 2024 yêu cầu nội dung web của chính quyền tiểu bang và địa phương đáp ứng WCAG 2.1 AA, với các thời hạn theo giai đoạn vào cuối thập kỷ này.
- Liên minh Châu Âu, EN 301 549 tích hợp WCAG 2.1 AA. Hạn tuân thủ của Đạo luật Khả năng Tiếp cận Châu Âu (Chỉ thị 2019/882) là ngày 28 tháng 6 năm 2025, bao gồm trang web, ứng dụng di động, thương mại điện tử, ngân hàng, sách điện tử và nhiều hơn nữa. Doanh nghiệp siêu nhỏ được miễn trừ đối với dịch vụ. Hình phạt của các quốc gia thành viên khác nhau.
- Vương quốc Anh, Đạo luật Bình đẳng 2010: nghĩa vụ «điều chỉnh hợp lý» áp dụng cho cả khu vực tư nhân và công cộng. Các cơ quan khu vực công bị ràng buộc bởi quy định về khả năng tiếp cận năm 2018 tích hợp EN 301 549 / WCAG 2.1 AA.
- Canada, AODA (Ontario) và Đạo luật Canada Có thể Tiếp cận liên bang yêu cầu WCAG 2.0 AA, với các thời hạn theo giai đoạn của AODA đã qua từ lâu.
Tương phản màu so với mù màu
Một điểm nhầm lẫn phổ biến: tỷ lệ WCAG dựa trên độ sáng và vẫn hữu ích cho hầu hết người dùng mù màu; tỷ lệ 4,5:1 dẫn xuất từ độ sáng tương ứng với tín hiệu nhận thức mạnh ngay cả khi mất các tín hiệu màu sắc. Đó là lý do tại sao các tiêu chí tương phản đặt cạnh một tiêu chí riêng, 1.4.1 Sử dụng Màu sắc, cấm dựa vào màu sắc một mình để truyền tải thông tin. Tương phản không cho biết biểu đồ đỏ-xanh lá có thể đọc được với người mù màu (deuteranope) hay không, chỉ cho biết mỗi màu riêng lẻ có tương phản với nền biểu đồ hay không. Biểu đồ và UI có trạng thái cần các mẫu, nhãn hoặc hình dạng xếp chồng lên màu sắc.
Danh sách kiểm tra thực tế
- Văn bản thân trên trắng: giữ ở
#595959hoặc tối hơn để đạt AAA;#767676là màu xám nhạt nhất vẫn đạt AA Normal. - Màu xanh thương hiệu: nhiều màu nằm trong khoảng 3-4,5.
#1976d2là màu xanh Material điển hình ở khoảng 4,59:1, vừa đủ đạt AA Normal trên trắng.#42a5f5ở khoảng 2,6:1 không đạt. - Viền form: viền
1px solid #ccctrên trắng khoảng 2,13:1, không đạt 1.4.11. Dùng#767676hoặc tối hơn. - Chỉ báo focus phải đạt 3:1 so với nền. Đường viền mặc định của trình duyệt thường bị ghi đè bởi CSS reset mà không có thay thế đáp ứng ngưỡng.
- Văn bản placeholder về mặt kỹ thuật là ngẫu nhiên nhưng người dùng vẫn đọc, hãy xử lý như thể 4,5:1 được áp dụng.
- Đừng tin vào mắt khi dùng dark mode. Tỷ lệ WCAG 2 thường xuyên đạt ngưỡng quá mức cho nền tối. Kiểm tra chéo với APCA trong Chrome DevTools.
Thêm câu hỏi
Tại sao vàng thuần trên trắng không đạt dù trông sáng?
Vàng (#ffff00) trên trắng là 1,07:1, gần như không có độ tương phản. Công thức độ sáng gán trọng số cho xanh lá là 71% và đỏ là 21%, vì vậy màu vàng (R+G) có độ sáng rất gần với màu trắng. Vàng trên đen, ngược lại, là 19,56:1, một trong những tổ hợp dễ đọc nhất được biết đến, đó là lý do nó được dùng cho biển báo đường và cảnh báo mũ bảo hiểm.
Tôi có nên luôn nhắm mục tiêu AAA không?
Không. WCAG chính thức nói: «Không khuyến nghị yêu cầu tuân thủ Level AAA như chính sách chung cho toàn bộ site vì không thể đáp ứng tất cả Tiêu chí Thành công Level AAA cho một số nội dung.» AA là mục tiêu pháp lý ở hầu hết mọi nơi; AAA dành cho nội dung thông tin có tầm quan trọng cao (nội dung dài, tài liệu chính phủ dành cho công chúng, ấn phẩm ưu tiên khả năng tiếp cận).
Công cụ tự động có thể phát hiện mọi lỗi tương phản không?
Không. axe-core, Lighthouse và các công cụ kiểm tra tương tự đánh dấu lỗi văn bản trên màu phẳng đáng tin cậy, nhưng chúng không thể kiểm tra văn bản chồng lên hình ảnh nền, CSS gradient, nền pseudo-element, hoặc màu viền CSS; những thứ đó được đánh dấu là «chưa hoàn chỉnh» và cần xem xét thủ công. Công cụ chọn màu trực tiếp như thế này độc lập hữu ích để lấy mẫu màu nền chủ đạo từ hình ảnh và kiểm tra cặp văn bản/nền trước khi triển khai.
Công cụ này có hỗ trợ độ trong suốt / alpha không?
Trang này kiểm tra các cặp hex mờ đục. Nếu văn bản hoặc nền của bạn dùng alpha, độ tương phản thực tế phụ thuộc vào những gì ở phía sau nó; bạn cần tính màu nền trước đã ghép trước rồi kiểm tra màu mờ đục kết quả.
Có dữ liệu nào được gửi đến máy chủ không?
Không. Công thức độ sáng và tỷ lệ được tính toán trong trình duyệt của bạn; các màu không bao giờ rời khỏi thiết bị của bạn. Trang hoạt động offline sau khi đã tải.