5

Qual è il concetto di rilevamento del supporto di una pseudo-classe css nel browser tramite JavaScript? Esattamente, voglio controllare se il browser dell'utente supporta pseudo-classe :checked o meno, perché ho creato alcuni popup CSS con caselle di controllo e ho bisogno di fare fallback per i vecchi browser.Come rilevare se il supporto del browser ha specificato css-classe css?

RISPOSTA: Sto trovato già implementato method di test selettori CSS in un Modernizr "Additional Tests".

+1

[Modernizr] (http://www.modernizr.com/) rileva molte cose del genere. –

+0

Conosco Modernizr, ma non ha test per il supporto pseudo-classi css3, solo pseudo-elementi come ':: before', ecc. – Raiden

risposta

4

si può semplicemente controllare se è stato applicato il tuo stile con pseudo-classe.

Qualcosa di simile a questo: http://jsfiddle.net/qPmT2/1/

+4

Trovato già implementato [metodo] (https://gist.github.com/441842) di test dei selettori CSS in un Modernizr ["Test aggiuntivi"] (https://github.com/Modernizr/Modernizr/wiki). Oh, Dio, perché non è nel nucleo? – Raiden

+0

Soluzione di lavoro, ma un po 'brutta – franzlorenzon

1

Se sei OK con l'utilizzo di JavaScript, è possibile ignorare il rilevamento e andare a destra per lo spessore: Selectivizr

+3

È meglio non usare Selectivizr, perché la performance sta diminuendo a causa dell'analisi CSS prima del rendering della pagina. – andychups

0

stylesheet.insertRule(rule, index) metodo gettare errore se la regola non è valida. quindi possiamo usarlo.

var supportPseudo = function(){ 
    var ss = document.styleSheets[0]; 
    if(!ss){ 
     var el = document.createElement('style'); 
     document.head.appendChild(el); 
     ss = document.styleSheets[0]; 
     document.head.removeChild(el); 
    } 
    return function (pseudoClass){ 
     try{ 
      if(!(/^:/).test(pseudoClass)){ 
       pseudoClass = ':'+pseudoClass; 
      } 
      ss.insertRule('html'+pseudoClass+'{}',0); 
      ss.deleteRule(0); 
      return true; 
     }catch(e){ 
      return false; 
     } 
    }; 
}(); 


//test 
supportPseudo(':hover'); //true 
supportPseudo(':before'); //true 
supportPseudo(':hello'); //false 
supportPseudo(':world'); //false