HTML 5.1: elementos contenedores

·

Una de las grandes novedades en HTML 5 fue la incorporación tras muchos años de distintos contenedores que no dejan de ser más que un div pero que implícitamente incorporan cierto significado. En los nuevos borradores de HTML 5.1 se incorporan mejoras sobre estos elementos. Los elementos de los que estoy hablando son los siguientes:

Antes de nada voy a intentar hacer un repaso de cada uno de ellos, por orden alfabético, y al finalizar intentar poner un ejemplo de cómo debería construirse una página en base a estas informaciones.

address

Este elemento cambió radicalmente su concepto entre HTML 4 y HTML 5, y en esta última versión mantiene este nuevo sentido. El address representa la información de contacto del article más cercano (o padre) o del body en sí. Si se encuentra en el body sin un contenedor padre, se aplica a todo el documento.

El elemento address no debe representar una dirección postal, sino que debe aportar información de contacto relevante (por ejemplo el nombre, dirección de correo, un twitter, una dirección de facebook o similar), del autor del contenido en el que se encuentra. Este elemento sólo debe usarse para esta acción, la de dar información de contacto.

article

El elemento article representa de forma completa un contenido que podría ser reutilizado de forma independiente. Para poner un ejemplo claro, en una página de un periódico de papel, cada noticia sería un artículo por sí mismo, ya que tiene independencia completa de cualquier otro.

El elemento article puede contener otros article (o sea, es anidable), lo que significa que cada uno de esos elementos «pequeños» son independientes, pero conjuntamente pueden formar otro gran contenido.

En caso de querer indicar la información del autor de un article hay que utilizar el elemento address, y este es sólo aplicable a los extremos (es decir, no funciona en elementos contenedores, sino en los contenidos).

aside

El elemento aside representa una zona de la página con contenido «tangencialmente relacionado» al contenido principal de la página, pero que puede considerarse separado del mismo.

Volviendo al ejemplo de los periódicos, vendría a ser esos pequeños textos que suele haber en una noticia pero que no son la noticia en sí. Este bloque puede ser para dar información en otro tipo de tipografía, anuncios, grupos de enlaces y navegación o similar, que pueden considerarse independientes del contenido principal de la página.

body

El elemento body representa el contenido del documento, y por tanto sólo puede haber uno en cada página. Este es uno de los elementos más históricos del HTML, por lo que no creo que necesite mucha explicación.

div

El elemento div no tiene un significado especial, es simplemente un contenedor que permite agregarle información semántica no implícita. Es uno de los elementos «comodín».

Por ejemplo, si tuviéramos una noticia en la que hay varios fragmentos de texto en varios idiomas, podríamos usar este elemento para indicar dicho idioma, pero no afectaría a, por ejemplo, que en un article haya varios div, a nivel semántico.

Este es otro de los elementos que se añadió en la anterior versión y que tiene algunas diferencias con lo que habitualmente se tiene presente. Este elemento no es para simplemente dar formato al pie de página, sino que tiene muchos otros significados.

El footer representa el pie de su elemento superior (ya sea uno de los contenedores o de todo el body). En general el footer incluye información del autor, enlaces a documentos relacionados, copyright y similares.

Cuando encontramos que en el footer tenemos secciones enteras, podemos considerar que representan índices, licencias y contenidos por el estilo.

La información del autor, aunque se encuentre dentro del footer habría que integrarla en el elemento address (aunque sea en el footer mismo). En general este elemento se podría intercambiar con el header, aunque suele dejarse para ampliar o dar interpretaciones del autor a los elementos principales.

También hay que tener en cuenta que el footer no tiene que encontrarse obligatoriamente al final de un contenedor.

El elemento header representa el contenido introductorio del contenedor en el que se aloja. En general encontramos elementos introductorios o navigacionales.

En general aquí encontramos elementos como encabezados (los h1h6), aunque también podría ser una «tabla de contenidos», una caja de búsqueda o el logo.

Al igual que ocurre con el footer, se suelen utilizar únicamente como la cabecera y pie de una página (body) pero no se les da un uso habitual y debido en los article o section.

Este elemento no puede estar anidado en sí mismo, pero sí sobre sus diferentes padres, lo que permite que haya varios en una página.

main

Este es quizá uno de los elementos más esperados en HTML, y que se complementa de forma perfecta con los elementos incorporados en HTML 5.

El elemento main representa el contenido principal de un body. Digamos que el main es el contenido principal de la página, donde se encuentra la chicha, donde se encuentra la zona principal de la aplicación.

Hay que tener en cuenta que este elemento no permite ser parte de otros elementos como article o section, aunque sí del body, y que sólo puede haber un main por página.

El elemento main debería incorporar el contenido principal de la página, incluyendo elementos como los datos del autor, copyright, enlaces, logos, buscador, etc… siempre y cuando tengan relación con el contenido principal del documento.

El elemento nav representa una zona de la página en la que hay enlaces a otras páginas o a otras zonas de la página.

Hay que tener en cuenta que esto, en principio, no debería ser un listado de elementos, sino una zona de navegación. Esto significa que no todos los enlaces de una página han de encontrarse dentro de este elemento.

Los sitios más habituales donde encontraremos este elementos son al final de la página, dentro de un footer, donde se va a los términos y condiciones, a la página principal… También los podemos encontrar de forma habitual dentro de los aside, enlaces relacionados con el contenido principal.

section

El elemento section hace referencia a cada uno de los bloques genéricos de un gran contenido. Por ejemplo, dentro de la noticia de un periódico que tenemos un titular (probablemente con un h1) y varios subtítulos (seguramente con varios h2h6), cada uno de estos bloques probablemente sea un section.

Ejemplos variados podrían ser los distintos capítulos, diferentes pestañas dentro de una página o las distintas partes de una tesis. En una página web podría ser la introducción, las noticias y la información de contacto.

En general el section queda bastante relegado al elemento article que le da más sentido al contenido en sí. La gran diferencia entre section y article es que el section forma parte de algo, y el article es el algo en sí mismo.

Llegados a este punto…

…podríamos decir que ya tenemos claro los distintos elementos contenedores que podemos encontrar en un documento HTML, y en general quedaría claro cómo organizar una página.

Un ejemplo sencillo es el de un blog. Un blog suele tener dos páginas principales para nuestro caso: los listados y los artículos. El caso de los listados la página debería tener algo como:

  • body
  • header
  • /header
  • main
  • section
  • /section
  • section
  • /section
  • section
  • /section
  • section
  • /section
  • section
  • /section
  • /main
  • section
  • nav
  • /nav
  • /section
  • footer
  • nav
  • /nav
  • /footer
  • /body

Tenemos un body principal que hace referencia a todo el documento. En él tenemos una cabecera header que sería el titulo del blog, un cajetín de búsqueda, logos, publicidad, etc…

A partir de aquí tenemos el contenido principal main que es el listado de los artículos, que vendían representados por cada uno de esos section. Dependiendo del formato de cada uno de estos, podríamos considerar añadir su propia cabecera (header), pie (footer) y otros elementos (aside, nav…), aunque teniendo en cuenta que, por norma general los listados no contienen los artículos completos como en su propia página, no tendría sentido.

Tras esto tendríamos otra sección section que puede corresponder al menú lateral de navegación, opciones o como lo queramos llamar, en el que entre otras cosas podemos tener un menú de navegación nav (o varios) a otros listados (últimos artículos, últimos comentarios, publicidad, etc…).

Para acabar tenemos un pie de página en el que indicar cierta información, por ejemplo legal, además de un bloque de enlaces a distintas zonas de la página, y finalmente cerramos el contenido de la página.

Siguiendo con el mismo ejemplo, en este caso ya sí que de la entrada en concreto, podríamos tener los siguientes elementos:

  • body
  • header
  • /header
  • main
  • article
  • header
  • /header
  • section
  • /section
  • aside
  • /aside
  • section
  • /section
  • footer
  • address
  • /address
  • nav
  • /nav
  • /footer
  • /article
  • section
  • /section
  • /main
  • section
  • nav
  • /nav
  • /section
  • footer
  • nav
  • /nav
  • /footer
  • /body

Al igual que en el caso anterior, tenemos el cuerpo del documento, con su cabecera (igual que en el listado) y me voy a enfocar en este caso sólo a la parte principal main que es lo que cambia.

En este caso tenemos el contenido principal main que incluye un artículo article en el que existe una cabecera header (con el título del documento, la fecha de creación… entre otras cosas) y un primer bloque de información section.

Junto a esto tenemos otro bloque de contenido relacionado aside, dentro del mismo artículo, y otra sección, al que se finaliza con un pie de artículo footer en el que se incluye información del autor address además de enlaces a otras etiquetas nav, una zona para compartir el artículo.

Cuando se acaba la entrada article tenemos un bloque de comentarios section.

A partir de aquí ya tenemos lo mismo que en la plantilla de los listados, un menú lateral y un pie de página general.

Conclusión

Sin duda los elementos que añadió HTML 5, más el elemento main añadido en HTML 5.1 hacen que a nivel de organización de una plantilla, de una página o de cualquier tipo de documento generado en HTML se disponga de un significado semántico que si se aplica correctamente ayuda de forma elegante a las máquinas a comprender qué queremos destacar dentro de cada documento.

Personalmente creo que teniendo un poco de cuidado, principalmente con la anidación de elementos, y no haciendo un uso abusivo de ellos, se pueden conseguir grandes mejoras a la hora de desarrollar para Internet.