5

¿Cuál es el concepto de detectar soporte de cualquier pseudoclase css en el navegador a través de JavaScript? Exactamente, quiero verificar si el navegador del usuario admite la pseudoclase :checked o no, porque he creado algunas ventanas emergentes de CSS con casillas de verificación y debo hacer retrocesos para los navegadores antiguos.Cómo detectar si el soporte del navegador especificó css pseudo-class?

RESPUESTA: estoy encontré ya implementada method de selectores CSS de prueba en un Modernizr "Additional Tests".

+1

[Modernizr] (http://www.modernizr.com/) detecta muchas cosas así. –

+0

Sé acerca de Modernizr, pero no tiene pruebas para el soporte de pseudoclases css3, solo pseudo-elementos como ':: before', etc. – Raiden

Respuesta

4

puede simplemente comprobar si se aplicó su estilo con la pseudo-clase.

Algo como esto: http://jsfiddle.net/qPmT2/1/

+4

Ya se ha implementado [método] (https://gist.github.com/441842) para probar los selectores de CSS en Modernizr ["Pruebas adicionales"] (https://github.com/Modernizr/Modernizr/wiki). Oh, Dios, ¿por qué no está en el núcleo? – Raiden

+0

Solución de trabajo, pero un poco fea – franzlorenzon

1

Si estás bien con el uso de Javascript, es posible omitir la detección y vaya a la derecha de la cuña: Selectivizr

+3

Será mejor que no use Selectivizr, porque el rendimiento se está reduciendo debido al análisis CSS antes de mostrar la página. – andychups

0

stylesheet.insertRule(rule, index) método arrojará error si la regla no es válida. para que podamos 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 
Cuestiones relacionadas