2009-11-05 84 views

回答

282

:focus:active是兩種不同的狀態。

:focus表示當元素是當前選擇用於接收來自輸入設備(鍵盤)的輸入的元素時的狀態。 :active表示元素當前正由用戶激活的狀態。

讓我們以一個例子來說明這一點。假設我們有一個<button><button>不會有任何狀態開始。它只是存在。如果我們使用標籤給「焦點」<button>,它現在進入其:focus狀態。如果您然後單擊(或按空間),然後您按鈕進入其(:active)狀態。

在那個筆記上,當你點擊一個元素時,你給它一個焦點,這也培養了:focus:active是相同的錯覺。 他們不一樣。單擊時按鈕處於:focus:active狀態。

一個例子:

<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, where my text just turns red 
 
</button>

編輯:jsfiddle

+2

還要注意,儘管它需要處於try catch中,因爲IE8可能會拋出異常,但您可以通過使用名爲'document.activeElement'的混淆名稱來獲取焦點元素。 而且請注意,較舊版本的瀏覽器可能會將:active和:focus以不同的方式對待。 'function activeElement(){ \t try { \t \t return document.activeElement;/*可以在IE8獲得exeption */ \t}趕上(E){ \t} }' – robocat 2012-07-26 01:51:18

+5

我已經創建了示例的的jsfiddle這裏:http://jsfiddle.net/NCwvj/ 測試中chrome(v24)我注意到,單擊按鈕只會調用':active'狀態 – Xecure 2013-02-19 06:41:06

+2

Nit:如果沒有:active:focus狀態,則焦點和活動順序會影響HTML按鈕的狀態 - Putting:活動狀態之後:焦點,當我點擊標籤並點擊空間時,我會得到主動變化。如果:焦點是最後一個,我永遠不會看到活動狀態。 – 2013-11-16 18:01:35

5

:焦點是當一個元素能夠接受輸入 - 光標在一個輸入框或已被選中的鏈接上。

:active是元素被用戶激活時 - 用戶按下鼠標按鈕然後釋放它的時間。

+2

嗨!是否有「目前點擊」的狀態?假設在導航菜單中有三個鏈接,當鏈接處於「開啓」狀態時,如何讓它保持某種顏色?向用戶顯示他目前的位置。 as:active只有在點擊鏈接(在這種情況下)的情況下才起作用,但是在鼠標按鈕釋放後變回。 – 2013-08-11 13:55:39

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

來源:CSS Pseudo-classes

+2

雖然相關,但並不回答問題 – 2017-04-19 14:07:09

-2

聚焦只能通過鍵盤輸入來給出的,但是一個元件可以通過兩個被激活,鼠標或鍵盤。

如果用戶使用:專注於鏈接,則樣式規則只適用於按下鍵盤上的按鈕。

+1

':focus'不能像那樣工作。我正在輸入的textarea目前有焦點,因爲我點擊了一個按鈕。它也可以通過點擊並重新進入失去並恢復焦點。在短短的一秒鐘內,我將通過點擊右側的Add Comment按鈕來關注它。所有這些都沒有導致焦點的鍵盤輸入。 – 2014-07-24 21:24:02

+0

如果你不能關注鏈接,那只是因爲鏈接不能集中,除非你把它放在一個錨點上,或者你添加一個tabindex屬性。但是你可以關注DOM元素,比如div或input。 – Alex 2015-02-02 14:43:12

0

活動是當用戶激活該點時(如鼠標點擊,如果我們使用從字段到字段的選項卡沒有活動樣式的標誌,也許點擊需要更多時間,只需點擊該點),焦點在激活點後發生。試試這個:

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

使用「焦點」會給鍵盤用戶鼠標用戶鼠標懸停時獲得的效果。需要「活動」才能在Internet Explorer中獲得相同的效果。

現實情況是,這些國家不適用於所有用戶。如果不使用全部三個選擇器,則會爲許多無法使用鼠標的鍵盤用戶創建可訪問性問題。我邀請你參加#nomouse挑戰賽(nomouse dot org)。

+1

:懸停和:焦點不是一回事。 :懸停是特定的狀態,並且:焦點是特定的狀態。將它們等同起來有點令人困惑和誤導。 – 2015-08-27 20:31:08

+1

我不懷疑你的專業知識。我試圖指出:懸停和:主動不是一回事。而且,對於網絡和可訪問性較高的人員來說,如果將其放在以下位置,這會讓人感到困惑:懸停大約等於:主動用於鍵盤使用。我很欣賞這個答案,但也許更深入一點會有所幫助? – 2015-08-31 13:36:28

+0

當然他們不是一回事!我沒有說他們大致相同。 (請再次閱讀我的帖子。)我正在談論使用鼠標和使用鍵盤完成相同任務的區別。我在說你必須使用它們來爲兩組用戶提供相同的體驗。否則,只有使用鍵盤的用戶身體上無法使用鼠標,將難以看到他們在頁面上的標籤位置。這會導致這些人在瀏覽頁面時遇到可訪問性問題。 – AMG 2015-09-01 18:34:41

11

有四種情況。

  1. 默認情況下,活動和焦點都關閉。
  2. 當你標籤週期通過可聚焦元件,他們將進入:focus(沒有活動)。
  3. 當你點擊非可對焦元素,它進入:active(沒有焦點)。
  4. 當你點擊可調焦元件它進入:active:focus(同時激活和聚焦)。

例子:

<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; 
} 

頁面加載時都是在情況1.當您按下選項卡中,將集中在第二個div,看看它表現出的情況下2。當您點擊第一個div時,您會看到案例3.當您單擊第二個div時,您會看到案例4.


元素是否可以聚焦是another question。大多數不是默認的。但是,默認情況下,可以安全地假設<a>,<input>,<textarea>是可以關注的。

+0

感謝您指出元素如何具有':active'而不是':focus'。這是我對其他答案沒有解決的問題感到困惑的一件事。 – 2017-10-26 23:48:05