Vấn đề về đơn đặt hàng DOM

Tầm quan trọng của thứ tự DOM mặc định

Dave Gash
Dave Gash
Meggin Kearney
Meggin Kearney

Làm việc với các phần tử gốc là một cách hay để tìm hiểu về hành vi của tiêu điểm vì các phần tử này được tự động chèn vào thứ tự thẻ dựa trên vị trí của các phần tử đó trong DOM.

Ví dụ: bạn có thể có ba phần tử nút, lần lượt trong DOM. Thao tác nhấn Tab sẽ lấy tiêu điểm vào từng nút theo thứ tự. Hãy thử nhấp vào khối mã bên dưới để di chuyển điểm bắt đầu điều hướng tiêu điểm, sau đó nhấn Tab để di chuyển tiêu điểm thông qua các nút.

<button>I Should</button>
<button>Be Focused</button>
<button>Last!</button>

Tuy nhiên, điều quan trọng cần lưu ý là khi sử dụng CSS, bạn có thể sắp xếp các phần tử theo một thứ tự trong DOM nhưng lại hiển thị theo thứ tự khác trên màn hình. Ví dụ: nếu bạn sử dụng một thuộc tính CSS như float để di chuyển một nút sang phải, thì các nút sẽ xuất hiện theo thứ tự khác trên màn hình. Tuy nhiên, vì thứ tự của các thẻ trong DOM vẫn giữ nguyên, nên thứ tự thẻ của chúng cũng vậy. Khi người dùng nhấn phím tab để di chuyển qua trang, các nút sẽ nhận được tiêu điểm theo thứ tự không trực quan. Hãy thử nhấp vào khối mã bên dưới để di chuyển điểm bắt đầu điều hướng tiêu điểm, sau đó nhấn Tab để di chuyển tiêu điểm qua các nút.

<button style="float: right">I Should</button>
<button>Be Focused</button>
<button>Last!</button>

Hãy cẩn thận khi thay đổi vị trí hình ảnh của các phần tử trên màn hình bằng CSS. Điều này có thể khiến thứ tự thẻ nhảy xung quanh, có vẻ như ngẫu nhiên, gây nhầm lẫn cho người dùng dựa vào bàn phím. Vì lý do này, danh sách kiểm tra Web AIM nêu rõ trong phần 1.3.2 rằng thứ tự đọc và điều hướng, được xác định theo thứ tự mã, phải hợp lý và trực quan.

Theo quy tắc, hãy thường xuyên nhấn phím tab để di chuyển qua các trang của bạn nhằm đảm bảo bạn không vô tình làm rối thứ tự thẻ. Đây là một thói quen tốt và không đòi hỏi nhiều nỗ lực.

Nội dung ngoài màn hình

Điều gì sẽ xảy ra nếu bạn có nội dung hiện không hiển thị nhưng vẫn cần phải có trong DOM, chẳng hạn như một thanh điều hướng bên thích ứng? Khi bạn có các phần tử như thế này nhận tiêu điểm khi chúng nằm ngoài màn hình, có thể có vẻ như tiêu điểm đang biến mất và xuất hiện trở lại khi người dùng nhấn phím tab trên trang — rõ ràng là một hiệu ứng không mong muốn. Lý tưởng nhất là chúng ta nên ngăn bảng điều khiển lấy tiêu điểm khi bảng điều khiển nằm ngoài màn hình và chỉ cho phép lấy tiêu điểm khi người dùng có thể tương tác với bảng điều khiển.

Một bảng điều khiển trượt ngoài màn hình có thể đánh cắp tiêu điểm.

Đôi khi, bạn cần phải tìm hiểu một chút để biết tiêu điểm đã đi đâu. Bạn có thể sử dụng document.activeElement từ bảng điều khiển để tìm ra phần tử nào hiện đang được lấy tiêu điểm.

Sau khi biết phần tử nào ngoài màn hình đang được lấy tiêu điểm, bạn có thể đặt phần tử đó thành display: none hoặc visibility: hidden, sau đó đặt lại thành display: block hoặc visibility: visible trước khi hiển thị phần tử đó cho người dùng.

Một bảng điều khiển trượt được đặt thành không hiển thị.
Một bảng điều khiển trượt được đặt thành khối hiển thị.

Nhìn chung, nhà phát triển nên nhấn phím tab trên trang web của họ trước mỗi lần phát hành để đảm bảo thứ tự thẻ không biến mất hoặc thoát khỏi trình tự logic. Nếu có, bạn nên đảm bảo rằng bạn đang ẩn nội dung ngoài màn hình một cách thích hợp bằng display: none hoặc visibility: hidden, hoặc bạn sắp xếp lại vị trí thực của các phần tử trong DOM để chúng theo thứ tự hợp lý.