#CSS {keep-it:simple;}

Cada vez que leo una anotación sobre los problemas de implementación, diferencias visuales y demás falencias que presenta Internet Explorer con el uso de hojas de estilo vuelvo a la misma respuesta, keep it simple.

No voy a discutir el hecho de si IE debería mejorar o no el soporte, esa es la variable que no manejamos, así que vamos a encargarnos de lo que si controlamos.

Antes de empezar voy a dejar en claro que si uno pretende estandarizar el uso de una especificación lo mínimo que puede hacer es respetarla, por lo tanto no esperen ver un hack en las siguientes líneas.

Box Model

Quizás lo mas difícil de entender para alguien que se inicia en el manejo de css es la forma en la que el navegador trata el box model o modelo de caja en español.

Existen dos modelos, el tradicional y el recomendado por la W3C. IE por defecto utiliza el modelo tradicional que es absolutamente opuesto al estándar, sin embargo IE ES capaz de dibujar siguiendo las especificaciones del W3C siempre y cuando uno se lo pida amablemente.

Para lograr que IE siga el box model de la W3C, hay que obligarlo a que trabaje en modo estricto, para ellos simplemente debemos definir el doctype de la siguiente manera.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Sin incluir la delcaración xml <?xml version="1.0"?>

hasLayout

Federico enlazó una buena nota con respecto de este problema, para los que no sepan que diablos es el hasLayout, les recomiendo leer esta nota que lo explica clarito y en español.

Ahora bien, para los que ya sepan lo que es, hay varias soluciones a este problema. La idea consiste en aplicar una propiedad que le permita al elemento en cuestión ganar layout, si bien no existe una propiedad que se destaque por ser la mejor, definir la altura en porcentajes parece ser la menos peligrosa.

Utilizando height:1%; el elemento en cuestión, digamos un párrafo (<p>) adquiere una altura de 1% relativa, permitiéndole ganar layout sin comprometer el resto de la estructura.

Selector Universal

El otro gran problema a la hora de diseñar una estructura “pixel-perfect” es el tema de los márgenes y espacios (padding) predefinidos en IE.

Acá vamos dejar algo en claro, este tipo de problemas por lo general no son tan graves a menos que se este utilizando un layout de ancho fijo y seas muy jodido, dicho esto vamos a la solución.

Por defecto todos los navegadores tienen sus propias hojas de estilos donde asignan un valor por defecto a ciertos elementos “básicos”. Estas propiedades obviamente no son iguales en todos los navegadores y por ende representan un problema.

La solución mas simple es utilizar el selector universal para anular los dos atributos que mayor problema representan, estos son el alto y el ancho. Para ellos definimos esta línea al principio de nuestra hoja de estilos *{margin:0px;padding:0px;}.

Esa simple linea de código nos ahorra miles de problemas ya que reinicia los valores de margen y espacio de todos los elementos del documento.

Conclusión

IE es un dolor de cabeza, pero así mismo es utilizado por la mayoría de los usuarios.

Hay problemas, pero mejor aun hay soluciones. Decir que IE apesta no excusa para justificar que un sitio no funcione debidamente, eso es ser mediocre y los mediocres son los que realmente apestan.

Lista completa de bugs en Internet Explorer y sus soluciones (inglés).

Hay 11 comentarios en #CSS {keep-it:simple;}

en mi primer trabajo desarrollando CSS me obligaron a no usar hacks, más que el mayor que. La solución es el “mayor que” :D

Sobre hasLayout, aunque lo estoy usando mal, lo mejor, considero, es aplicar zoom:1 a los elementos de tipo bloque. Debería traer menos consecuencias inesperadas que height: 1%.
Sobre margenes y demases, hay que tener en cuenta que un navegador puede cambiar los valores por defecto de una versión a otra (Opera 8 y 9, sobre el padding y margin de BODY).
Igualmente, mi filosofia se está yendo a usar en Explorer una hoja de estilos recortada y dejar la avanzada para el resto.

height:1%; es inofensivo generalmente, zoom es un atributo propietario de MS y causaría que la hoja de estilo no valide, aunque también logra el mismo resultado y funciona incluso en modo estricto.

Con respecto al margen justamente por eso creo que lo mejor es asegurarse que estén en cero y así obtener un poco mas de control sobre los elementos.

Nop … no es tan fácil como lo planteas.

Aunque estoy con vos en lo de keep it simple para CSS (de hecho, solo con mejorar el XHTML tenés varios problemas de CSS resueltos), hay cosas que DEFINITIVAMENTE en IE es imposible de arreglar. Digo, un doble padding SÍ se DEBE arreglar … pero 3px corridos en IE NO se puede y realmente NO SÉ si se debe ;) También todo depende del layout … no es lo mismo un Wired que un simple template de un blog. Todos diseñamos un template sin hacks, pero un Wired? Te la debo.

Están buenos los hacks … excepto HasLayout, ya los había reseñado en una nota para Users hace un tiempo y gustaron mucho :)

Definitivamente es así, antes de siquiera pensar en corregir el css valida tu documento xhtml, creo que en eso estamos todos de acuerdo.

El tema de usar hacks es válido, es decir están hechos para solventar un problema, pero mi temor es que eventualmente puedan ser un problema en si mismos.

El bug de los 3px que tuviste y resolviste con el width: 99.0%; deriva del hasLayout, y coincido con que es un pain in the ass, pero prefiero arreglarlo a sufrirlo ;)

height:1%: ¿Qué acaso IE7 no respeta ese valor? ;)
Por cierto, nadie murió por tener una hoja de estilos que no valida. :)

Marcoss, te cito:

Decir que IE apesta no excusa para justificar que un sitio no funcione debidamente, eso es ser mediocre y los mediocres son los que realmente apestan.

¿Estás diciendo que la culpa de que un sitio bien maquetado, en un todo de acuerdo a los estándares recomendados por la W3C, al que MSIE no interpreta correctamente… es del sitio mismo?

Y, Federico: nadie murió por tener una hoja de estilos que no valida… pero qué lindo que se siente ésto. =P

NO, estoy totalmente de acuerdo con que IE representa un problema y sostengo que NO es culpa del diseñador/desarrollador que aún siguiendo las recomendaciones de la W3C las cosas no funcionen.

Ahora lo que estoy diciendo es que ante esta situación hay dos caminos, el fácil o mediocre que básicamente es sentarse en esas bases y excusarse en que X sitio valida perfectamente pero solo se ve en Y navegador, lamentablemente volvemos a lo mismo de requiere Z plugin y optimizado para blaxbla.

La segunda opción, un tanto mas difícil, consiste en lograr un equilibrio capaz de eliminar la necesidad de utilizar X navegador para acceder a Y sitio/aplicación.

Los hacks son del diablo.

La mejor manera de manera de mantener una estructura consistente entre IE y los navegadores de a deveras es usar comentarios condicionales:

<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
<!-- [if IE]>
<link rel="stylesheet" href="style-ie.css" type="text/css" media="screen" />
<![endif]-->

asi, en style-ie.css sobreescribes todas las reglas que causan conflicto en IE sin necesidad de utilizar un solo hack. Además asi todo es más legible y fácil de mantener.

sosa: cuando el layout es muy complicado creo que es la mejor solución la que planteas, yo personalente la uso para el solventar el problema del max-width: en IE.

Tengo problemas con la visualización, en Firefox se ve y funciona todo excelente y en IE todo lo contrario….¿Alguien me puede dar una mano?
Saludos y gracias!

Dejá tu opinión »