Hầu hết các vai trò mà bạn nhìn thấy được định nghĩa như là một phần của ARIA 1.0, và sau đó đưa vào HTML5. Một số phần tử HTML5 mới (hộp thoại, chính, v.v.) thậm chí còn dựa trên các vai trò ARIA ban đầu.
http://www.w3.org/TR/wai-aria/
Có hai lý do chính để sử dụng vai trò, thêm vào yếu tố ngữ nghĩa mẹ đẻ của bạn.
Lý do số 1. Ghi đè vai trò không có yếu tố ngôn ngữ máy chủ nào phù hợp hoặc vì nhiều lý do khác nhau, một phần tử ít ngữ nghĩa thích hợp hơn đã được sử dụng.
Trong ví dụ này, liên kết đã được sử dụng, mặc dù chức năng kết quả có nhiều nút hơn so với 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 điều này dưới dạng nút (trái ngược với liên kết) và bạn có thể sử dụng công cụ chọn thuộc tính CSS để tránh phân lớp và divis itis.
*[role="button"] {
/* style these a buttons w/o relying on a .button class */
}
Lý do số 2. Sao lưu vai trò của phần tử gốc, để hỗ trợ các trình duyệt đã triển khai vai trò ARIA nhưng chưa triển khai vai trò của phần tử gốc.
Ví dụ: vai trò "chính" đã được hỗ trợ trong trình duyệt trong nhiều năm, nhưng đó 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 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ở thành 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 riêng của họ. Điều đó có được phép hoặc sử dụng đúng thuộc tính vai trò không?
Đó là việc sử dụng hợp lệ thuộc tính trừ khi không có 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>
Out của danh sách, chỉ link
và note
là vai trò hợp lệ, và do đó vai trò liên kết sẽ được áp dụng bởi vì nó xảy ra trước. Nếu bạn sử dụng vai trò tùy chỉnh, đảm bảo rằng chúng không mâu thuẫn với bất kỳ vai trò quy định tại ARIA hoặc ngôn ngữ máy chủ mà bạn đang sử dụng (HTML, SVG, MathML, vv)
Liên kết này cũng hữu ích. Sử dụng ARIA trong HTML. http://rawgithub.com/w3c/aria-in-html/master/index.html –
Tại sao bạn đặt bộ chọn chung ở phía trước [role = "button"]? – Evgeny
@EugeneXa dự đoán của tôi là xác định bất kỳ phần tử nào với '[role =" button "]' sẽ lưu phải thực hiện 'a [role =" button "], span [role =" button "]' – ngplayground