Khả năng tiếp cận (a11y)
thl-ui hướng tới chuẩn WCAG 2.1 AA. Mọi trang của ba playground đều được kiểm tra bằng axe-core: 75 route × React / Vue / Angular, ở cả chế độ sáng và tối. Không trang nào còn lỗi mức serious hoặc critical.
sh
node scripts/a11y.mjs http://localhost:5181 # React; báo lỗi khi có vi phạm serious/critical
node scripts/a11y.mjs http://localhost:5182 --dark # Vue, dark modeComponent tự lo những gì
- Màu: mọi cặp chữ/nền đạt ≥ 4.5:1. Token
--thl-on-{màu}dùng cho chữ đặt trên nền màu;--thl-color-{màu}-textdùng khi chính màu đó làm màu chữ. Unit test kiểm tra điều này cho mọi skin. - Form:
Fieldtự gắnlabel for,aria-describedby(trỏ tới help/lỗi) vàaria-invalidcho control bên trong.- Lỗi dùng
role="alert"và được dịch theo ngôn ngữ hiện tại.
- Select, DatePicker, Slider, Tabs: theo đúng pattern WAI-ARIA, điều khiển đầy đủ bằng bàn phím.
- Modal / Drawer: giữ focus bên trong, trả focus về chỗ cũ khi đóng, đóng bằng Esc. Drawer đang đóng được đặt
inert. - Dropdown / Popover: thuộc tính
aria-expandedđược gắn trên chính nút bạn truyền vào, không phải trên thẻ bọc ngoài. - Layout: có skip link, đủ các landmark
header/nav/main/footer,aria-current="page"trong menu, và tiêu đề trang làh1.
Phần của bạn
- Nút chỉ có icon phải có
aria-label. - Mỗi control nên nằm trong
Fieldcólabel, hoặc cóaria-labelriêng. - Vùng cuộn tự làm cần
tabindex="0"và một nhãn. - Khi đổi màu, đổi cả cặp
--thl-color-xvà--thl-on-xđể giữ độ tương phản.