Etiquetas semánticas de HTML5

kraneok

Hola gente, que tal.

Ya son bastantes páginas web las que he desarrollado utilizando HTML5 y las nuevas etiquetas tan útiles que trae consigo. Pero claro, estas etiquetas ( refiriéndonos a la semánticas ) nos dejan total libertad acerca de como utilizarlas, por lo que quizás, en ocasiones no estemos utilizando correctamente todos los tags.

Sinceramente, cada vez que comienzo un nuevo proyecto me vuelven a atacar las mismas preguntas, vuelvo a irme a la documentación oficial, busco y rebusco en foros, ingleses, españoles y de la lengua que sea, para poder encontrar que opina cada diseñador y como utilizan los tags nuevos, como los anidan.

Entonces voy a lanzar una serie de cuestiones, que, podríamos intentar solucionar entre todos. Para realizar esto vamos a fijarnos en la documentación oficial de W3C acerca de HTML5, fijando siempre como base lo que explica la documentación sobre cada tag.

HTML5 y los TAGS semánticos

Primero y ante todo, para las personas que no sepan a que nos referimos con tags semánticos, vamos a dar una pequeña introducción:


   - Un tag semántico es un tipo de tag( etiqueta, marca, etc ) introducida en la nueva versión de
     HTML, HTML5. Este tipo de tags nuevos intenta solucionar algunos problemas respecto al uso    de     bloques DIV, añadiendo un extra para indicar a las spider de los buscadores, que es lo que contiene es bloque. Básicamente describen el contenido del bloque.

Ahora vamos a fijarnos en las nuevas etiquetas de HTML5, semánticas:

  - header
  - nav
  - section
  - article
  - aside 
  - figure
  - figcaption
  - footer
  - details
  - summary
  - mark
  - time

Pero vamos a fijarnos en las que sirven para crear la estructura de la página web: header, nav, section, article, aside y footer.

Bien, a simple vista, con estos nuevos tag vemos que se describe fácilmente una estructura de fichero HTML muy básico, tan básico, que en realidad nunca o casi en ninguna ocasión vamos a encontrarnos ante un proyecto de este tipo, si no que, necesitaremos anidar y anidar y anidar bloques de contenido, creando así un arquitectura de información mas profesional y usable.

Ahora, partiendo de un HTML, index.html normal:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>

</body>
</html>

Lanzo algunas preguntas :


- ¿ Como iniciaríais este documento HTML ?
- ¿ Como soléis anidar los bloques ?

Supongamos que tenemos que recrear en HTML5 esta estructura:

Como podemos ver, el documento HTML se divide en cinco bloques cada uno, donde tenemos en el primer bloque y mas superior el header, donde podríamos encontrar, por ejemplo: el logo, acceso, buscador. Seguidamente abajo de este bloque nos encontramos con el menu principal, donde como es lógico se situará un menu, que puede tener links a otras secciones de la web, a un lector RSS, a twitter, cualquier cosa. Mas abajo vamos a colocar un slider bastante grandote y seguidamente el contenido relevante. Y para terminar el footer.

En primera instancia podríamos crear el documento HTML5 de esta forma:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
         <header>
         </header>
          <nav>
          </nav>
          <section class="slider">
          <section>
          <section class="content">
          <section>
          <footer>
          </footer>
    </body>
</html>

Por orden natural, la estructura HTML5 sería formada de esta forma, pero, a mi me surgen varias dudas cuando te preguntas, el header no cubre toda la pantalla, es decir, el header va a ser un bloque de 1200px centrado y de fondo blanco, pero claro, para ello debería utilizar otro tag como padre para decir al navegador: ..oye, que este va centrado, pero tiene un padre que si se ajusta al body y ayuda a centrar el header real... Este problema se ve mejor en un bloque que tenga un color de fondo.

Imaginarios el bloque menu, este tiene un color negro, pero en realidad, el menu tiene 1200px de acho y está centrado, si no tuviese un padre, a los lados del menu se vería el fondo del body.

En este marco de trabajo, ya nos encontramos a donde quería llegar.

  • ¿ De que forma anidaríais entonces el nav ?
  • ¿ Sería correcto ?
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
         <section class="menu-wrapper"> ><!-- Ocupa el 100%  y es de color negro -->
              <nav class="menu"> <!-- 1200px y con el color de fondo de su padre -->
              </nav>
         </section>
</html>

Desde mi punto de vista, me parece mas lógico crear el documento HTML5 así, pues estamos diciendo que es una sección, que tiene un nav dentro, y que este nav contiene directamente ya todos los links del menu principal.

Por el contrario:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
         <nav class="menu-wrapper"> ><!-- Ocupa el 100%  y es de color negro -->
              <div class="menu"> <!-- 1200px y con el color de fondo de su padre -->
              </div>
         </nav>
</html>

Semánticamente para mi no es nada correcto, por un lado, por que estamos creando un nav el cual el spider va a entrar y va a necesitar acceder al div para saber que hay. Realmente no se como se tomaría el spider esto, pero estoy seguro que naturalmente es bastante peor que la opción anterior a esta última.

Por el contrario, el de arriba, el spider entraría a una sección, sabe que va a encontrar información importante y por si fuese poco, se encuentra el nav e inmediatamente se encuentra con todos los links.

Como conclusión propia y quizás esté equivocado, abogo por diferenciar las estructuras con los tag sections y desde ahí ir creando lo que vaya surgiendo:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
         <section>
             <header>
             </header>
         </section>
          <section>
             <nav>
              </nav>
          </section>
         <section>
             <aside>
              </aside>
         </section>
         <section>
              <section>
               </section>
               <aside>
                </aside>
         </section>
         ....
</html>

Me he enrollado mucho, ¿ que opinan ustedes ?,¿ como lo trabajan ?

1
kraneok

Aporto algo mas para darle fuerza a mi humilde argumento.
Según la RAE sección es : Cada una de las partes en que se divide un todo y según lo que dice el W3C sobre el tag : The <section> tag defines sections in a document...

Por lo que la web entera, se divide en secciones que contienen otras cosas, headers, mas secciones, articles, navs, asides, etc.

DarkSoldier

es una duda que yo tb tengo siempre xD lo añado a favs y a ver que sale de aquí :) esperemos a los profesionales!! jaja

1 respuesta
kraneok

#3 Me alegro de que te guste. Esperemos que podamos sacar una medida "estándar" de todo esto, pero debes de tener en cuenta, que casi todas las formas de hacerlo son válidas.

El DIV está ahí, solo es cuestión de utilizarlo, no hay problema. La cosa trata de acercar al spider la información correcta mas directa y rápidamente. Como he dicho, en una web muy simple la estructura natural se consigue muy fácilmente, pero en una estructura con un arquitectura de información muy dividida, es otro cantar.

RaymaN

No entiendo porqué metes todo dentro de section, queda bastante sucio. nav, header y footer deberían ser únicos y por tanto no hay necesidad de anidarlos.

Yo creo que cada section debería englobar a secciones diferenciadas del contenido que no pueden asociarse a otras etiquetas (comentarios, compartir, loquesea). Aún así, lo veo casi como un sinónimo de div, algo demasiado general.

Una posible estructura podría ser:

<body>
    <header>
        <nav></nav>
    </header>
    <section class="articles">
        <article></article>
        <article></article>
        <article></article>
        <article></article>
    </section>
    <aside>
        <div class="social"></div>
        <div class="subscribe"></div>
    </aside>
    <footer></footer>
</body>
1 4 respuestas
kraneok

#5 Si, para una web de estructura simple si, para otras no. Y no son únicos.
He visto gente que hace

<section>
        <header>
        </header>
        <div class="content">
        </div>
        <footer>
        </footer>
</section>

De W3C.

Definition and Usage

The <header> tag specifies a header for a document or section.

The <header> element should be used as a container for introductory content or set of navigational links.

You can have several <header> elements in one document.

Ejemplo de W3C

<article>
  <header>
    <h1>Internet Explorer 9</h1>
    <p><time pubdate datetime="2011-03-15"></time></p>
  </header>
  <p>Windows Internet Explorer 9 (abbreviated as IE9) was released to
  the  public on March 14, 2011 at 21:00 PDT.....</p>
</article> 
kraneok

#5 Sobre section, no slo no ensucida el código, si no que sería algo incluso natural.
Piensalo.

W3C
Definition and Usage

The <section> tag defines sections in a document, such as chapters, headers, footers, or any other sections of the document.

1 respuesta
ESL_Kaiser

#7 estoy deacuerdo con #5 deberias echar un ojo a las etiquetas que metes dentro de un section

http://www.crearcrear.com/wp-content/uploads/2013/12/Principios-b%C3%A1sicos-sobre-HTML5-4.png

1 respuesta
kraneok

#8
W3C
Definition and Usage

The <section> tag defines sections in a document, such as chapters, headers, footers, or any other sections of the document.

ESL_Kaiser

como quieras, no se para que pides opinion entonces

2 respuestas
kraneok

#10 Estamos debatiendo, ¿ o no ?. Tu me expones una URL, y yo te contrapongo con la W3C que es la especificación oficial de HTML5.
Dame tu opinion de experiencia, me interesa mas como lo haces tu.

1 respuesta
ESL_Kaiser

#11 yo lo que no hago, es meter un bloque dentro de otro bloque innecesariamente, como te ha dicho Rayman no hace falta anidarlos. ¿para qué vas a meter un nav dentro de un section? si ya el nav viene definido y/o lo puedes definir tu?

es tonteria, ademas no es funcional, por que si metes en css un valor general para section se te jode toda la plantilla y tienes que estar definiendo 1 a 1, total que es una plantilla sucia, no funcional y con codigo de más que no pinta nada... asi por ponerte un ejemplo rápido

2 respuestas
kraneok

#12 Eso es mas interesante, desde luego, voy a indagar algo mas.

Kiroushi

Aún no entiendo cómo hay gente que no usa frameworks CSS...

3 respuestas
RaymaN

#14 porque si tu web es lo suficientemente compleja pasarás más tiempo adaptando un framework que haciéndolo desde cero. Y aprenderás menos, por supuesto.

1 respuesta
DantePD

Yo veo lo de <section> como los rows de Bootstrap.

Es decir, el <header> es un row y no hace falta meterlo dentro de <section>.

#14 aunque utilices un framework CSS como Bootstrap o Foundation tienes que seguir utilizando etiquetas de HTML xD

1 respuesta
Kiroushi

#15 Permíteme que lo dude. Un CSS a partir de un SASS o LESS con mixins es 2000 veces más funcional, limpio, ordenado, y eficiente para aprender que crear mil agrupaciones que se pisan unas con otras.

#16 Lo decía por #12.

1 1 respuesta
ESL_Kaiser

#17 deberia darme por aludido o algo?

eXtreM3

#14 aún no entiendo por qué los frameworks se han extendido tanto. Ahora todas las putas webs son iguales con el bootstrap de los cojones.

2 1 respuesta
smintcs

tal como yo lo entiendo header y section no son únicos.

En una tienda online tenemos arriba una cabecera con un banner y un menu, en el medio contenido que depende de si estamos en la ficha de un producto, en el carrito o en donde sea, y abajo del todo el footer.

En principio tendriamos header, section, footer.

Dentro del section este del medio, puedo tener mil cosas.

Supongamos que tengo una lista de los productos mas comprados, otra de productos nuevos, y otra de ofertas.

Pues cada cosa de estas sería un section, y podria tener dentro un header que fuera el nombre de esa sección.

<header>
    superbanner
    <nav></nav>
</header
<section id=contenido>

  <section>
    <header><h2>mas vistos</h2>
    </header>
    fotucas varias
 </section>

  <section>
    <header><h2>novedades</h2>
    </header>
    fotucas varias
 </section>

</section>

<footer>
</footer>

No tiene sentido que metan las etiqueta header y footer para usar solo una por página.

1 2 respuestas
DarkSoldier

#5 eso de que son únicos te lo has sacado de la manga (yo tb lo pensaba pero Tunnecino me enseño que no xD)

#10 que nazi... el tio no ha preguntado nada, esta abriendo debate porque al fin y al cabo no hay solo una manera de hacerlo... y nadie de aquí tiene la verdad absoluta xD

#19 tu tienes un ligero problema con los frameworks eh? XD

2 respuestas
kraneok

#20 Yo opino totalmente como tu y además, vuelvo a reiterar que ni header ni section son únicos, vuelvo a pegar el texto que está escrito en la especificación oficial en W3C.

Definition and Usage

The <section> tag defines sections in a document, such as chapters, headers, footers, or any other sections of the document.

No lo especifica directamente, pero si que dice, que una section puede estar dentro de otra y desde mi punto de vista, lo veo hasta orgánico o natural o como quieran llamarle xD

kraneok

#21 Correcto, abro un debate precisamente por que hay muchas formas de hacerlo y que creo que tienen cabida aquí. Todo depende de la complejidad de la arquitectura de la información.

eXtreM3

En el código de #20 yo cambiaría el id "contenido" por un div. Ya que englobar eso como section no tiene sentido. Un section no es un wrapper general (en este caso contenido).

Normalmente no vas a tener más de 2 niveles de anidamiento de section.

smintcs

Y esto va por todo en general, puedo tener varios footers en la misma página, puedo tener varios navs, un header dentro del footer o mil cosas raras.

El tema es tener claro que pones, donde lo pones y porque lo pones, no poner al tuntun.

Alguna vez he visto tambien meter toda la web en un section, que no se hasta que punto esta del todo bien.

1 respuesta
kraneok

#25 Ahí te has colado un poco xdd, un footer no puede tener un header xDD

W3C
Note: A <header> tag cannot be placed within a <footer>, <address> or another <header> element.

2 respuestas
eXtreM3

#26 yo utilizo los section cuando sé con certeza que el contenido que va directamente dentro es el contenido que quiero reflejar dentro de dicho section.

Es decir, no haría esto:

section contenedor
---- section sub-contenedor
------------ section contenido

Haría:

div contenedor
---- div sub-contenedor
------------ section contenido (con su header, sus articles de haberlos, etc)

2 respuestas
E

no he utilizado mucho html5, más que trastear por encima pero basicamente yo lo haría como dice #27

smintcs

#26 me he colao la verda con lo del footer, era demasiado rebuscado

1 respuesta
kraneok

#27 Me parece correcto. Yo lo que quiero transmitir, es que cuando se pone una etiqueta en nuestro documento, dentro de esa etiqueta exista el contenido que los spider esperan encontrar y no mil etiquetas mas, de ahí vienen todas las dudas.

Me parece correcto entonces lo que has expuesto por que, un div no da sentido semántico, baja el spider, otro div, lo mismo y va y encuentra un section, ahí ya toma valor si lo que el section tiene es lo que realmente queremos darle énfasis.

#29 Fallo técnico normal y corriente xD