CSS válido compatible con Internet Explorer y Firefox

Llevo años realizando nuestras webs por medio de CSS, pero antes era sencillo, casi todo el mundo usaba IE, y sólo cuatro se atrevían con navegadores alternativos. A día de hoy las cosas están cambiando, y ya no se puede despreciar a los usuarios de navegadores tan extendidos como Firefox.
Pero surge un problema: en cuanto hagamos ligeramente complejos nuestros diseños, y utilicemos atributos como padding y margin, veremos como la distinta intepretación que hace Internet Explorer y el resto de navegadores del modelo de caja nos jugará malas pasadas.
Esto nos hace necesario acudir a «hacks» que nos permita aprovechar diferencias de interpretación de los CSS de los navegadores realizar CSS compatibles con todos los navegadores.
Existen muchos sistemas distintos, pero no todos son acordes a los standar, por lo que no validarán. De hecho, a lo largo de estos años he usado varios que si bien funcionaban y mantenían la estética más o menos igual en todos los navegadores, no validaban los standar. No es algo fundamental, pero siempre te queda esa espina clavada de «un trabajo bien hecho».
Hoy he probado un nuevo método, precisamente intentando solucionar este problema histórico, hasta que he encontrado este artículo de Sitepoint (que tantas veces me ha sacado de apuros), que como me decía Carlos Mantero en Twitter no sé si será el Santo Grial (que proporciona vida eterna), pero sí que me ha regalado algunos meses, eso seguro, porque era un tema que me estaba bloqueando.
La solución que he usado es sencilla:
1) creamos una regla adaptada a Internet Explorer
2) repetimos la regla (lo que sea común no es necesario, únicamente lo que cambie -tradicionalmente padding, margin, width o height-) anteponiéndole html>body.
Afortunadamente a este último IE no lo interpretará mientras que el resto de navegadores sí. Lo he probado en una web de estructura compleja (en concreto con el próximo diseño de Mundogamers) y se ve perfectamente en los navegadores testeados: Firefox, IE 6 e IE7, validando perfectamente, por fin.
Termino con un ejemplo práctico, para entenderlo mejor:
#header {margin-bottom:3em}
html>body #header {margin-bottom:1em}
Espero que le sea de ayuda a alguien. Supongo que muchos lo conocerían, pero seguro que alguien tiene problemas similares pendientes de resolver y le ayude a ver luz al final del camino.


22 comentarios
#1. Demensys, hace 1 año
Hola. Gracias por el código, me tocará utilizarlo...
Como sabes estoy diseñando una web (cutriweb para los amigos) y como todos, me he topado con este mismo problema.
Para diseñar la web utilizo Opera -mucho más «fino» que los otros dos-, y a este respecto creo que la cifra de usuarios que usan Opera puede ser bastante superior a la que se estima en las estadísticas de navegadores, ya que Opera permite configurarlo para mostrarse como otros navegadores.
De todos modos, al ver la web en Firefox, y todavía peor, en IE (6), la deformación, sobre todo de los line-height y los margin es increíble. Aunque no es mi mayor preocupación ahora, por ejemplo ya me he encargado de solucionar lo de los frames (ya no uso ninguno) y tengo cosas similares en mente por el momento, así que más adelante tendré que luchar contra las diferntes interpretaciones del código.
Yo todavía no estoy muy frustrado (falta de experiencia supongo) pero me imagino a quienes ya se hayan preguntado si no sería mejor utilizar todos el mismo navegador y acabar con estos quebraderos de cabeza...
El navegador, a poder ser, Opera ;)
#2. Miguel, hace 1 año
Todo el dia llevo peleandome con la compatibilidad entre IE y Firefox. Mi gran error fue diseñar la última web para Firefox, cuando siempre lo hice sobre IE. Y al cambiar de navegador... ale, todo al aire.
Solución: en el CSS las propiedades con / se aplican a IE, el resto a Firefox.
Ejemplo:
width: 770px; para Firefox
/ width: 780px; para IE
Un saludo
#3. tony, hace 1 año
Hola,
bueno yo tambien me sumo a la lista de ESTRESADOS por causa de los benditos CSS bueno agradezco porque acabo de entrarme que el unico que no cumple con los reglamentos de W3C es el IE que por lo que he leido sus programadores no les dio la gana de cumplir con esas reglas el cual mucho ENOJO MOLESTIA ESTRESS nos ha causado (DIOSSSSSS PORQUE????)
Ahora bien la solucion total a nuestros problemas nos los ha dado Ud. Roberto y es:
1) creamos una regla adaptada a Internet Explorer
2) repetimos la regla (lo que sea común no es necesario, únicamente lo que cambie -tradicionalmente padding, margin, width o height-) anteponiéndole html>body.
Mas abajo nos da un ejemplo:
#header {margin-bottom:3em} (solo funciona en IE me imagino)
html>body #header {margin-bottom:1em} (aqui funciona pa Firefox no??)
Esa es la solucion nada mas DIOSSSSSSS gracias por publicarlo de verdad estoy agradecido llevo buscando una respuesta tan simple y general como la suya ya que lo unico que encontraba eran respuestas a temas concretos..
Saludos y de nuevo gracias...
#4. carlos, hace 10 meses y 26 días
Estuve leyendo sobre los hacks, la seccion de: ...Termino con un ejemplo práctico, para entenderlo mejor:
#header {margin-bottom:3em}
html>body #header {margin-bottom:1em}... y me parecio excelente que haya solucion a este tipo de problemas que nos rompen la cabeza. Desafortunadamente, sigo rompiendomela porque trate de hacerlo y no me funciono en firefox. Por ejemplo, yo tengo lo siguiente:
#leftnav
{
width: 200px;
background-color: #81A7FE;
float:left;
margin-left:0px;
margin-top:0px;
}
y me funciono bien en IE7 pero luego hice lo siguiente:
html>body #leftnav
{
width: 200px;
background-color: #81A7FE;
float:left;
margin-left:-50px;
margin-top:0px;
}
y no me funciono en Firefox, la verdad no se si lo hice bien o esta malo.
Si me pudieran ayudar se los agradeceria.
Gracias
Saludos
#5. Patchi, hace 10 meses y 22 días
si porfavor, yo tengo el mismo problema que carlos a donde se pone el codigo enotnces?
#6. abadon, hace 10 meses y 7 días
genial esa solucion!!! llevaba dias rompiendome la cabeza tratando de hallar una solucion para este problema, ami me funcione increiblemente
#7. clasicc, hace 10 meses y 5 días
no funciona..
#8. kluni, hace 9 meses y 9 días
gracias!!!!!!!!
lo logramosssssssssss
#9. Juan Carlos, hace 7 meses y 1 día
Gracias por la ayuda!
#10. Ara, hace 5 meses y 19 días
No me funciono en Firefox
#11. Roberto, hace 5 meses y 18 días
El sistema funciona perfectamente. El problema a quienes os sigue dando problemas es que probablemente no aplicáis el css de manera correcta para Firefox.
#12. Iván, hace 5 meses y 13 días
Solo una cosa, a mi no me funcionaba en firefox, hasta que me di cuenta de un error que parece tonto pero se deberia de puntualizar ya que nos puede pasar a cualquiera, y es que hay que dejar un espacio en blanco despues del «html>body »
ej:
Me salvaste de una buena, gracias compadre, este será un POS-IT fijo de todo diseñador ;-)
#13. Iván, hace 5 meses y 13 días
disculpa, me confundi en el codigo de arriba
#14. javier, hace 4 meses y 17 días
No funciona. Ni en Opera ni en Firefox.
Mi versión es IE 7.0 y si interpreta el CSS en 'html>body'
#15. Alvaro, hace 4 meses y 14 días
Tampoco me funciona.
Mi versión es IE 7.0 y si es verdad que interpreta el html>body
#16. Roberto, hace 4 meses y 14 días
Esta entrada fue realizada hace 7 meses, cuando IE 7 no estaba muy extendido (aún hoy no lo está demasiado). No obstante, IE7 realiza una interpretación mucho más próxima a Firefox, por eso se excluye.
¿Estáis incluyendo los doctype adecuados? El uso de uno u otro puede producir variaciones en la visualización.
#17. berny polania, hace 3 meses y 13 días
yo optè por sacar un aviso de no compatibilidad con i.e. en la web, realmente no hay derecho a tantos trabajos por un navegador que se quedò corto y a quien no merece arrodillarse, me sumo a la campaña web de no màs i.e., les recomiendo flock para diseñar, que està super y màs ràpido que Mozilla pero con mejores caracteristicas, el ùnico pero es que està en inglès,
pueden descargarlo aquì ensayarlo :http://www.flock.com,gracias por permitirnos el desahogo.
#18. Javier, hace 2 meses y 20 días
Lo solucioné:
Primero lo ajusto a Firefox, y como IE no interpreta los comentarios y Firefox sí, después pongo el ajuste de IE. Así:
#contenidoCentral h2 { padding:20px 10px 10px 10px; } //Firefox
// #contenidoCentral h2 { padding:0 10px 10px 10px; } // IE
Pero poniendo las dos líneas en eon código.
#19. Phanto, hace 2 meses y 18 días
Mano, no entiendo su solucion pero en IE7 o las versiones anteriores de IE , el style que pondre es reconocible, pero en FF no reconoce, es mas ni lo muestra. Si alguien sabe la solucion por fas es urgente:
#def
{
display:block;
position:absolute;
width:232px;
height:182px;
z-index:1;
left:145px;
top: 74px;
visibility: hidden;
}
#20. Octa, hace 2 meses y 8 días
MIGUEL!!!!! tu método fue el ke me funciono... lloré de emoción jajaja como me rompi el c... con mis amigos de mocosoft!!!
Utilicé este método para IE y FF y me funcó de 10!!! los otros no me funcionaron.
margin-left: 175px;
/ margin-left: 170px;
#21. Yorch, hace 1 mes y 20 días
Hola, soy diseñador gráfico pero hace un par de años me metí en maquetación web aunque no tan intensamente como ahora y he de comentar que el uso de hacks, al que yo estaba acostumbrado, no es necesario. Todo se puede solucionar sin hacks, simplemente hay qe invertir un pco más d etiempo en averiguar cómo.
Hayq ue tratar al CSS como al Windows, indicándole todo desde cero, por ejemplo rápido, no vladría usar un padding así por las buenas, yo lo que hago es resetear a 0 su valor por defecto y le pongo el que me interesa posteriormente.
Siguiendo esta regla básica, un poquito d epaciencia y nada de lógica, he conseguido hacer diseños complicados en maquetaciones.
Espero que le sirva de ayuda a alguno, suerte ;)
#22. lore, hace 29 días
que genial construir css valido a partir de esos trucos y que se vea bien en la mayoria de los navegadores.....pero a mi aun me queda el problema de validar el «filter», cuando se usa png en los estilos....... :(
Escribir un comentario
Si quieres añadir tu comentario a esta entrada, simplemente rellena el siguiente formulario:
* Campos requeridos
Puedes usar estas etiquetas XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>.
No hay trackbacks
Para notificar de una mención en tu blog a esta entrada, habilita la notificación automática (Opciones > Discusión en WordPress) o especifica esta url de trackback: http://www.robertoherrero.net/49/programacion/css-valido-compatible-con-internet-explorer-y-firefox/trackback/