Hầu hết các vai trò bạn thấy được xác định là một phần của ARIA 1.0 và sau đó được tích hợp vào HTML5. Một số yếu tố HTML5 mới (hộp thoại, chính, v.v.) thậm chí dựa trên vai trò ARIA ban đầu.
http://www.w3.org/TR/wai-aria/
Có hai lý do chính để sử dụng vai trò ngoài yếu tố ngữ nghĩa bản địa của bạn.
Lý do số 1. Ghi đè vai trò trong đó không có yếu tố ngôn ngữ máy chủ nào phù hợp hoặc, vì nhiều lý do, một yếu tố ít phù hợp về mặt ngữ nghĩa đã được sử dụng.
Trong ví dụ này, một liên kết đã được sử dụng, mặc dù chức năng kết quả giống nút hơn là liên kết điều hướng.
<a href="#" role="button" aria-label="Delete item 1">Delete</a>
Trình đọc màn hình sẽ nghe thấy điều này dưới dạng một nút (trái ngược với liên kết) và bạn có thể sử dụng bộ chọn thuộc tính CSS để tránh class-itis và div-itis.
*[role="button"] {
/* style these a buttons w/o relying on a .button class */
}
Lý do # 2. Sao lưu vai trò của phần tử bản địa, để hỗ trợ các trình duyệt đã triển khai vai trò ARIA nhưng chưa thực hiện vai trò của phần tử gốc.
Ví dụ: vai trò "chính" đã được hỗ trợ trong các trình duyệt trong nhiều năm, nhưng đây là một bổ sung tương đối gần đây cho HTML5, vì vậy nhiều trình duyệt chưa hỗ trợ ngữ nghĩa cho <main>
.
<main role="main">…</main>
Điều này là dư thừa về mặt kỹ thuật, nhưng giúp một số người dùng và không gây hại gì. Trong một vài năm, kỹ thuật này có thể sẽ trở nên không cần thiết.
Bạn cũng đã viết:
Tôi thấy một số người tạo nên của riêng họ. Điều đó được cho phép hay sử dụng đúng thuộc tính vai trò?
Đó là cách sử dụng hợp lệ của thuộc tính trừ khi không bao gồm vai trò thực sự. Trình duyệt sẽ áp dụng vai trò được công nhận đầu tiên trong danh sách mã thông báo.
<span role="foo link note bar">...</a>
Trong danh sách, chỉ link
và note
là các vai trò hợp lệ, và do đó vai trò liên kết sẽ được áp dụng vì nó xuất hiện trước. Nếu bạn sử dụng vai trò tùy chỉnh, hãy đảm bảo rằng chúng không xung đột với bất kỳ vai trò được xác định nào trong ARIA hoặc ngôn ngữ máy chủ bạn đang sử dụng (HTML, SVG, MathML, v.v.)