Sự khác biệt giữa các lớp giả :focusvà :activelà gì?
Sự khác biệt giữa các lớp giả :focusvà :activelà gì?
Câu trả lời:
:focusvà :activelà hai trạng thái khác nhau.
:focus đại diện cho trạng thái khi phần tử hiện được chọn để nhận đầu vào và :active đại diện cho trạng thái khi phần tử hiện đang được kích hoạt bởi người dùng.Ví dụ, giả sử chúng ta có một <button>. Các <button>sẽ không có bất cứ tiểu bang để bắt đầu với. Nó chỉ tồn tại. Nếu chúng ta sử dụng Tabđể "tập trung" vào <button>, thì bây giờ nó sẽ chuyển sang :focustrạng thái. Nếu sau đó bạn nhấp (hoặc nhấn space), sau đó bạn thực hiện nút nhập :activetrạng thái ( ) của nó .
Trên lưu ý đó, khi bạn nhấp vào một yếu tố, bạn sẽ tập trung vào nó, nó cũng nuôi dưỡng ảo ảnh đó :focusvà :activegiống nhau. Chúng không giống nhau. Khi nhấp vào nút ở :focus:activetrạng thái.
Một ví dụ:
<style type="text/css">
button { font-weight: normal; color: black; }
button:focus { color: red; }
button:active { font-weight: bold; }
</style>
<button>
When clicked, my text turns red AND bold!<br />
But not when focused only,<br />
where my text just turns red
</button>
chỉnh sửa: jsfiddle
:activetrạng thái
focusvà activekhai báo không thành vấn đề. Nó chỉ quan trọng khi họ mâu thuẫn với nhau ví dụ khác color:redvà color:blue(sau đó thắng cuối cùng).
:active Adds a style to an element that is activated
:focus Adds a style to an element that has keyboard input focus
:hover Adds a style to an element when you mouse over it
:lang Adds a style to an element with a specific lang attribute
:link Adds a style to an unvisited link
:visited Adds a style to a visited link
Nguồn: Các lớp giả CSS
visitedcác liên kết sẽ không thay đổi kiểu khi được di chuột hoặc nhấp vì "tính truy cập" của chúng sẽ ghi đè lên các lớp giả khác. LVHFA là thứ tự hầu hết mọi người sẽ muốn sử dụng trong hầu hết các trường hợp. Không chắc chắn lý do tại sao bạn bao gồm lang...
Có bốn trường hợp.
:focus(không hoạt động).:active không thể tập trung , nó sẽ đi vào (không có tiêu điểm).:active:focustập trung, nó sẽ nhập (hoạt động và tập trung đồng thời).Thí dụ:
<div>
I cannot be focused.
</div>
<div tabindex="0">
I am focusable.
</div>
div:focus {
background: green;
}
div:active {
color: orange;
}
div:focus:active {
font-weight: bold;
}
Khi trang tải cả hai trong trường hợp 1. Khi bạn nhấn tab, bạn sẽ tập trung div thứ hai và thấy nó hiển thị trường hợp 2. Khi bạn nhấp vào div đầu tiên bạn thấy trường hợp 3. Khi bạn nhấp vào div thứ hai, bạn sẽ thấy trường hợp 4 .
Cho dù một yếu tố có thể tập trung hay không là một câu hỏi khác . Hầu hết không theo mặc định. Tuy nhiên, nó là an toàn để giả định <a>, <input>, <textarea>là có thể đặt tiêu theo mặc định.
:activenhưng không :focus. Đó là một điều tôi bối rối về việc các câu trả lời khác không giải quyết được.
: tiêu điểm là khi một yếu tố có thể chấp nhận đầu vào - con trỏ trong hộp đầu vào hoặc liên kết đã được gắn thẻ.
: active là khi một phần tử đang được kích hoạt bởi người dùng - khoảng thời gian giữa khi người dùng nhấn nút chuột và sau đó nhả nó.
Hoạt động là khi người dùng kích hoạt điểm đó (Giống như nhấp chuột, nếu chúng tôi sử dụng tab từ trường này sang trường khác, không có dấu hiệu nào từ kiểu hoạt động. Có thể nhấp cần nhiều thời gian hơn, chỉ cần thử giữ nhấp vào điểm đó), việc lấy nét sẽ xảy ra sau điểm được kích hoạt. Thử cái này :
<style type="text/css">
input { font-weight: normal; color: black; }
input:focus { color: green; outline: 1px solid green; }
input:active { color: red; outline: 1px solid red; }
</style>
<input type="text"/>
<input type="text"/>
Chỉ có thể lấy nét bằng đầu vào bàn phím, nhưng Element có thể được kích hoạt bằng cả hai, chuột hoặc bàn phím.
Nếu ai đó sẽ sử dụng: tập trung vào một liên kết, quy tắc kiểu sẽ chỉ áp dụng với việc nhấn một nút trên bàn phím.
:focuskhông làm việc như thế Textarea tôi đang gõ hiện đang tập trung vì tôi đã nhấp vào một nút. Nó cũng có thể mất và khôi phục trọng tâm bằng cách nhấp vào nó và vào lại. Chỉ trong một giây, tôi sẽ tập trung vào nút Thêm Nhận xét ở bên phải bằng cách nhấp vào nút đó. Tất cả điều này mà không có đầu vào bàn phím gây ra tập trung.
Sử dụng "tiêu điểm" sẽ mang lại cho người dùng bàn phím hiệu ứng tương tự như người dùng chuột có được khi họ di chuột bằng chuột. "Hoạt động" là cần thiết để có được hiệu ứng tương tự trong Internet Explorer.
Thực tế là, các trạng thái này không hoạt động như bình thường đối với tất cả người dùng. Không sử dụng cả ba bộ chọn sẽ tạo ra các vấn đề về khả năng truy cập cho nhiều người dùng chỉ sử dụng bàn phím, những người không thể sử dụng chuột. Tôi mời bạn tham gia thử thách #nomouse (nomouse dot org).
document.activeElement, mặc dù nó cần phải ở trong một thử bắt vì IE8 có thể ném ngoại lệ. Và lưu ý rằng các phiên bản cũ hơn của trình duyệt có thể xử lý: hoạt động và: tập trung khác nhau.function activeElement() { try { return document.activeElement; /* can get exeption in IE8 */ } catch(e) { } }