Las tablas en HTML son una de las formas más comunes de tabular el contenido alineándolo en filas y columnas.

La etiqueta general, que engloba a todas las demás es <TABLE> y </TABLE>. Es decir:

<TABLE>
    [resto de las etiquetas]
</TABLE>

En el siguiente nivel, dentro de la anterior, están las etiquetas para formar cada fila (table row) de la tabla, que son <TR> y </TR>. Hay que repetirlas tantas veces como filas queremos que tenga la tabla. Es decir que, para una tabla con dos filas:

<TABLE>
    <TR>
        [etiquetas de las celdas primera fila]
    </TR>
    <TR>
        [etiquetas de las celdas segunda fila]
    </TR>
</TABLE>

En el último nivel (dentro de las anteriores) están las etiquetas de cada celda (table data), que son <TD> y </TD> y las de encabezado (table header) que es <TH> y </TH>:

Dentro de las etiquetas TD se coloca el contenido (texto, imágenes, etc.) y dentro de las etiquetas TH un texto que, por defecto, se mostrará en negrita.

Hay que repetir la etiqueta tantas veces como celdas queremos que haya en esa fila:

<TABLE>
    <TR>
        <TH>
            TITULO O ENCABEZADO
        </TH>
    </TR>
    <TR>
        <TD>
            CONTENIDO
        </TD>
    </TR>
</TABLE>

Una etiqueta alternativa, permite añadir un título general a toda la tabla, un texto encima de esta que indica cuál es su contenido. Se consigue con la etiqueta <CAPTION> </CAPTION>:

<TABLE>
    <CAPTION>
        TITULO DE LA TABLA
    </CAPTION>
    [resto de las etiquetas]
</TABLE>

Por último, hay una serie de etiquetas opcionales que se utilizan para agrupar otras etiquetas.

COL (columna de una tabla) y COLGROUP (grupo de columnas de una tabla) se usan para agrupar columnas, mientras que THEAD (cabecera de tabla), TFOOT (pie de tabla) y TBODY (cuerpo de tabla) se usan para agrupar filas.

Este ejemplo es una tabla simple, con dos filas y tres columnas con un encabezado. Dentro de cada celda se incluye un texto:

<TABLE>
    <CAPTION>
        EJEMPLO DE UNA TABLA
    </CAPTION&gt
    <TR>
        <TH>
            COLUMNA 1
        </TH>
        <TH>
            COLUMNA 2
        </TH>
        <TH>
            COLUMNA 3
        </TH>
    </TR>
    <TR>
        <TD>
            fila1-celda1
        </TD>
        <TD>
            fila1-celda2
        </TD>
        <TD>
            fila1-celda3
        </TD>
    </TR>
    <TR>
        <TD>
            fila2-celda1
        </TD>
        <TD>
            fila2-celda2
        </TD>
        <TD>
            fila2-celda3
        </TD>
    </TR>
</TABLE>

Este es un ejemplo de una tabla simple:

EJEMPLO DE UNA TABLA
COLUMNA 1COLUMNA 2COLUMNA 3
fila1-celda1 fila1-celda2 fila1-celda3
fila2-celda1 fila2-celda2 fila2-celda3

¿Qué pasa si colocamos un número distinto de celdas en las filas? El navegador dibuja la tabla y la completa con espacios en blanco.

En el ejemplo anterior, eliminamos la fila1-celda2 y, para verlo claramente, vamos a agregarle un borde y ampliar el ancho de las celdas:

EJEMPLO DE UNA TABLA
COLUMNA 1COLUMNA 2COLUMNA 3
fila1-celda1 fila1-celda3
fila2-celda1 fila2-celda2 fila2-celda3

Como se vé, ese espacio vacío no queda en el medio sino al final de la fila.

Hasta ahora, en los ejemplos las celdas sólo contenían texto pero se puede poner cualquier otro elemento HTML, incluyendo imágenes, vínculos, lista, etc. Incluso, también puede ponerse otra tabla:

<TABLE BORDER=1>
    <TR>
        <TD>
            <IMG SRC="URLimagen">
        </TD>
        <TD>
            <TABLE BORDER=1>
                <TR>
                    <TD>1</TD><TD>2</TD>
                </TR>
                <TR>
                    <TD>3</TD><TD>4</TD>
                </TR>
            </TABLE>
        </TD>
    </TR>
</TABLE>
12
34

Cada etiqueta de una tabla posee una serie de atributos que le dan una gran flexibilidad.

Estos son los atributos del elemento TABLE:


align=alineamiento posición de la tabla respecto a la ventana
background=imagen imagen de fondo
bgcolor=color color de fondo de las celdas
border=valor controla la anchura del marco que rodea una tabla
cellpadding=valor espacio dentro de celdas
cellspacing=valor espacio entre celdas
frame=dato qué partes del marco representar
height=valor altura de una celda
rules=dato líneas de división entre filas y columnas
width=valor anchura de la celda

Vamos a ver algunos de los más utilizados.

Una de las característica más evidentes de las tablas es los datos pueden ir enmarcados por un borde. Para esto le agregamos el atributo BORDER a la etiqueta TABLE, y ponemos un valor que indicará su ancho:

<TABLE BORDER=ancho>

Por defecto, el valor a BORDER es 1 por lo que, si no queremos verlo, debemos escribir BORDER=0.

Normalmente es el navegador el que se encarga de dimensionar el tamaño total de la tabla de acuerdo con el número de filas y columnas y, fundamentealmente, de acuerdo al contenido de las celdas, espesor de los bordes, etc. Sin embargo, a veces es necesario forzarlo para que la tabla tenga unas dimensiones totales mayores o menores de las que le corresponden, tanto en ancho como en alto. Esto se consigue añadiendo dentro de la etiqueta de la tabla los atributos WIDTH y HEIGHT, y dándoles un valor que puede ser un porcentaje, o a una cifra expresada en pixeles.

<TABLE WIDTH=400 HEIGHT=200>

Por defecto, las tablas son transparentes pero pueden tener un color de fondo, para ello usamos el atributo BGCOLOR=”#XXYYZZ”.

<TABLE BGCOLOR="#000000">

También es posible utilizar una imagen como fondo, para ello usamos el atributo BACKGROUND=”URLimagen”.

<TABLE BACKGROUND="URLimagen">

Por defecto, la separación entre las distintas celdas de una tabla es de dos pixeles pero eso puede modificarse con el atributo CELLSPACING. De forma similar, por defecto, la separación entre el borde y el contenido dentro de las celdas es de un pixel pero se puede cambiar con el atributo CELLPADDING.

<TABLE CELLSPACING=10 CELLPADDING=5>

Estos son los atributos del elemento TR:


align=left|center|right|justify|char alineación
bgcolor=color color de fondo de una fila
char=caracter carácter de alineación, p.ej. char=’:’
charoff=valor offset para carácter de alineación
valign=top|middle|bottom|baseline alineación vertical en celdas

Y estos son los atributos de los elemento TH y TD:


abbr=texto abreviatura de celda de cabecera
align=left|center|right|justify|char alineación
axis=dato lista de cabeceras relacionadas separadas por comas
background=imagen imagen de fondo
bgcolor=color color de fondo de una celda
char=caracter carácter de alineación, p.ej. char=’:’
charoff=valor offset para carácter de alineación
colspan=cantidad número de columnas abarcado por celda
headers=dato lista de id’s de celdas de encabezado
height=valor altura de una celda
nowrap suprimir ajuste automático de líneas
rowspan=cantidad número de filas abarcado por la celda
scope=dato campo de aplicación de una celda de cabecera
valign=top|middle|bottom|baseline alineación vertical en celdas
width=valor ancho de la celda

Algunos de los atributos de las celdas son similares a los del elemento TABLE, tanto el ancho como el alto pueden establecerse añadiendo los atributos WIDTH y HEIGHT.

<TD WIDTH=400 HEIGHT=200>

Así mismo pueden tener un color o una imagen de fondo:

<TD BGCOLOR="#000000">
<TD BACKGROUND="URLimagen">
12
3 4

Normalmente, el contenido de una celda está alineado a la izquierda, el atributo ALIGN es el que se usa para modificarlo. Estos son los valores utilizados habitualmente:

<TD ALIGN="left">alineado a la izquierda</TD>
<TD ALIGN="right">alineado a la derecha</TD>
<TD ALIGN="center">centrado</TD>
<TD ALIGN="justify">texto justificado</TD>

Un par de atributos permiten que una celda se “expanda” abarcando otras. Medainte COLSPAN la extendemos horizontalmente y con ROWSPAN verticalmente:

Este es el modelo de una tabla con seis celdas, dos filas y tres columnas:

<TABLE BORDER=1>
    <TR>
        <TD>CELDA 1</TD>
        <TD>CELDA 2</TD>
        <TD>CELDA 3</TD>
    </TR>
    <TR>
        <TD>CELDA 4</TD>
        <TD>CELDA 5</TD>
        <TD>CELDA 6</TD>
    </TR>
</TABLE>
CELDA 1CELDA 2CELDA 3
CELDA 4CELDA 5CELDA 6

Ahora, vamos a extender la celda 1 para que abarque la celda 2:

<TABLE BORDER=1>
    <TR>
        <TD COLSPAN="2">CELDA 1</TD>
        <TD>CELDA 3</TD>
    </TR>
    <TR>
        <TD>CELDA 4</TD>
        <TD>CELDA 5</TD>
        <TD>CELDA 6</TD>
    </TR>
</TABLE>
CELDAS 1 y 2CELDA 3
CELDA 4CELDA 5CELDA 6

Y también extendemos la celda 4 para que abarque la celdas 5 y 6:

<TABLE BORDER=1>
    <TR>
        <TD COLSPAN="2">CELDA 1</TD>
        <TD>CELDA 3</TD>
    </TR>
    <TR>
        <TD COLSPAN="3">CELDA 4</TD>
    </TR>
</TABLE>
CELDAS 1 y 2CELDA 3
CELDA 4, 5 y 6

En el otro sentido, extendemos la celda 1 para que abarque la celdas 4:

<TABLE BORDER=1>
    <TR>
        <TD ROWSPAN="2">CELDA 1</TD>
        <TD>CELDA 2</TD>
        <TD>CELDA 3</TD>
    </TR>
    <TR>
        <TD>CELDA 5</TD>
        <TD>CELDA 6</TD>
    </TR>
</TABLE>
CELDAS 1 y 4CELDA 2CELDA 3
CELDA 5CELDA 6

Por último, combinamos ambos atributos y extendemos la celda 5 para que abarque la celdas 6:

<TABLE BORDER=1>
    <TR>
        <TD ROWSPAN="2">CELDA 1</TD>
        <TD>CELDA 2</TD>
        <TD>CELDA 3</TD>

    </TR>
    <TR>
        <TD COLSPAN="2">CELDAS 5 y 6</TD>
    </TR>
</TABLE>
CELDAS 1 y 4CELDA 2CELDA 3
CELDAS 5 y 6

Estos son los atributos de los elementos COL y COLGROUP que se verán más adelante:


span=valor los atributos de COL afectan a N columnas
width=valor especificación de la anchura de la columna
align=left|center|right|justify|char alineación
valign=top|middle|bottom|baseline alineación vertical en celdas
char=caracter carácter de alineación, p.ej. char=’:’
charoff=valor offset para carácter de alineación

Estos son los atributos de los elementos TBODY, TFOOT y THEAD que se verán más adelante:


align=left|center|right|justify|char alineación
valign=top|middle|bottom|baseline alineación vertical en celdas
char=caracter carácter de alineación, p.ej. char=’:’
charoff=valor offset para carácter de alineación

Por último, el elemento CAPTION sólo tiene un atributo: align=alineamiento.