Micaela 22 de Febrero de 2010 a las 08.00
   Imprimir artículo
elWebmaster.com

Cómo hacer que todos los navegadores rendericen HTML5 (incluso IE6)

html5HTML 5 presenta una gran cantidad de herramientas geniales para los diseñadores que desean que su código sea legible y semánticamente significativo.

En este tutorial les voy a enseñar cómo crear un diseño común utilizando algunos de los nuevos elementos semánticos de HTML5 y luego implementaremos JavaScript y CSS para que sea compatible con IE, incluso con el maldito IE6.

Revisión rápida de los elementos de HTML5

HTML5 pone a nuestra disposición un conjunto de nuevos elementos semánticamente significativos para describir el diseño típico de una página web. Utilizarlos hace que sea más fácil para uno leer y reconocer el código, y les facilita a los motores de búsqueda y a los lectores leer y organizar el contenido.

Los elementos HTML 5 que estaremos utilizando son:

  • header
  • footer
  • nav
  • article
  • hgroup

Simplemente leyendo los nombres de los elementos tendrán una buena idea de para qué sirven, y ese es el punto. Ahora se puede parar de abusar del tag <div> en todos los diseños carentes de tablas, y en su lugar crear titulares <header> y pies de página en base a <footer>.

El elemento que puede no ser tan obvio es <hgroup>. Este elemento simplemente define un grupo de encabezados (<h1> - <h6>) para que puedas agrupar el título y subtítulo de un artículo de un blog juntos, por ejemplo. Sería algo así como la cabecera de la sección de contenido.

Paso 1: HTML

Vamos a recrear el diseño más común de la web, el de 2 columnas:

2_column_layout

Este layout usualmente se logra con una cascada de elementos <div> pero con HTML5 se puede lograr de una forma muy natural:

  1. <!DOCTYPE html>
  2.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  3.    
  4.     <html>
  5.         <head>
  6.             <title><!-- Your Title --></title>
  7.         </head>
  8.        
  9.         <body>
  10.             <header>
  11.                 <!-- ... -->
  12.             </header>
  13.        
  14.             <nav>
  15.                 <!-- ... -->
  16.             </nav>
  17.        
  18.             <div id="main">
  19.                 <!-- ... -->
  20.             </div>
  21.        
  22.             <footer>
  23.                 <!-- ... -->
  24.             </footer>
  25.         </body> 
  26.     </html>

Y además, dentro de elemento "main", vamos a agregar algunos templates simples de artículos:

  1. <article>
  2.     <hgroup>
  3.         <h2>Title</h2>
  4.         <h3>Subtitle</h3>
  5.     </hgroup>
  6.    
  7.     <p>
  8.         <!-- --->
  9.     </p>
  10. </article>

Ahora tenemos un esqueleto completo en HTML5 que no utiliza más que las etiquetas significativas para todo el contenido. Fácil de leer, de analizar y de diseñar.

Si se preguntan por qué no se utilizó el elemento "section", en lugar de un <div> para la columna principal: la razón es que el elemento section no es un elemento contenedor genérico. Cuando un elemento se necesita para propósitos de estilo o como conveniencia para scripting, es recomendable utilizar el elemento <div>.

Paso 2: CSS

Posicionar todos estos elementos sería fácil si todos fueran divs, ya que sabemos la forma en que son manejados por todos los navegadores, así que sabemos cómo escribir CSS para ellos.

Sin embargo, además, todos los navegadores aplican una hoja de estilo predeterminada a una página. Incluso si no has especificado ninguna, hay CSS aplicándose cada vez que una página que has escrito se carga en Firefox o IE.

Por ejemplo, aquí está el estilo aplicado a un <div> en el archivo "html.css" por defecto que viene con Firefox:

  1. html, div, map, dt, isindex, form {
  2.     display: block;
  3. }

¿Pero qué sucede cuando un navegador se encuentra con un elemento que no reconoce? Nosotros no podemos estar seguros. Puede ser que no consiga ningún estilo; podría heredar un cierto estilo por defecto; es posible que no se muestre en absoluto.

Por lo tanto, debemos aseguramos de dar estilo a todos y cada uno de nuestros nuevos elementos en nuestro propio CSS. Sin hacer suposiciones:

  1. /* Hacer que los elementos de HTML 5 tengan display:block
  2. para mantener una coherencia */
  3. header, nav, article, footer, address {
  4.     display: block;
  5. }

Ahora podemos tratar a estos elementos como divs, seguros de que se mostrarán de forma consistente.

El Problema

Echemos un vistazo a nuestra disposición hasta el momento. Vean  nuestro diseño en Safari 4:

htmldemo_safari

Sin embargo, miren lo que sucede en Internet Explorer 6:

htmldemo_ie_broken

¿Qué hay de malo en esta imagen? Al establecer explícitamente display:block; en CSS, deberíamos haber comunicado al navegador nuestras intenciones para este elemento.

Desafortunadamente, IE está haciendo caso omiso de los elementos que no reconoce, independientemente del CSS. Nuestro contenido se queda flotando en el contenedor padre, como si los elementos de HTML5 no existieran.

De alguna manera, tenemos que hacer que IE renderice esos elementos desconocidos, y ya notamos que un estilo de la manera adecuada no va a lograrlo.

Paso 3: Javascript

Afortunadamente, hay una forma de lograr que IE reconozca los nuevos elementos con un poco de Javascript.

Esta técnica fue difundida en el blog de Jhon Resig, se llama "HTML 5 Shiv":

resig

Consiste simplemente en involucrar la llamada document.createElement() para cada elemento nuevo que no se reconoce.

Tradicionalmente harías esta llamada para inyectar un elemento de forma directa en alguna rama del DOM; en otras palabras, en un contenedor existente dentro de una etiqueta <body>.

Puedes utilizar esto para arreglar el problema de los elementos desconocidos también. Sin embargo, este truco también funciona llamando document.createElement() en la etiqueta <head>, sin tener que hacer referencia a un elemento contenedor. Esto lo hace todavía mucho más fácil de leer y escribir:

  1. document.createElement("article");
  2. document.createElement("footer");
  3. document.createElement("header");
  4. document.createElement("hgroup");
  5. document.createElement("nav");

Ahora que hemos añadido el JavaScript, veamos otra vez a Internet Explorer 6:

htmldemo_ie_fixed

Perfecto. Internet Explorer 6 ahora está renderizando el código HTML 5 tan bien como Safari 4. :)

Conclusión

HTML 5 es realmente excitante para cualquier diseñador web que desee generar código limpio, fácil de leer y semánticamente significativo. Y con sólo un par de pasos simples, una línea de CSS y una de JS por elemento, podemos comenzar a implementar HTML5 en nuestros sitios sin problemas hoy mismo.

¿Ya has probado esta técnica?

Fuente: Net Tuts

Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (12)

  1. Eddie Gamba dice:

    Me parece excelente la información brindada, me gustaría saber cómo le doy alineación derecha o izquierda a un texto?

  2. Alejandra dice:

    Hola! Si lo haces con CSS, deberás darle como atributo: "text-align:righ;" si lo quieres alineado a la derecha o "text-align:left;" si prefieres alinearlo a la izquierda. Espero que te sirva...

  3. Onasis dice:

    Está interesante la propuesta semántica que ofrece HTML 5. Por el momento, nos conformamos con la versión 4.01 de HTML o el XHTML 1.0 porque no todos los navegadores soportan las nuevas tecnologías. Después vendrá una nueva transición, similar a la que se dio de hacer el layout con etiquetas HTML a realizarlas con CSS 2.1 ó 3.

    @Eddie: Para alinear texto se utiliza la propiedad text-align y puede tener los valores: left, right, center, justify e inherit. Ejemplo: p {text-align: right;}

  4. DriverOp dice:

    El truco para que funcione en IE6 es simple, pero falta un detalle crucial: saber si el navegador es realmente el IE6. si se pone el script así nomás los navegadores que sí reconocen los nuevos tags estarán inyectando más código que el que la página realmente contiene.

    Otra cosa, faltó el tag .

  5. mi opinión dice:

    Eddie Gamba: ¿Te has leido un manual de CSS alguna vez?

  6. AlejandroBriz dice:

    El post chicos es un gran trabajo.
    Pero no veo razón para difundir hacks para IE6, es algo muerto hoy en día y así debe de ser.
    En Europa y América del norte el uso es mínimo en los últimos meses esperemos a fin de año solo dos usen IE6.
    Seria muy interesante usar Javascript para avisar al usuario de que realice una actualización de navegador y no forzar a que el DOM se coma los nuevos tags de Html5.

    Es mi humilde opinión, saludos.

  7. Pablo Gazzola dice:

    Muy buena información.
    Sin duda a más de uno nos vamos a recurrir a estos trucos a la hora de diseñar.
    Un saludo!

  8. Jorge Bravo dice:

    Vengo a comentar bastante tarde pero no me pude resistir la verdad jejejjeje, muy buen tip, no lo conocía y esta muy bien sobre todo para ir implementando desde ya algo que veníamos esperando desde hacia muchísimo tiempo. Ojala salgo similar para poder implementar CSS3 sin problemas.

    Con respecto al tema de IE6 no se hasta que punto se deba seguir dando soporte para algo que debería morir a como de lugar :D creo que lo más adecuado es hacer simplemente que el sitio web sea lo más navegable posible pero sin llegar a re adaptar toda su estructura y mostrar algún tipo de aviso que indique al usuario que convive con un zombie :P

    Saludos.

  9. Sarai dice:

    Buena la info, en el caso del tag de video que se hace?

  10. Miguel dice:

    Genial!!!! Aunque odio el Explorer no queda mas remedio que acoplarse porque mucha gente no sabe cambiar de navegador, pero yo he desarrollado para Firefox/Chrome y con poner el codigo me lo ha acoplado todo a Explorer, si hubiera tenido que cambiar mas prefiero perder visitas.

  11. Ignacio dice:

    Alejandro, por un lado me encataría finalmente dejar de pensar en los que usan ramitas para hacer fuego (ie6) y obviar los hacks. Pero cuando terminas una web, y tu cliente dice que la ve mal, la solución no es tratarlo de arcaico y dejar las cosas como están, porque su queja viene por los potenciales vistantes en los que el piensa en ese momento.
    Por supuesto que se lo puede educar, pero al menos acá, estamos lejos de los porcentajes que manejan EEUU y Europa, y no queda otra opción más que seguir luchando contra ese horrible monstruo de la e azul hasta que los números por acá sean los que deben ser.

  12. An dice:

    Muy bueno voy a probarlo!

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Iniciar sesión