2009-11-05 18 views

risposta

282

:focus e :active sono due stati differenti.

:focus rappresenta lo stato quando l'elemento è l'elemento attualmente selezionato per ricevere input dai dispositivi di input (tastiera). :active rappresenta lo stato in cui l'elemento è attualmente attivato dall'utente.

Mettiamolo in prospettiva con un esempio. Diciamo che abbiamo un <button>. Lo <button> non avrà nessuno stato per cominciare. Esiste solo. Se utilizziamo la scheda Tab per dare "focus" allo <button>, ora entra nello stato :focus. Se si fa clic (o si preme spazio), si fa quindi entrare nel relativo stato (:active).

In quella nota, quando si fa clic su un elemento, si dà fuoco, che coltiva anche l'illusione che :focus e :active siano gli stessi. Non sono la stessa cosa. Quando si fa clic sul pulsante si trova nello stato :focus:active.

Un esempio:

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

modifica: jsfiddle

+2

Si noti inoltre che è possibile ottenere l'elemento focalizzato utilizzando la proprietà 'document.activeElement' che confonde, anche se deve essere presente in un tentativo di intercettazione perché IE8 può generare un'eccezione. E sappiate che le versioni precedenti dei browser possono trattare: attivo e: focus diverso. 'function activeElement() { \t try { \t \t return document.activeElement;/* Può ottenere esibirci in IE8 */ \t} catch (e) {} \t } ' – robocat

+5

ho creato un JSFiddle del vostro esempio qui: http://jsfiddle.net/NCwvj/ test in chrome (v24) Ho notato che facendo clic sul pulsante richiama solo lo stato ': active' – Xecure

+2

Nit: l'ordine di attivazione e attivo influisce sullo stato di un pulsante HTML se non c'è: attivo: stato di messa a fuoco - Inserimento: stato attivo dopo: focus, ottengo i cambiamenti attivi quando tocchi tab e colpisci lo spazio. Se: focus è l'ultimo, non vedo mai lo stato attivo. –

5

: lo stato attivo è quando un elemento è in grado di accettare input: il cursore in una casella di input o un collegamento a cui è stato eseguito il tab.

: attivo è quando un elemento viene attivato da un utente - il tempo che intercorre tra quando un utente preme un pulsante del mouse e lo rilascia.

+2

Ciao! C'è uno stato per "attualmente cliccato"? Diciamo che ci sono tre link nel menu di navigazione, come si ottiene per mantenere un certo colore quando attualmente "on" il link? per mostrare all'utente dove si trova attualmente. come: attivo funziona solo fino a quando viene fatto clic sul collegamento (in questo caso), ma viene ripristinato il rilascio del pulsante del mouse. –

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 

Fonte: CSS Pseudo-classes

+2

Anche se correlato, questo non risponde alla domanda –

-2

fuoco può essere data solo da input da tastiera, ma un elemento può essere attivato da entrambi, un mouse o una tastiera.

Se si potrebbe usare: focus su un link, la regola di stile si applicherebbe solo con la pressione di un bottone sulla tastiera.

+1

': focus' non funziona così. La textarea in cui sto digitando al momento ha lo stato attivo perché ho fatto clic su un pulsante.Inoltre, può perdere e ripristinare lo stato attivo facendo clic su di esso e nuovamente su di esso. In un secondo, concentrerò l'attenzione sul pulsante Aggiungi commento a destra facendo clic su di esso. Tutto questo senza l'input da tastiera che causa la messa a fuoco. –

+0

Se non è possibile concentrarsi su un collegamento, è semplicemente perché non è possibile mettere a fuoco un collegamento a meno che non lo si ponga su un ancoraggio o si aggiunga un attributo tabindex. Ma puoi focalizzare elementi DOM come div o input. – Alex

0

Attivo è quando l'utente che attiva quel punto (come il clic del mouse, se usiamo la scheda da campo a campo non c'è alcun segno dallo stile attivo. Forse facendo clic ha bisogno di più tempo, basta provare a tenere premuto su quel punto), la messa a fuoco è avvenuta dopo l'attivazione del punto. Prova questo:

<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

Utilizzando "focus" darà agli utenti della tastiera lo stesso effetto che gli utenti del mouse ottengono quando si librano con un mouse. "Active" è necessario per ottenere lo stesso effetto in Internet Explorer.

La realtà è, questi stati non funzionano come dovrebbero per tutti gli utenti. Non usando tutti e tre i selettori crea problemi di accessibilità per molti utenti da tastiera solo che sono fisicamente in grado di utilizzare un mouse. Vi invito a prendere la sfida #nomouse (nomouse dot org).

+1

: hover e: focus non sono la stessa cosa. : hover è uno stato specifico e: focus è uno stato specifico. È un po 'confuso e fuorviante equipararli. –

+1

Non dubito della tua esperienza. Sto cercando di indicare che: hover e: active non sono la stessa cosa. Ed è fonte di confusione per le persone più recenti verso il web e l'accessibilità quando è semplice: hover è approssimativamente uguale a: attivo per l'utilizzo della tastiera. Apprezzo la risposta, ma forse un po 'più di profondità potrebbe aiutare? –

+0

Ovviamente non sono la stessa cosa! Non ho detto che erano all'incirca uguali. (Si prega di leggere di nuovo i miei post.) Sto parlando della differenza tra l'utilizzo di un mouse e l'utilizzo di una tastiera per svolgere lo stesso compito. Sto dicendo che devi usarli tutti per offrire a entrambi i gruppi di utenti la stessa esperienza. Altrimenti, solo gli utenti della tastiera che non sono fisicamente in grado di usare un mouse avranno difficoltà a vedere dove hanno inserito le schede in una pagina. Questo crea un problema di accessibilità per queste persone nella navigazione della pagina. – AMG

11

ci sono quattro casi.

  1. Per impostazione predefinita, attivo e attivo sono entrambi disattivati.
  2. Quando si scheda per scorrere attraverso gli elementi di messa a fuoco , immettere :focus (senza attivo).
  3. Quando si fa clic su un elemento non attivabile, entra :active (senza messa a fuoco).
  4. Quando si fare clic su su un elemento di messa a fuoco immette :active:focus (attivo e attivo contemporaneamente).

Esempio:

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

Quando la pagina viene caricata entrambi sono nel caso in cui 1. Quando si preme scheda si concentrerà la seconda div e vederlo esporre caso 2. Quando fai clic sul primo div, vedi caso 3. Quando fai clic sul secondo div, vedi il caso 4.


Se un elemento è focalizzabile o meno è another question. La maggior parte non sono di default. Tuttavia, si può presumere che <a>, <input>, <textarea> siano attivabili per impostazione predefinita.

+0

Grazie per aver sottolineato come gli elementi possono avere ': active' ma non': focus'. Questa è una cosa di cui ero confuso riguardo al fatto che le altre risposte non si rivolgevano. –

Problemi correlati