2013-04-10 12 views
5

Ho appena notato una contraddizione tra il modo in cui i browser gestiscono il CSS: stato attivo di un elemento quando si fa click destro (contextmenu click)css ": attiva" con il tasto destro del mouse, incongruenze con l'attuazione del browser

  • firefox:: attivo non viene attivato
  • Chrome:: attivo viene attivato momentaneamente, finché non si verifica mouseup
  • Safari 5 & IE 10:: attivo viene attivato e rimane elemento: attiva fino alla contextmenu viene chiuso

Ecco una rapida jsfiddle di replicare questo Chiunque http://jsfiddle.net/annam/tqBqV/

div { background: red; } 
div:active { background: green; } 

sa che è il comportamento corretto? Immagino che non ci sia modo di standardizzare?

+0

': active' è generalmente inteso per il tasto sinistro –

+0

@ Mr.Alien esattamente :) idealmente non si innescherebbe mai con il tasto destro del mouse, ma ahimè, lo fa e in modo incoerente! –

+2

"(ed ecco un codice inutile perché sa richiede codice quando viene fornito un collegamento js fiddle)" jsFiddle non sta caricando per me, quindi non posso dire se quel codice è in realtà inteso solo per ignorare il filtro di qualità che è stato progettato esattamente per situazioni come quando jsFiddle si rifiuta di caricare, o se il codice viene dal tuo violino che ovvierebbe, e per non parlare di contraddizione, un simile commento editoriale. – BoltClock

risposta

9

Selectors 3 dice :active vale quando un elemento viene attivato, e definisce un'ulteriore attivazione tramite un dispositivo di puntamento, come un mouse per essere quando viene premuto il pulsante principale:

  • Il :active pseudo-classe si applica mentre un elemento viene attivato dall'utente. Ad esempio, tra le volte in cui l'utente preme il pulsante del mouse e lo rilascia. Sui sistemi con più di un pulsante del mouse, :active si applica solo al pulsante di attivazione primario o primario (in genere il pulsante del mouse "sinistro") e ai relativi alias.

Se un clic secondario attiva un elemento ai fini della :active in un particolare browser, allora questo browser è in violazione delle specifiche (a meno che il browser pretende solo di implementare CSS2.1, dove questa restrizione è non impostato in pietra, ma questo non è vero per nessuno dei browser forniti).

+0

+1. Vale la pena puntare [alle specifiche] (http://www.w3.org/TR/CSS2/selector.html#dynamic-pseudo-classes) direttamente, poiché è deliberatamente vago: "I CSS non definiscono quali elementi possono essere presenti gli stati sopra, o come gli stati sono inseriti e lasciati. Lo scripting può cambiare se gli elementi reagiscono agli eventi degli utenti o no, e diversi dispositivi e UA possono avere diversi modi di puntare o attivare elementi. " – CherryFlavourPez

+0

@CherryFlavourPez: Ho aggiornato con un collegamento alle specifiche più recenti, che * lo * definisce in una certa misura. Le specifiche del selettore CSS2.1 possono essere considerate obsolete per i browser che implementano i selettori 3+. Detto questo, modificherò di nuovo la mia risposta per approfondire questo aspetto. – BoltClock

+1

così firefox ha ragione non attivando: attivo a tutti! e safari e cioè non solo violano la regola "solo chiave primaria", ma violano anche la regola "tra il momento in cui l'utente preme il mouse e rilasciandola" mantenendo lo stato: attivo anche dopo il rilascio del pulsante del mouse. molte grazie! –

Problemi correlati