× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

ARIA Hidden Là Gì? Đảm Bảo Khả Năng Tiếp Cận Với Web Semantics

08/07/2025 03:23

Bài viết này sẽ đi sâu vào giải thích aria-hidden là gì, mục đích, cách sử dụng đúng đắn, và những cạm bẫy cần tránh để đảm bảo trang web của bạn thực sự thân thiện với tất cả mọi người

Trong kỷ nguyên số, việc xây dựng các website không chỉ dừng lại ở việc tạo ra giao diện đẹp mắt hay chức năng phức tạp. Một yếu tố ngày càng trở nên quan trọng là khả năng tiếp cận (accessibility), đảm bảo rằng mọi người, bao gồm cả những người khuyết tật, đều có thể dễ dàng truy cập và tương tác với nội dung web. Để đạt được điều này, W3C đã phát triển WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications), một bộ thuộc tính giúp tăng cường ngữ nghĩa cho các thành phần UI động và các widget web phức tạp. Trong số các thuộc tính ARIA, aria-hidden là một công cụ mạnh mẽ nhưng thường bị hiểu lầm hoặc sử dụng sai. Vậy, aria-hidden là gì? Nó hoạt động như thế nào, và khi nào bạn nên (hoặc không nên) sử dụng nó để cải thiện trải nghiệm cho người dùng sử dụng công nghệ hỗ trợ? Bài viết này sẽ đi sâu vào giải thích aria-hidden là gì, mục đích, cách sử dụng đúng đắn, và những cạm bẫy cần tránh để đảm bảo trang web của bạn thực sự thân thiện với tất cả mọi người.

1. ARIA Hidden Là Gì? Khái Niệm Cơ Bản

aria-hidden là gì? aria-hidden là một thuộc tính ARIA (Accessible Rich Internet Applications) được sử dụng để chỉ thị cho các công nghệ hỗ trợ (assistive technologies) như trình đọc màn hình (screen reader) rằng một phần tử hoặc toàn bộ cây con của nó không nên được hiển thị hoặc đọc thành tiếng cho người dùng. Khi một phần tử có thuộc tính aria-hidden="true", các công nghệ hỗ trợ sẽ bỏ qua phần tử đó và nội dung bên trong nó, ngay cả khi nó hiển thị bằng mắt thường trên trang.

Mục đích chính của aria-hidden là quản lý cây khả năng tiếp cận (accessibility tree) – một đại diện của nội dung trang web mà các công nghệ hỗ trợ sử dụng. Đôi khi, có những nội dung trực quan xuất hiện trên màn hình nhưng lại không có ý nghĩa hoặc gây nhiễu cho người dùng trình đọc màn hình (ví dụ: các biểu tượng trang trí, các phần tử trùng lặp được hiển thị cho các chế độ xem khác nhau). Trong những trường hợp này, aria-hidden="true" giúp "giấu" những nội dung không liên quan đó khỏi cây khả năng tiếp cận, mang lại trải nghiệm duyệt web rõ ràng và hiệu quả hơn.

Lưu ý quan trọng: aria-hidden chỉ ảnh hưởng đến các công nghệ hỗ trợ, không ảnh hưởng đến cách trình duyệt hiển thị phần tử bằng mắt thường. Nội dung vẫn sẽ hiển thị trên màn hình nếu không có các thuộc tính CSS (như display: none; hoặc visibility: hidden;) đi kèm.

2. Khi Nào Nên Sử Dụng aria-hidden="true"?

Việc sử dụng aria-hidden="true" cần được cân nhắc kỹ lưỡng để tránh vô tình ẩn đi nội dung quan trọng. Dưới đây là các trường hợp phổ biến và hợp lý để sử dụng nó:

2.1. Nội Dung Trùng Lặp hoặc Ngoại Màn Hình (Off-screen Content)

Nhiều ứng dụng web hiện đại sử dụng các kỹ thuật như Single-Page Application (SPA) hoặc các module/dialog để hiển thị nội dung. Có thể có những trường hợp:

  • Nội dung trùng lặp: Một phần tử UI được tạo ra hai lần nhưng chỉ một trong số đó hiển thị tại một thời điểm (ví dụ: một phiên bản cho di động và một phiên bản cho desktop). Bạn nên ẩn phiên bản không hiển thị khỏi trình đọc màn hình.

Các phần tử ngoài màn hình: Các menu trượt (slide-out menus) hoặc dialog không hiển thị cho đến khi được kích hoạt. Khi chúng không hiển thị, chúng nên được ẩn bằng aria-hidden="true" để trình đọc màn hình không đọc chúng trước thời điểm thích hợp. Khi chúng hiển thị, thuộc tính này nên được gỡ bỏ hoặc đặt thành aria-hidden="false".


2.2. Các Thành Phần Chỉ Có Mục Đích Trình Bày/Trang Trí (Decorative Content)

Các yếu tố đồ họa hoặc văn bản chỉ có tác dụng trang trí và không mang ý nghĩa ngữ nghĩa nào cho người dùng.

Biểu tượng (Icons): Nếu một biểu tượng (như biểu tượng mũi tên, biểu tượng tách dòng) chỉ mang tính chất thẩm mỹ và ý nghĩa của nó đã được cung cấp bằng văn bản bên cạnh, bạn có thể ẩn biểu tượng đó. Ví dụ:

Nếu biểu tượng là yếu tố duy nhất truyền tải ý nghĩa (ví dụ: nút chỉ có biểu tượng giỏ hàng), bạn không nên dùng aria-hidden mà phải cung cấp văn bản thay thế (ví dụ: alt cho ảnh, aria-label cho nút).

  • Dấu phân cách hình ảnh: Các đường kẻ, hình nền nhỏ không có ý nghĩa thông tin.

2.3. Các Nội Dung Không Tương Tác và Chỉ Dùng Để Trình Bày

Trong một số trường hợp hiếm gặp, toàn bộ một khối nội dung có thể được ẩn đi nếu nó hoàn toàn không có ý nghĩa tương tác hoặc thông tin khi được đọc bởi trình đọc màn hình. Tuy nhiên, hãy cực kỳ cẩn trọng với trường hợp này.

3. Khi Nào KHÔNG Nên Sử Dụng aria-hidden="true"?

Hiểu rõ aria-hidden là gì cũng có nghĩa là phải biết khi nào không nên sử dụng nó. Lạm dụng hoặc sử dụng sai thuộc tính này có thể gây ra những hậu quả nghiêm trọng đối với khả năng tiếp cận:

3.1. Ẩn Nội Dung Quan Trọng

Không bao giờ sử dụng aria-hidden="true" để ẩn đi nội dung mà người dùng (kể cả người dùng trình đọc màn hình) cần phải truy cập hoặc tương tác. Nếu một phần nội dung quan trọng bị ẩn, người dùng sẽ không thể đọc, hiểu hoặc tương tác với nó, gây ra rào cản nghiêm trọng.

3.2. Ẩn Các Phần Tử Tập Trung (Focusable Elements)

Một lỗi phổ biến là đặt aria-hidden="true" trên một phần tử có thể nhận tiêu điểm (focusable element) như <button>, <input>, <a>. Điều này tạo ra một tình huống "treo" cho người dùng bàn phím hoặc trình đọc màn hình: họ có thể tab đến phần tử đó nhưng trình đọc màn hình lại không thông báo gì về sự tồn tại hoặc chức năng của nó, khiến người dùng bị kẹt.

  • Nếu một phần tử không hiển thị, hãy đảm bảo rằng nó cũng không thể nhận tiêu điểm (not focusable). Bạn có thể đạt được điều này bằng cách sử dụng display: none; hoặc visibility: hidden; trong CSS, hoặc thuộc tính tabindex="-1" kết hợp với việc xóa nó khỏi cây khả năng tiếp cận bằng aria-hidden="true".
  • Nếu phần tử đang hiển thị và có ý nghĩa, không bao giờ dùng aria-hidden="true".

3.3. Thay Thế Hoàn Toàn display: none; hoặc visibility: hidden;

aria-hidden="true" không phải là một sự thay thế hoàn hảo cho display: none; hay visibility: hidden;.

  • display: none;visibility: hidden; (trong CSS) sẽ ẩn phần tử khỏi cả mắt thường và cây khả năng tiếp cận.
  • aria-hidden="true" chỉ ẩn khỏi cây khả năng tiếp cận, vẫn hiển thị bằng mắt thường.

Bạn thường sẽ sử dụng aria-hidden="true" kết hợp với JavaScript để quản lý trạng thái hiển thị của các thành phần UI phức tạp (như modal, drawer menu), đảm bảo rằng khi chúng không hiển thị, chúng không bị trình đọc màn hình quét qua.

3.4. Ẩn Các Phần Tử Lồng Nhau (Nested Elements)

Khi một phần tử cha được gán aria-hidden="true", tất cả các phần tử con bên trong nó cũng sẽ bị ẩn khỏi cây khả năng tiếp cận, bất kể các phần tử con đó có thuộc tính aria-hidden="false" hay không. Bạn không thể "ghi đè" aria-hidden="true" của cha bằng aria-hidden="false" của con.

Trong ví dụ trên, cả đoạn văn và nút đều bị ẩn khỏi trình đọc màn hình.

4. aria-hidden và Quản Lý Focus

Một trong những thách thức lớn nhất khi sử dụng aria-hidden là quản lý tiêu điểm (focus management), đặc biệt là với các thành phần UI động như modal dialog.

Khi một modal dialog xuất hiện, bạn muốn:

  1. Chuyển tiêu điểm vào modal: Đảm bảo người dùng trình đọc màn hình và bàn phím có thể ngay lập tức tương tác với nội dung trong modal.
  2. Ẩn nội dung phía sau modal: Sử dụng aria-hidden="true" trên các phần tử bên ngoài modal (thường là <body> hoặc container chính của ứng dụng) để trình đọc màn hình không thể truy cập nội dung đó khi modal đang mở.
  3. Bẫy tiêu điểm (Focus Trap): Đảm bảo tiêu điểm chỉ luân chuyển bên trong modal, không thoát ra ngoài.
  4. Phục hồi tiêu điểm: Khi modal đóng, xóa aria-hidden="true" khỏi các phần tử nền và đưa tiêu điểm trở lại phần tử đã kích hoạt modal.

Việc quản lý aria-hidden kết hợp với focus management là cực kỳ quan trọng để tạo ra các thành phần UI có khả năng tiếp cận cao.

5. Kiểm Tra và Thử Nghiệm aria-hidden

Sau khi đã triển khai aria-hidden, điều quan trọng là phải kiểm tra kỹ lưỡng để đảm bảo nó hoạt động như mong đợi và không gây ra vấn đề gì.

  • Sử dụng trình đọc màn hình: Đây là cách tốt nhất để kiểm tra. Hãy tự mình trải nghiệm trang web bằng cách sử dụng một trình đọc màn hình phổ biến (ví dụ: NVDA hoặc JAWS trên Windows, VoiceOver trên macOS/iOS, TalkBack trên Android).
  • Kiểm tra cây khả năng tiếp cận: Các công cụ phát triển của trình duyệt (Browser DevTools) thường có một tab/mục "Accessibility" cho phép bạn xem cây khả năng tiếp cận và kiểm tra các thuộc tính ARIA được áp dụng.
  • Kiểm tra tab order: Đảm bảo rằng các phần tử bị ẩn bằng aria-hidden không còn trong thứ tự tab.

Đọc thêm:

6. Kết Luận: aria-hidden - Sức Mạnh Từ Sự Rõ Ràng

aria-hidden là gì? Nó là một thuộc tính ARIA mạnh mẽ, được thiết kế để kiểm soát những gì các công nghệ hỗ trợ đọc hoặc bỏ qua trên một trang web. Mục đích của nó là tạo ra một trải nghiệm rõ ràng, không gây nhiễu cho người dùng trình đọc màn hình bằng cách ẩn đi các nội dung trùng lặp hoặc chỉ mang tính chất trang trí.

Tuy nhiên, sức mạnh này đi kèm với trách nhiệm. Việc sử dụng aria-hidden một cách không chính xác có thể gây hại nghiêm trọng đến khả năng tiếp cận, biến một phần quan trọng của trang web trở nên vô hình đối với những người dùng dựa vào công nghệ hỗ trợ.

Hãy luôn ghi nhớ nguyên tắc: Chỉ ẩn những gì thực sự không có ý nghĩa hoặc gây nhiễu cho ngữ cảnh hiện tại của người dùng trình đọc màn hình. Bằng cách áp dụng aria-hidden một cách cẩn trọng và có hiểu biết, bạn sẽ góp phần xây dựng một không gian web toàn diện và thân thiện hơn cho tất cả mọi người.