Sự khác biệt giữa: tập trung và: hoạt động là gì?


Câu trả lời:


412

:focus: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 đó :focus: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


2
Cũng lưu ý rằng bạn có thể có được yếu tố tập trung bằng cách sử dụng thuộc tính có tên khó hiểu 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) { } }
robocat

6
Tôi đã tạo một JSFiddle về ví dụ của bạn ở đây: jsfiddle.net/NCwvj Kiểm tra bằng chrome (v24) Tôi nhận thấy rằng việc nhấp vào nút chỉ gọi :activetrạng thái
Zaki Aziz

3
Nit: thứ tự tiêu điểm và hoạt động ảnh hưởng đến trạng thái của nút HTML nếu không có: trạng thái hoạt động: tiêu điểm - Đặt: trạng thái hoạt động sau: tiêu điểm, tôi nhận được các thay đổi hoạt động khi tôi nhấn tab và nhấn phím cách. Nếu: tập trung là cuối cùng, tôi không bao giờ thấy trạng thái hoạt động.
Matt Gaunt

@GauntFace, Bạn đang sử dụng trình duyệt nào? Trên Chrome, thứ tự của bạn focusactivekhai 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:redcolor:blue(sau đó thắng cuối cùng).
Pacerier

Câu hỏi liên quan và câu trả lời, dựa trên câu hỏi này: stackoverflow.com/a/48597351/5587480 . Theo quan điểm của tôi, rất dễ hiểu
john cj

59
: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


10
Trong khi liên quan, điều này không trả lời câu hỏi
Gregor Weber

6
@GregorWeber nó phơi bày sự khác biệt bằng cách hiển thị các định nghĩa
Kamil Kiełczewski 18/2/19

1
Bạn có thể biết điều này, nhưng nếu bạn xác định chúng theo thứ tự đó, 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...
Mentalist

22

Có bốn trường hợp.

  1. Theo mặc định, hoạt động và tập trung đều tắt.
  2. Khi bạn tab để chu kỳ thông qua các yếu tố có thể đặt tiêu , họ sẽ nhập :focus(không hoạt động).
  3. Khi bạn nhấp vào một yếu tố:active không thể tập trung , nó sẽ đi vào (không có tiêu điểm).
  4. Khi bạn nhấp vào một yếu tố có thể :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.


Cảm ơn đã chỉ ra làm thế nào các yếu tố có thể có :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.
B-Stewart

6

: 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ó.


2
Chào! Có trạng thái nào cho "hiện đang nhấp" không? Hãy nói rằng có ba liên kết trong menu điều hướng, làm thế nào để bạn có được nó để giữ một màu nhất định khi hiện đang "bật" liên kết? để hiển thị cho người dùng nơi anh ta hiện đang ở. as: active chỉ hoạt động miễn là liên kết (trong trường hợp này) đang được nhấp, nhưng thay đổi lại khi nhả nút chuột.
Kizer Yakuza

0

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"/>

-3

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.


1
: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.
Joel Mellon

Nếu bạn không thể tập trung vào một liên kết, thì đơn giản là vì một liên kết không thể được tập trung trừ khi bạn đặt nó vào một neo hoặc bạn thêm một thuộc tính tabindex. Nhưng bạn có thể tập trung các phần tử DOM như div hoặc đầu vào.
Alex

-5

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).


1
: hover và: tập trung không giống nhau. : hover là một trạng thái cụ thể và: tập trung là một trạng thái cụ thể. Đó là một chút bối rối và gây hiểu lầm để đánh đồng chúng.
Garry Polley

1
Tôi không nghi ngờ chuyên môn của bạn. Tôi đang cố gắng chỉ ra rằng: hover và: active không giống nhau. Và thật khó hiểu cho những người mới hơn với web và khả năng truy cập khi nó được đặt đơn giản như: hover xấp xỉ bằng: kích hoạt cho việc sử dụng bàn phím. Tôi đánh giá cao câu trả lời, nhưng có lẽ sâu hơn một chút sẽ giúp?
Garry Polley

Tất nhiên chúng không giống nhau! Tôi không nói họ gần giống nhau. (Vui lòng đọc lại bài viết của tôi.) Tôi đang nói về sự khác biệt giữa sử dụng chuột và sử dụng bàn phím để thực hiện cùng một nhiệm vụ. Tôi đang nói rằng bạn phải sử dụng tất cả chúng để mang lại cho cả hai nhóm người dùng cùng một trải nghiệm. Mặt khác, chỉ những người dùng không thể sử dụng chuột trên bàn phím sẽ gặp khó khăn trong việc xem nơi họ đã gắn thẻ trên một trang. Điều này tạo ra một vấn đề về khả năng truy cập cho những người này trong việc điều hướng trang.
AMG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.