TÙY CHỌN 1: Sử dụng lớp :focus-visible
giả
Lớp :focus-visible
giả có thể được sử dụng để tiêu diệt các đường viền khó coi và vòng lấy nét trên các nút và các yếu tố khác nhau cho người dùng KHÔNG điều hướng qua bàn phím (ví dụ: qua chạm hoặc nhấp chuột).
/**
* The default focus style is likely provided by Bootstrap or the browser
* but here we override everything else with a visually appealing cross-
* browser solution that works well on all focusable page elements
* including buttons, links, inputs, textareas, and selects.
*/
*:focus {
outline: 0 !important;
box-shadow:
0 0 0 .2rem #fff, /* use site bg color to create whitespace for faux focus ring */
0 0 0 .35rem #069 !important; /* faux focus ring color */
}
/**
* Undo the above focused button styles when the element received focus
* via mouse click or touch, but not keyboard navigation.
*/
*:focus:not(:focus-visible) {
outline: 0 !important;
box-shadow: none !important;
}
Cảnh báo: Kể từ năm 2020, lớp :focus-visible
giả không được hỗ trợ rộng rãi trên các trình duyệt . Tuy nhiên, polyfill rất dễ sử dụng; xem hướng dẫn dưới đây.
TÙY CHỌN 2: Sử dụng .focus-visible
polyfill
Giải pháp này sử dụng một lớp CSS bình thường thay vì lớp giả được đề cập ở trên và có hỗ trợ trình duyệt rộng vì đây là một polyfill dựa trên Javascript chính thức .
Bước 1: Thêm các phụ thuộc Javascript vào trang HTML của bạn
Lưu ý: polyfill có thể nhìn thấy tập trung yêu cầu một polyfill bổ sung cho một số trình duyệt cũ không hỗ trợ classList :
<!-- place this code just before the closing </html> tag -->
<script src="https://cdn.polyfill.io/v2/polyfill.js?features=Element.prototype.classList"></script>
<script src="https://unpkg.com/focus-visible"></script>
Bước 2: Thêm CSS sau vào biểu định kiểu của bạn
Sau đây là phiên bản sửa đổi của giải pháp CSS được ghi lại kỹ lưỡng hơn ở trên.
/**
* Custom cross-browser styles for keyboard :focus overrides defaults.
*/
*:focus {
outline: 0 !important;
box-shadow:
0 0 0 .2rem #fff,
0 0 0 .35rem #069 !important;
}
/**
* Remove focus styles for non-keyboard :focus.
*/
*:focus:not(.focus-visible) {
outline: 0 !important;
box-shadow: none !important;
}
Bước 3 (tùy chọn): sử dụng lớp 'tiêu điểm có thể nhìn thấy' khi cần thiết
Nếu bạn có bất kỳ mục nào mà bạn thực sự muốn hiển thị vòng lấy nét khi ai đó nhấp hoặc sử dụng cảm ứng, thì chỉ cần thêm focus-visible
lớp vào phần tử DOM.
<!-- This example uses Bootstrap classes to theme a button to appear like
a regular link, and then add a focus ring when the link is clicked --->
<button type="button" class="btn btn-text focus-visible">
Clicking me shows a focus box
</button>
Nguồn:
Bản giới thiệu: