HTML5-Las tablas, esas viejas conocidas

logoRF_HTML5Quien no ha diseñado nunca con tablas?. Desde luego, creo que los que llevamos bastantes años en Internet, lo hemos hecho todos. El motivo era la falta de estilos y etiquetas que nos permitieran evitarlo, y la inexistencia de la idea «responsive».Hoy en dia, aunque este totalmente desaconsejado pata establecer layouts, siguen siendo necesarias en otras áreas.

Desde hace ya algunos años, nos han ido convenciendo de la poca utilidad de utilizar tablas para diseño, en un entorno tan exigente como el actual. El diseñar con tablas, nos crea una estructura totalmente rígida, que hace del «responsive design» una utopía, nuestro principal recurso, las famosas «media query» son totalmente inútiles ante un objeto con un numero determinado, y fijo, de filas y columnas. Si buscáis un poco en google.com acerca de las ventajas de «div vs tables«, entenderéis lo que os digo.

Para que, entonces, vamos a estudiar la etiqueta «table«?.  He comentado que no se considera correcto el uso de tablas para layouts, pero, cuando necesitamos mostrar datos tabulados, son el recurso correcto, para eso se crearon, y no hay ningún motivo para rehuirlas, incluso, en esta recomendación (HTML5), se potencia semánticamente su uso.

Y un ultimo comentario, ya se que a los que lleváis tiempo diseñando, no os tengo que convencer, pero para los que empiezan ahora, un consejo: no caigáis en la trampa de lo sencillo que parece diseñar con tablas, porque a la larga, las páginas se hacen inmantenibles, y, cuando te acostumbras, pensar en cajas (div, header, main, aside…) es igual de fácil.

Vamos a definir las etiquetas implicadas.

 Etiqueta  Significado
table Etiqueta que define al objeto table, y engloba a todas las demás.
caption Equivalente al ya visto «figcaption«, presenta un pie de tabla
 thead  engloba a las lineas de cabecera de la tabla; dentro pueden ir las tr/th que se requieran
 tbody engloba a las lineas de detalle de la tabla; puede haber mas de uno, y dentro, irán todas las lineas tr/td que sean necesarias
 tfoot engloba a las lineas de pie de tabla; solo puede haber una etiqueta tfoot por tabla, y dentro irán los tr/td que sean necesarios
 tr representa una fila de la tabla, y contiene el numero detd, que sean necesario.A menos que se declaren agrupamientos, el numero de td que van en un tr, ha de ser igual durante toda la tabla
 td representa la celda, y recubrirá el contenido que se quiera dejar dentro delaceldaSoporta los atributos:

colspan Extiende el contenido a traves de las celdas de las siguientes lineas
rowspan Extiende el contenido a traves de las celdas de las siguientes columnas
 header  Lista de los ID de las etiquetas th correspondientes a SU cabecera
 th es idéntica a la «td», pero representa una celda de cabecera . Dispone del atributo «scope». con los valores row | col | rowgroup | colgroup (default) , que indica a quien se le aplica la cabecera

Si queremos cer estas etiquetas en accion, podriamos hacer:

Ejemplo explicado del comportamiento de cada etiqueta de una tablaOs dejo el codigo HTML de una tabla, y la presentación que hará de la misma un navegador.

En (1) podéis ver el uso de «colspan» para fusionar todas las celdas de la fila, de tal manera que en esa fila, solo haya un celda, que ademas es «th», ya que es de cabecera

En (2), podéis ver el uso de «rowspan» para hacer que las tres primeras celdas, ocupen dos filas; como consecuencia, veis en (3), que esa fila colo tiene 2 celdas, ya que las otras tres columnas, estan definidas en el «tr» anterior.

Como podéis ver en  (4), el importe va a la columna correcta, ya que hemos ocupado las tres primeras columnas, expandiendo la fila anterior.

Y si quereis una tabla con un poco mas de estilo….solo tenéis que utilizar un poco de CSS, para hacer algo como esto:

2014-08-18_13h08_31

 

Le hemos añadido el correspondiente caption, que nos aparece justo encima de la tabla, y la frivolidad de darle un rayado, que se consigue gracias a :

tbody tr:nth-child(odd) {
background: #eee;
}

aunque reconozco que es bastante avanzado para este momento, os lo comento nadamas, aplicamos un color de background a los elementos tr, y como solo queremos que se aplique a los impares, le decimos «:nth_child(odd)»

A continuación, teneis un cuadro acerca de los atributos obsoletos, y como se pueden sustituir.

Atributo Se sustituye por CSS Valores Ejemplo
align text-alignfloat left|right|center|justifyleft|right text-align:rightfloat:left
valign vertical-align botton|top|middle|
baseline|sub|super
|text-top|text-botton| valor
vertical-align:top
width width valor|%|auto width:200px
height height valor|%|auto height:50em
bgcolorbackground background background-color
background-image
background-repeat
background-attachment
backfround-position
borderbordercolor border estilo color ancho border:solid red 10px
cellspacing border-collapseborder-spacing collapse|separate|valor
cellpadding padding valor| % padding:5px

 Como resumen a todo esto, podemos decir que, cuando se trata de datos tabulares, el uso de tablas, se hace intuitivo, y para el resto de casos,… nos las utilicemos.

Si realmente, os encontráis con un layout IMPOSIBLE de resolver sin tabla, cosa muy difícil, disponéis en CSS dentro de la característica «display«, todos los comportamientos de los objetos de tabla, (table-cell, table-row,…..), con lo que con algunos «div«, también se puede emular…..

En nuestro próximo articulo, revisaremos los nuevos atributos globales que se han incorporado en HTML5, y alguno de los que ya existían.

 

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Desarrollo Web, Diseño, Formacion, HTML5 y etiquetada , , . Guarda el enlace permanente.

2 respuestas a HTML5-Las tablas, esas viejas conocidas

  1. Eva Sanz dijo:

    Como se puede hacer para que en la tabla mostrada en el ultimo ejemplo la fila que indica importe 75,10 € y pagina http://www.trenes.com aparezca con background blanco. Al estar agrupada creo que es preferible mantener el color con el del nombre del usuario, al menos en la aplicación que esto realizando.

    Gracias. Un saludo

    • Miguel dijo:

      El efecto de tableado, es una forma de conseguir que la vista no se desvia horizontalmente, sin embargo en el ejemplo que presentamos se realiza de una forma muy sencilla desde CSS; para controlarlo como tu quieres, creo que lo mas correcto es que en servidor, cuando estas construyendo la tabla, implementes una rutina que vaya poniendo dos clases distintas a cada elemento, segun quieras el fondo de un color o de otro.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.