2014-08-29 14 views
10

Ho riscontrato uno strano comportamento relativo alla relazione CSS tra le regole CSS pointer-events e cursor in Firefox. Quando imposto un valore cursor di un elemento su un valore diverso da auto (supponiamo che sia wait), il tipo di cursore cambia di conseguenza, come previsto. Tuttavia, quando aggiungo anche pointer-events: none allo stesso elemento, il cursore viene reimpostato su auto. Lo stesso succede se uso cursor: wait !important. Le stesse regole funzionano correttamente in Chromium e IE (!).Il cursore si reimposta automaticamente dopo l'aggiunta di eventi puntatore: nessuno in Firefox

All'inizio ho pensato che questo potrebbe essere il comportamento previsto quando pointer-events: none è impostato, ma secondo la sezione MDN sul valore none:

L'elemento non è mai il bersaglio di eventi del mouse; tuttavia, gli eventi del mouse possono avere come target gli elementi discendenti se quei discendenti hanno eventi puntatore impostati su un altro valore. In queste circostanze, gli eventi del mouse attiveranno i listener di eventi su questo elemento padre come appropriato nel loro percorso verso/dalla discendente durante le fasi di acquisizione/bolla di eventi.

sembra che il Javascript eventi, non CSS eventi non saranno propagate.

La domanda è: c'è un modo per utilizzare sia pointer-events: none e cursor: wait sullo stesso elemento in Firefox? Inoltre, ho ragione riguardo all'interpretazione degli eventi Javascript/CSS riguardo l'estratto menzionato?

Se è importante, sto usando Firefox 31 su Ubuntu 64bit

Ecco un fiddle. In questo caso aggiungo le regole dinamicamente, ma lo stesso accade quando si usa solo il CSS. Lo scenario di cui sto parlando è Change cursor to wait --> Disable pointer events

+0

stesso comportamento su Firefox 31, Windows –

+0

Quasi un anno dopo, sto vedendo lo stesso comportamento su Firefox 38 * e * Chrome 43 * e * IE11! Il mio box Linux è a casa quindi non posso confermare Chromium. – trysis

risposta

11

Si scopre che è necessario impostare il cursore sull'elemento padre.

L'impostazione di entrambi gli stili su un elemento o il cursore sull'elemento nidificato reimposta il cursore sul puntatore predefinito.

<div class="cursor-wait"> 
    <a href="#">wait</a> 
    <div class="no-pointer-events"> 
     <a href="#">wait > no events</a><!-- works here --> 
    </div> 
</div> 

Vedere Fiddle per dettagli.

+0

Sembra che Bootstrap abbia bisogno di aggiornare il suo framework, perché non lo fa con i pulsanti disabilitati e forse con altri. Per essere onesti, sembra difficile con i pulsanti perché Bootstrap sa solo che hai un pulsante che vuoi disabilitare, che può o non può avere figli, e non c'è un modo semplice (cross-browser) per ottenere il genitore nei CSS. – trysis

Problemi correlati