Tiêu điểm bàn phím

Nhiều người sử dụng bàn phím (hoặc phần mềm hoặc phần cứng bắt chước chức năng của bàn phím, chẳng hạn như thiết bị chuyển đổi) làm phương tiện điều hướng chính. Điều này có thể là do lựa chọn cá nhân, hiệu quả hoặc phần cứng bị hỏng.

Những người có hạn chế tạm thời về thể chất, chẳng hạn như bong gân cổ tay hoặc khuyết tật về vận động tinh, như ống cổ tay, có thể chọn sử dụng bàn phím để di chuyển. Người dùng khiếm thị hoặc có thị lực kém có thể sử dụng bàn phím để thao tác kết hợp với phần mềm phóng to hoặc phần mềm trình đọc màn hình. Tuy nhiên, họ có thể sử dụng các lệnh phím tắt khác để điều hướng màn hình so với người dùng bình thường.

Một số người không khuyết tật cũng có thể chọn thao tác bằng bàn phím.

Việc hỗ trợ bàn phím cho tất cả các trường hợp và tình trạng khuyết tật này là rất quan trọng. Phần lớn tính năng hỗ trợ tiếp cận bằng bàn phím tập trung vào tiêu điểm. Tiêu điểm (focus) đề cập đến phần tử nào trên màn hình hiện đang nhận dữ liệu đầu vào từ bàn phím.

Trong mô-đun này, chúng ta tập trung vào cấu trúc HTML và định kiểu CSS cho bàn phím và các phần tử có thể lấy tiêu điểm. Mô-đun JavaScript cung cấp thêm thông tin về việc quản lý tiêu điểm và thao tác nhấn phím cho các phần tử tương tác.

Thứ tự lấy tiêu điểm

Các phần tử mà người dùng bàn phím có thể điều hướng đến được gọi là phần tử có thể lấy tiêu điểm. Thứ tự tiêu điểm (còn gọi là thứ tự thẻ hoặc thứ tự điều hướng) là thứ tự các phần tử nhận được tiêu điểm. Thứ tự tiêu điểm mặc định phải hợp lý, trực quan và khớp với thứ tự hình ảnh của trang.

Đối với hầu hết ngôn ngữ, thứ tự tiêu điểm bắt đầu ở đầu trang và kết thúc ở cuối trang, di chuyển từ trái sang phải. Tuy nhiên, một số ngôn ngữ được đọc từ phải sang trái, vì vậy, ngôn ngữ chính của trang có thể yêu cầu thứ tự tiêu điểm khác.

Theo mặc định, thứ tự tiêu điểm bao gồm các phần tử HTML có thể lấy tiêu điểm một cách tự nhiên, chẳng hạn như đường liên kết, hộp đánh dấu và dữ liệu nhập văn bản. Các phần tử HTML có thể lấy tiêu điểm một cách tự nhiên bao gồm cả tính năng hỗ trợ thứ tự thẻ tích hợp sẵn và tính năng xử lý sự kiện cơ bản trên bàn phím.

Bạn có thể cập nhật thứ tự tiêu điểm để bao gồm mọi phần tử thường không nhận được tiêu điểm, chẳng hạn như các phần tử HTML không tương tác, thành phần tuỳ chỉnh hoặc các phần tử có ARIA, đồng thời ghi đè ngữ nghĩa tiêu điểm tự nhiên.

Chỉ mục thẻ

Thứ tự tiêu điểm bắt đầu bằng các phần tử có thuộc tính tabindex dương (nếu có) và di chuyển từ số dương nhỏ nhất đến số dương lớn nhất (chẳng hạn như 1, 2, 3). Sau đó, thao tác này xử lý các phần tử có chỉ mục thẻ bằng 0 theo thứ tự của các phần tử đó trong DOM. Mọi phần tử có tabindex âm sẽ bị xoá khỏi thứ tự tiêu điểm tự nhiên.

Khi tabindex bằng 0 (tabindex="0") được áp dụng cho các phần tử thường không thể lấy tiêu điểm, các phần tử đó sẽ được thêm vào thứ tự tiêu điểm tự nhiên của trang theo cách chúng xuất hiện trong DOM. Tuy nhiên, không giống như các phần tử HTML có thể lấy tiêu điểm một cách tự nhiên, bạn phải cung cấp thêm tính năng hỗ trợ bàn phím để có thể truy cập đầy đủ vào các phần tử đó.

Tương tự, nếu bạn có một phần tử thường có thể làm tâm điểm nhưng không hoạt động (chẳng hạn như một nút không hoạt động cho đến khi trường nhập dữ liệu được điền), thì bạn nên thêm chỉ mục thẻ âm (tabindex="-1") vào phần tử này. Thêm các tín hiệu tabindex âm vào các công nghệ hỗ trợ và bàn phím để nút này sẽ bị xoá khỏi thứ tự tiêu điểm tự nhiên. Nhưng đừng lo — bạn có thể sử dụng JavaScript để thêm tiêu điểm trở lại phần tử khi cần.

Trong ví dụ này, thuộc tính tabindex được thêm vào các phần tử không nhận được tiêu điểm một cách tự nhiên. Thứ tự của các phần tử được thao tác bằng cách sử dụng tabindex để minh hoạ sức mạnh mà phần tử này có thể có đối với thứ tự tiêu điểm. Đây là ví dụ về những việc không nên làm!

Thứ tự tiêu điểm mới phản ánh HTML.
Xem người dùng bàn phím nhấn phím tab qua HTML CodePen.

Ngày nay, hầu hết các trang web đều có một danh sách dài các đường liên kết trình đơn trong tiêu đề chính của trang đồng nhất giữa các trang. Điều này rất hữu ích cho việc điều hướng chung nhưng có thể khiến người dùng chỉ sử dụng bàn phím khó dễ dàng chuyển đến nội dung chính của trang web mà không phải nhấn thẻ nhiều lần.

Một cách để bỏ qua các nhóm đường liên kết thừa hoặc không hữu ích là thêm đường liên kết bỏ qua. Đường liên kết bỏ qua là các đường liên kết neo chuyển đến một phần khác của cùng một trang, sử dụng mã nhận dạng của phần đó thay vì chuyển người dùng đến một trang khác trên trang web hoặc tài nguyên bên ngoài. Đường liên kết bỏ qua thường được thêm dưới dạng phần tử có thể làm tâm điểm đầu tiên mà người dùng sẽ gặp khi truy cập vào một trang web. Đường liên kết này có thể xuất hiện hoặc bị ẩn cho đến khi người dùng mở thẻ đến đó, tuỳ thuộc vào yêu cầu của thiết kế.

Khi người dùng nhấn phím tab và có một đường liên kết bỏ qua đang hoạt động, thao tác này sẽ gửi tiêu điểm bàn phím đến đường liên kết bỏ qua. Người dùng có thể nhấp vào đường liên kết bỏ qua và chuyển qua phần tiêu đề và phần điều hướng chính. Nếu người dùng chọn không nhấp vào đường liên kết bỏ qua và tiếp tục nhấn phím tab xuống DOM, họ sẽ được chuyển đến phần tử có thể lấy tiêu điểm tiếp theo.

Giống như tất cả các đường liên kết, đường liên kết bỏ qua cần phải có ngữ cảnh về mục đích của đường liên kết. Việc thêm cụm từ "Bỏ qua nội dung chính" sẽ cho người dùng biết đường liên kết sẽ đưa họ đến đâu. Có nhiều lựa chọn về mã khi cung cấp thêm ngữ cảnh cho đường liên kết, chẳng hạn như aria-labelledby, aria-label hoặc thêm mã này vào nội dung văn bản của phần tử <a>, như minh hoạ trong ví dụ.

Xem trước CodePen bằng tiêu điểm lấy bằng bàn phím.
Xem người dùng sử dụng bàn phím để di chuyển có và không có đường liên kết bỏ qua.

Chỉ báo lấy nét

Như bạn vừa tìm hiểu, thứ tự tiêu điểm là một khía cạnh quan trọng của tính năng hỗ trợ tiếp cận bằng bàn phím. Bạn cũng cần quyết định cách tạo kiểu cho tiêu điểm đó. Bởi vì ngay cả khi thứ tự tiêu điểm rất tốt, thì làm cách nào người dùng có thể biết họ đang ở đâu trên trang nếu không có kiểu phù hợp?

Chỉ báo tiêu điểm hiển thị là yếu tố quan trọng để thông báo cho người dùng về vị trí của họ mọi lúc trên trang. Điều này đặc biệt quan trọng đối với người dùng khiếm thị chỉ sử dụng bàn phím. Focus Not Obscured (Minimum) (Tiêu điểm không bị che khuất (Tối thiểu)) đảm bảo rằng chỉ báo tiêu điểm không bị ẩn dưới các thành phần khác.

Kiểu mặc định của trình duyệt

Ngày nay, mỗi trình duyệt web hiện đại đều có một kiểu hình ảnh mặc định khác nhau áp dụng cho các phần tử có thể lấy tiêu điểm trên trang web hoặc ứng dụng của bạn, một số phần tử hiển thị rõ hơn các phần tử khác. Khi người dùng nhấn phím tab để di chuyển qua trang, kiểu này sẽ được áp dụng khi phần tử nhận được tiêu điểm bàn phím.

Nếu bạn cho phép trình duyệt xử lý kiểu tiêu điểm, bạn cần phải xem lại mã để xác nhận rằng giao diện của bạn sẽ không ghi đè kiểu mặc định của trình duyệt. Cơ chế ghi đè thường được ghi dưới dạng "outline: 0" hoặc "outline: none" trong biểu định kiểu. Mảnh mã nhỏ này có thể xoá kiểu chỉ báo tiêu điểm mặc định của trình duyệt, khiến người dùng rất khó điều hướng trang web hoặc ứng dụng của bạn.

Không nên – không có đường viền

a:focus {
 
outline: none; /* don't do this! */
}

Nên — đường viền được tạo kiểu

a:focus {
 
outline: auto 5px Highlight; /* for non-webkit browsers */
 
outline: auto 5px -webkit-focus-ring-color; /* for webkit browsers */
}

Kiểu tùy chỉnh

Tất nhiên, bạn có thể vượt ra ngoài kiểu trình duyệt mặc định và tạo một chỉ báo tiêu điểm tuỳ chỉnh bổ sung cho giao diện của mình. Khi tạo chỉ báo tiêu điểm tuỳ chỉnh, bạn có rất nhiều quyền tự do để sáng tạo!

Hình dạng chỉ báo tiêu điểm có thể có nhiều dạng, chẳng hạn như đường viền, đường viền, dấu gạch dưới, hộp, thay đổi nền hoặc một số thay đổi rõ ràng khác về kiểu cách mà không chỉ dựa vào màu sắc để cho biết tiêu điểm của bàn phím đang hoạt động trên phần tử đó.

Bạn có thể thay đổi kiểu chỉ báo tiêu điểm để đảm bảo người dùng có thể nhìn thấy chỉ báo đó. Ví dụ: khi một trang có nền trắng, bạn có thể đặt chỉ báo tiêu điểm nút thành nền màu xanh dương. Khi trang có nền màu xanh dương, bạn có thể đặt cùng một kiểu tiêu điểm nút đó thành nền trắng.

Bạn có thể thay đổi kiểu thành phần tiêu điểm dựa trên loại thành phần. Ví dụ: bạn có thể sử dụng đường gạch dưới có dấu chấm cho các đường liên kết trong nội dung nhưng chọn đường viền bo tròn cho phần tử nút.

Tập trung vào kiểu như minh hoạ trong CSS.
Xem điều gì sẽ xảy ra khi người dùng bàn phím nhấn phím tab qua từng phần tử tiêu điểm được tạo kiểu.

Không có quy tắc nào về số lượng kiểu chỉ báo tiêu điểm trên một trang, nhưng hãy nhớ giữ số lượng này ở mức hợp lý để tránh gây nhầm lẫn không cần thiết.

Kiểm tra mức độ hiểu biết

Kiểm tra kiến thức của bạn về ARIA và HTML.

Ví dụ nào về kiểu CSS :focus dễ truy cập nhất trên nền trắng?

text-decoration: dotted underline 2px blue;
background-color:black;
outline: none; text-decoration:none; background:none;
outline: 0.5rem solid yellow;

Mục đích của đường liên kết bỏ qua là gì?

Giúp người dùng bàn phím bỏ qua nội dung nhàm chán.
Giúp người dùng sử dụng bàn phím bỏ qua các nhóm đường liên kết thừa hoặc không hữu ích.