tl; dr = "¿Alguien sabe cómo aplicar clases encadenadas para IE6 usando jQuery o similar?"Encadenando clases de CSS en IE6 - ¿Intentando encontrar una solución de jQuery?
Derecho,
quizás pregunto lo imposible? Me considero bastante nuevo en Javscript y jQuery, pero una vez dicho esto, he escrito un código bastante complejo recientemente, así que definitivamente estoy llegando allí ... sin embargo, ahora tengo un problema bastante interesante en mi contrato independiente actual.
El codificador web anterior ha adoptado un enfoque Grid-960 para el HTML y como resultado ha utilizado clases encadenadas para dar estilo a muchos de los elementos. El siguiente ejemplo es típico de lo que se puede encontrar en el código:
<div class='blocks four-col-1 orange highlight'>Some content</div>
Y en el css habrá diferentes declaraciones para: (CSS no real ... pero lo suficientemente cerca)
.blocks {margin-right:10px;}
.orange {background-image:url(someimage.jpg);}
.highlight {font-weight:bold;}
.four-col-1 {width:300px;}
y para empeorar las cosas ... esto es en el CSS:
.blocks.orange.highlight {background-colour:#dd00ff;}
Cualquiera que no esté familiarizado con este error en particular puede leer más sobre ella aquí: http://www.ryanbrill.com/archives/multiple-classes-in-ie/ es muy real y muy molesto.
Sin querer entrar en las diversiones de no encadenar clases (les dije esto, pero ya no es posible cambiar su enfoque ... 100 páginas codificadas a mano en un sitio web de 150 páginas, sin CMS ... suspiro) y sin el lujo de poder cambiar la forma en que se diseñan estos bloques ... ¿alguien me puede aconsejar sobre la complejidad y los beneficios entre cualquiera de mis enfoques propuestos a continuación o posibles otras opciones que resolverían adecuadamente este problema?
Potencial Solución 1
uso de comentarios condicionales que estoy considerando alguna secuencia de comandos de jQuery sólo para IE6 que:
- Lee la clase de todos los divs en una determinada sección de la página y empuja a una matriz
- crea cajas vacías fuera de la pantalla con sólo una de las clases aplicadas a la vez
- lee los valores CSS aplicados por cada caja
- vuelve a aplicar estos estilos a la caja individual, de alguna manera teniendo en cuenta el orden en que sean llamados y sobrescribir instrucciones contradictorias según sea necesario
Solución Potencial 2
- leer la clase de todos los divs en una determinada sección de la página y pulsar en una matriz
- Escanear el documento para ver los enlaces a las hojas de estilo
- Ajax agarrar las hojas de estilo y atravesar buscando mat nombres Ching para los de la clase Array
- aplicar estilos, según sea necesario
Solución Potencial 3
- Crear una única hoja de estilo IE6 que contiene el estilo exacto para ser aplicado como un nombre único (es decir: class = 'blocks orange highlight' pasa a ser class = 'blocks-orange-highlight')
- Recorre el documento en IE6 y convierte todos los espacios en declaraciones de clase a guiones y vuelve a aplicar clases según el nuevo nombre de estilo
Resumen:
Solución 1 permite a la gente en esta empresa que aplique todos los estilos en el futuro y el guión ajuste según sea necesario. Sin embargo, no permite que se agregue el estilo encadenado, solo el estilo individual ... también consume mucho tiempo y consume muchos procesadores, pero también es más probable que se convierta en un complemento que podría usarse en todo el mundo
La solución 2 es una pesadilla potencial para codificar. Pero nuevamente permitirá un sinfín de actualizaciones sin romperse
La solución 3 requerirá que alguien comparta los nuevos estilos cada vez que realicen un cambio, y si no lo hacen, IE6 se romperá.
Irónicamente, el sitio, aunque necesita ajustarse a IE6 de manera limitada, no necesita ejecutarse sin javascript (han hecho la llamada ... tienen JS o se van), así que considere todas las soluciones de JQuery y JS estar 'en juego'.
¿He mencionado lo mucho que odio IE6?
De todos modos ... cualquier pensamiento o comentario sería apreciado.
Seguiré desarrollando mi propia solución y si descubro una que se puede convertir en un complemento de jQuery, la publicaré aquí en los comentarios.
Saludos,
Mike.
editar: added tl; dr a la cima.
Voto por un CSS específico de IE6 como una solución rápida. Por los sonidos de este proyecto, cuanto menos hagas, mejor. –
La solución 3 es definitivamente la menos horrible. Asegúrese de que alguien con autoridad para tomar decisiones sepa que el rendimiento de cada página del sitio se verá afectado negativamente en IE debido a su extraño enfoque desinformado sobre el diseño de la página. – Pointy