CSS: Tablas

Las tablas se forman mediante un conjunto de elementos HTML que permiten organizar datos en filas y columnas. Con el elemento <table> se crea la tabla, con <tr> se definen las filas y con <td> se crean las columnas o celdas. En este sentido, CSS ofrece propiedades para modificar sus estilos.

Elementos Descripción
<table> Contenedor de una tabla.
<tr> Creación de filas de celdas.
<th> Creación de celdas de encabezado.
<td> Creación de celdas de datos.

En el pasado, las tablas se usaban para crear diseños de páginas web. El hecho de que sean rectangulares facilitaba la maquetación. Sin embargo, hoy en día existen mejores métodos de posicionamiento de elementos de contenido dentro del documento HTML, como sería el caso de la flotación.

En CSS existen propiedades específicas que permiten modificar el estilo y el comportamiento de los elementos que forman la tabla, sobretodo de las celdas. Como es de esperar, existen propiedades genéricas que también se pueden usar en las tablas, como los bordes, los fondos, el color o las fuentes.

Propiedad Descripción
border-collapse Fusiona los bordes de una tabla.
border-spacing Distancia entre bordes de celdas vecinas.
empty-cells Esconde los bordes de una celda vacía.
caption-side Posiciona el elemento <caption> en una tabla.
table-layout Indica el tipo de representación de una tabla.

La propiedad ‘border-collapse’

La propiedad border-collapse permite fusionar los bordes de las celdas adyacentes. Por defecto, los navegadores web muestran los bordes de cada celda, por lo que las tablas se ven representadas con dos bordes. Si se opta por fusionarlos se verá un único borde, quedando un diseño más fino.

Esta propiedad tiene tres valores posibles:

Valor Descripción
collapse Fusiona los bordes.
separate Mantén los bordes separados.
inherit Hereda del elemento padre.

Ejemplo de tabla por defecto:

.separa1 {
  border-collapse: separate;
}
A B
C D

Tal y como se puede observar, las bordes de las celdas que coinciden con los de las otras celdas se ven con mayor grosor. En realidad se trata de dos bordes que se están tocando. Los separamos un poco para visualizarlos mejor.

.separa2 {
  border-collapse: separate;
  border-spacing: 4px;
}
A B
C D

Si ahora los juntamos con el valor collapse veremos que hay una línea con el mismo grosor que los bordes que no tienen celdas adyacentes.

.separa3 {
  border-collapse: collapse;
}
A B
C D

La propiedad ‘border-spacing’

En los ejemplos anteriores se pudo ver que se modificó la separación entre los bordes de celdas. Es posible hacer esto con la propiedad border-spacing, y tiene como requisito que la propiedad border-collapse tenga el valor separate. No tendría sentido indicar una separación cuando están fusionadas.

Como valor de la propiedad border-spacing se puede introducir cualquier unidad de longitud, ya sea relativa (píxeles, centímetros, milímetros, picas, etc) o absoluta (porcentajes, em y rem). Su valor inicial es 0.

Cuando se indica una única medida, su valor se asignará como separación horizontal y vertical. En cambio, si se indican dos medidas se puede hacer referencia a la separación horizontal y a la vertical, en este orden.

Así indicaríamos una separación de 10 píxeles:

table {
  border-collapse: separate;
  border-spacing: 10px;
}

La propiedad ‘empty-cells’

Con la propiedad empty-cells se puede aplicar estilos a las celdas vacías (elementos <th> y <td>) de una tabla. Igual que con la propiedad anterior, esta propiedad solo se aplica cuando la propiedad border-collapse tiene el valor separate. Lo que hace es ocultar o mostrar los bordes.

Valor Descripción
show Muestra los bordes.
hide Esconde los bordes.
inherit Hereda del elemento padre.

Las celdas vacías son aquellas que no tienen ningún tipo de contenido textual. Es interesante ocultarlas en algunos casos. Su valor por defecto es show: mostrar los bordes. Vamos a ver un ejemplo ocultando los bordes:

.oculta {
  border-collapse: separate;
  border-spacing: 2px;
  empty-cells: hide;
}
B
C

En este ejemplo hemos eliminado los valores «A» y «D» de las celdas. Si se hubiera añadido un espacio en blanco (entidad &nbsp;) se mostraría los bordes de la celda, ya que un espacio es contenido aunque no sea visible.

La propiedad ‘caption-side’

La propiedad caption-side permite decidir la posición del título descriptivo de una tabla indicado mediante el elemento <caption>. Se pueden definir dos posiciones: top (arriba) y bottom (abajo). Su valor por defecto es top. También se puede heredar el valor de su elemento padre.

Valor Descripción
top Sitúa el título arriba.
bottom Sitúa el título abajo.
inherit Hereda del elemento padre.

En el siguiente ejemplo situamos el título en la parte inferior:

.titulo {
  caption-side: bottom;
}
Título por debajo
A B
C D

Tal y como se puede ver en este ejemplo, el contenido del elemento <caption> aparece al final de la tabla a pesar de que sus etiquetas se encuentran al principio de la tabla. Se ha usado la propiedad text-align para que el título aparezca centrado en el ancho que ocupa la tabla.

La propiedad ‘table-layout’

La propiedad table-layout permite indicar el tipo de representación de una tabla. Dicho en otras palabras, permite especificar el tipo de algoritmo usado para calcular el tamaño de las celdas. Valores permitidos:

Valor Descripción
auto Tamaño automático al generarse.
fixed Tamaño fijo al generarse.
inherit Hereda del elemento padre.

Con el valor auto (por defecto), la mayoría de navegadores web aplican un tamaño automático: al generarse la tabla, las celdas se ajustan para adaptarse al tamaño del contenido. Es muy habitual que se use el valor por defecto.

El valor fixed (tamaño fijo) utiliza un algoritmo diferente. El tamaño horizontal no depende del contenido de las celdas, sino del ancho de la tabla, las columnas y el espaciado de los bordes. Este algoritmo genera la tabla de forma más rápida, por lo que es útil cuando se representan muchos datos.

← Artículo anterior
Artículo siguiente →