Nota: Este documento es parte de una traducción al castellano de la Recomendación del W3C "HTML 4.01 Specification" (más información). Puede consultar laversión original del mismo. Para cualquier comentario o corrección acerca de la traducción póngase en contacto con el traductor en jrpozoarroba conclase punto net. Gracias por su colaboración.
Véase elAviso de copyright de la traducción.
Contenidos
El modelo de tablas de HTML permite a los autores organizar datos -- textos,texto preformateado, imágenes, vínculos, formularios, campos de formularios,otras tablas, etc. -- en filas y en columnas de celdas.
Cada tabla puede tener un título asociado (ver el elementoCAPTION) que proporciona una descripción corta del propósito dede la tabla. Se puede proporcionar también una descripción más larga (por mediodel atributosummary) para el provecho de las personas que utilicen agentes de usuariobasados en Braille o en voz.
Lasfilas de una tabla pueden agruparse en seccionesde encabezado, pie y cuerpo, (por medio de los elementosTHEAD,TFOOT yTBODY,respectivamente). Los grupos de filas conllevan información estructural adicionaly los agentes de usuario los pueden representar de modo que se enfatice estaestructura. Los agentes de usuario pueden sacar partido de la división entreencabezado, cuerpo y pie para permitir el desplazamiento de las secciones de cuerpoindependientemente de las secciones de cabecera y pie. Cuando se imprimentablas largas, se puede repetir en cada página la información de cabecera y pieque contienen los datos de la tabla.
Los autores también puedenagrupar columnas para proporcionarinformación estructural adicional de la que pueden sacar partido los agentes de usuario.Además de esto, los autores pueden declarar propiedades de columnas al comienzode la definición de la tabla (por medio de los elementosCOLGROUP yCOL) de tal modo que se permita a losagentes de usuario representar la tabla incrementalmente en lugar de tener queesperar a que lleguen todos los datos de la tabla antes de empezar a representarla.
Lasceldas de la tabla puede contener o bien información de "encabezado"(ver el elementoTH) o de "datos" (ver el elementoTD). Las celdas pueden ocupar varias filas ycolumnas. El modelo de tablas de HTML 4 permite a los autores dar un rótulo a cada celdade modo que losagentes de usuario no visualespuedan comunicar más fácilmente información de encabezado de la celda al usuario. Estosmecanismos no sólo ayudan considerablemente a los usuarios con discapacidades visuales,sino que además permiten manejar tablas a navegadores multi-modo sin cables conposibilidades de representación limitadas (p.ej., teléfonos con soporte web).
No deberían usarse tablas con la única finalidad de organizar la presentaciónde los contenidos de un documento (es decir, de crear el "layout"), ya que estopuede ocasionar problemas cuando se represente en un medio no visual. Además,al incluir gráficos, estas tablas pueden forzar a los usuarios a hacer desplazarhorizontalmente la pantalla para ver una tabla diseñada en un sistema con una pantalla más grande.Para minimizar estos problemas, los autores deberían usarhojas de estilo en lugar de tablas para organizar la presentación.
Nota. Esta especificación incluye información más detalladasobre tablas en las secciones sobrefundamentosdel diseño con tablas y cuestiones de implementación.
Aquí tenemos una tabla sencilla que ilustra algunas de las características del modelo detablas de HTML. La siguiente definición de tabla:
<TABLE border="1" summary="Esta tabla da algunas estadísticas sobre la mosca de la fruta: altura y peso medio, y porcentaje con los ojos rojos (para machos y para hembras)."><CAPTION><EM>Una tabla de prueba con celdas fusionadas</EM></CAPTION><TR><TH rowspan="2"><TH colspan="2">Media <TH rowspan="2">Ojos<BR>Rojos<TR><TH>altura<TH>peso<TR><TH>Machos<TD>1.9<TD>0.003<TD>40%<TR><TH>Hembras<TD>1.7<TD>0.002<TD>43%</TABLE>
podría representarse de una manera similar a ésta en un dispositivo tty:
Una tabla de muestra con celdas fusionadas /-----------------------------------------\ | | Media | Ojos | | |-------------------| rojos | | | altura | peso | | |-----------------------------------------| | Machos | 1.9 | 0.003 | 40% | |-----------------------------------------| | Hembras | 1.7 | 0.002 | 43% | \-----------------------------------------/
o a ésta por un agente de usuario gráfico:

<!ELEMENTTABLE - - (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)><!ATTLIST TABLE -- elemento tabla --%attrs; --%coreattrs,%i18n,%events --summary%Text; #IMPLIED -- propósito/estructura para salida por voz --width%Length; #IMPLIED -- anchura de la tabla --border%Pixels; #IMPLIED -- controlar el borde que rodea a la tabla --frame%TFrame; #IMPLIED -- qué partes del borde representar --rules%TRules; #IMPLIED -- líneas de división entre filas y columnas --cellspacing%Length; #IMPLIED -- espaciado entre celdas --cellpadding%Length; #IMPLIED -- espacio dentro de las celdas -- >
Etiqueta inicial:obligatoria, Etiqueta final:obligatoria
Definiciones de atributos
Atributos definidos en otros lugares
El elementoTABLE contiene a todos los demás elementos que especifican el título,las filas, el contenido, y el formato.
La siguiente lista informativa describe qué operaciones pueden llevar a cabolos agentes de usuario cuando representen una tabla:
El modelo de tablas de HTML ha sido diseñado de modo que los agentes de usuario,con la ayuda de los autores, puedan representar las tablas
Para que un agente de usuario pueda dar formato a una tabla en un solo paso, losautores deben decir al agente de usuario:
Más concretamente, un agente de usuario puede representar una tabla en un solopaso cuando las anchuras de las columnas se especifiquen usando una combinaciónde elementosCOLGROUP y
Ladireccionalidad de una tablaes o bien la direccionalidad heredada (por defecto es de izquierda a derecha) obien la especificada por el atributodir del elementoTABLE.
Para una tabla de izquierda a derecha, la columna cero es la del ladoizquierdo y la fila cero es la superior. Para una columna de derecha a izquierda,la columna cero es la del lado derecho, y la fila cero es la superior.
Cuando un agente de usuario asigna celdas adicionales a una fila (véasela sección sobre elcálculo del número de columnas de una tabla),las celdas adicionales de la fila se añaden a la derecha de la tabla si la tablaes de izquierda a derecha, y a la izquierda si la tabla es de derecha a izquierda.
Obsérvese queTABLE es el único elemento en el quedirinvierte el orden visual de las columnas; no puede invertirse independientementeuna fila individual (TR) ni un grupo de columnas (COLGROUP).
El atributo
Para especificar una tabla de derecha a izquierda, el atributodirse establece como sigue:
<TABLE dir="RTL">...el resto de la tabla...</TABLE>
La dirección del texto en celdas individuales puede cambiarse estableciendoel atributodiren un elemento que defina la celda. Consulte la sección sobretexto bidireccional para más informaciónsobre cuestiones de dirección del texto.
<!ELEMENTCAPTION - - (%inline;)* -- título de una tabla --><!ATTLIST CAPTION%attrs; --%coreattrs,%i18n,%events -- >
Etiqueta inicial:obligatoria, Etiqueta final:obligatoria
Definiciones de atributos
Atributos definidos en otros lugares
El texto del elemento
Los agentes de usuario visuales permiten a las personas con visión percibirrápidamente la estructura de una tabla a partir de los encabezados así comoa partir del título. Una consecuencia de esto es que la información sobre elel propósito y la estructura de la tabla que dan los títulos normalmenteno será la adecuada desde la perspectiva de las personas que utilicen agentesde usuario no visuales.
Los autores deberían por lo tanto esforzarseen proporcionar información adicional resumiendo el propósito y laestructura de la tabla usando el atributosummary del elementoTABLE. Esto es especialmente importantepara tablas sin título. Los ejemplos que figuran más adelante ilustran el usodel atributosummary.
Los agentes de usuario visuales deberían evitarrecortar cualquierparte de la tabla, incluyendo el título, a menos que se proporcionen medios paraacceder a todo el contenido, p.ej., mediante un barra de desplazamiento horizontal o vertical.Recomendamos que el texto del título se ajuste a la misma anchura que la tabla. (Véase también lasección sobrealgoritmos recomendadosde composición de la presentación.)
Etiqueta inicial:obligatoria, Etiqueta final:opcional
<!ELEMENTTBODY O O (TR)+ -- cuerpo de tabla -->
Etiqueta inicial:opcional, Etiqueta final:opcional
<!ATTLIST (THEAD|TBODY|TFOOT) -- sección de tabla --%attrs; --%coreattrs,%i18n,%events --%cellhalign; -- alineación horizontal en las celdas --%cellvalign; -- alineación vertical en las celdas -- >
Atributos definidos en otros lugares
Las filas de una tabla pueden agruparse en una cabecera de tabla,un pie de tabla, y una o más secciones de cuerpo de tabla, usando los elementosTHEAD,TFOOTyTBODY,respectivamente. Esta división permite a los agentes de usuario ofrecer la posibilidadde desplazar la información de los cuerpos de la tabla independientemente de la cabecera y el pie.Cuando se imprimen tablas largas, la información de cabecera y pie de tabla puederepetirse en todas las páginas que contengan datos de la tabla.
La cabecera de tabla y el pie de tabla deberían contener informaciónsobre las columnas de la tabla. El cuerpo de tabla debería contener filasde datos de tabla.
En caso de estar presentes, cada elemento
Este ejemplo ilustra el orden y la estructura de encabezados, pies, y cuerposde tabla.
<TABLE><THEAD> <TR>...información de cabecera...</THEAD><TFOOT> <TR>...información de pie...</TFOOT><TBODY> <TR>...primera fila de los datos del bloque uno... <TR>...segunda fila de los datos del bloque uno...</TBODY><TBODY> <TR>...primera fila de los datos del bloque dos... <TR>...segunda fila de los datos del bloque dos... <TR>...tercera fila de los datos del bloque dos...</TBODY></TABLE>
TFOOT debe aparecer antes deTBODY dentro de una definición deTABLEde modo que los agentes de usuario puedan representar el pie antes de recibir todaslas (potencialmente numerosas) filas de datos. A continuación se resume quéetiquetas son obligatorias y cuáles pueden omitirse:
Los analizadores de los agentes de usuario conformes deben obedecer estas reglas porrazones de compatibilidad con versiones anteriores.
La tabla del ejemplo previo puede abreviarse quitando ciertas etiquetasiniciales:
<TABLE><THEAD> <TR>...información de cabecera...<TFOOT> <TR>...información de pie...<TBODY> <TR>...primera fila de los datos del bloque uno... <TR>...segunda fila de los datos del bloque uno...<TBODY> <TR>...primera fila de los datos del bloque dos... <TR>...segunda fila de los datos del bloque dos... <TR>...tercera fila de los datos del bloque dos...</TABLE>
Las seccionesTHEAD,TFOOT yTBODY deben contener el mismo número de columnas.
Los grupos de columnas permiten a losautores crear divisiones estructurales dentro de una tabla. Los autorespueden resaltar esta estructura por medio de hojas de estilo o con atributos HTML (p.ej., el atributorules del elementoTABLE).Para un ejemplo de presentación visual de grupos de columnas, consultelatabla de muestra.
Una tabla puede contener o bien un único grupo implícito de columnas(si no hay ningún elementoCOLGROUP delimitando las columnas), o cualquier número de gruposexplícitos de columnas (cada uno de ellos delimitado por un elementoCOLGROUP).
El elementoCOL permite a los autores compartir atributos entre varias columnassin que ello implique ningún tipo de agrupamiento estructural. El "campo de acción" delelementoCOLes el número de columnas que compartirán los atributos del elemento.
<!ELEMENTCOLGROUP - O (COL)* -- grupo de columnas de tabla --><!ATTLIST COLGROUP%attrs; --%coreattrs,%i18n,%events --spanNUMBER 1 -- número por defecto de columnas en el grupo--width%MultiLength; #IMPLIED -- anchura por defecto para las COLs contenidas --%cellhalign; -- alineación horizontal en las celdas --%cellvalign; -- alineación vertical en las celdas -- >
Etiqueta inicial:obligatoria, Etiqueta final:opcional
Definiciones de atributos
Los agentes de usuario deben ignorar este atributo si el elementoCOLGROUP contiene uno o más elementosCOL.
Este atributo especifica una anchura por defecto para cada columna del grupode columnas actual. Además de los valores normales de píxeles, porcentajesy longitudes relativas, este atributo permite la forma especial "0*" (cero asterisco)que significa que la anchura de cada columna del grupo debería ser laanchura mínima necesaria para alojar los contenidos de la columna. Estoimplica que antes de poder calcular correctamente la anchura de la columnadeben conocerse primero todos los contenidos de la columna. Los autoresdeberían tener en cuenta que al especificar "0*" impedirán a los agentesde usuario visuales representar la tabla incrementalmente.
La anchura de cualquier columna del grupo de columnas cuya anchura(width) se especifique mediante un elementoCOL prevalece sobre el valor de este atributo.
Atributos definidos en otros lugares
El elementoCOLGROUP crea un grupo explícito de columnas. El número de columnas delgrupo de columnas puede especificarse de dos maneras mutuamente exclusivas:
La ventaja de usar el atributospan es que los autores puedenagrupar información sobre las anchuras de las columnas. Así, si una tabla contienecuarenta columnas, todas ellas de 20 píxeles de ancho, es más fácil escribir:
<COLGROUP span="40" width="20"> </COLGROUP>
que:
<COLGROUP> <COL width="20"> <COL width="20">...un total de cuarenta elementos COL... </COLGROUP>
Cuando sea necesario distinguir una columna del resto del grupo (p.ej., para informaciónde estilo, para especificar información de anchura, etc.), los autores debenidentificar la anchura de esa columna con un elementoCOL. Así, para aplicar información deestilo especial a la última columna del ejemplo anterior, la singularizamos delsiguiente modo:
<COLGROUP width="20"> <COL span="39"> <COL> </COLGROUP>
El atributowidth del elementoCOLGROUP es heredado por las cuarenta columnas. El primer elementoCOLse refiere a las primeras 39 columnas (y no hace nada especial con ellas) y elsegundo asigna un valor deid a la columna número 40 de modo que una hoja de estilo puedahacer referencia a ella.
La tabla del siguiente ejemplo contiene dos grupos de columnas. El primergrupo de columnas contiene 10 columnas y el segundo contiene 5 columnas. Laanchura por defecto de las columnas del primer grupo de columnas es de 50 píxeles.La anchura de las columnas del segundo grupo de columnas será la mínima necesariapara cada columna.
<TABLE><COLGROUP span="10" width="50"><COLGROUP span="5" width="0*"><THEAD><TR><TD>...</TABLE>
<!ELEMENTCOL - O EMPTY -- columna de tabla --><!ATTLIST COL -- grupos y propiedades de columnas --%attrs; --%coreattrs,%i18n,%events --spanNUMBER 1 -- los atributos de COL afectan a N columnas --width%MultiLength; #IMPLIED -- especificación de la anchura de las columnas --%cellhalign; -- alineación horizontal en las celdas --%cellvalign; -- alineación vertical en las celdas -- >
Etiqueta inicial:obligatoria, Etiqueta final:prohibida
Definiciones de atributos
Atributos definidos en otros lugares
El elementoCOL permite a los autores agrupar especificaciones de atributos paracolumnas de tablas.COLno agrupacolumnas estructuralmente; ése es el papel del elementoCOLGROUP. Los elementosCOL están vacíos y sólo sirven como soportede atributos. Pueden aparecer dentro o fuera de un grupo explícito de columnas(es decir, de un elementoCOLGROUP).
El atributowidth deCOL se refiere a la anchura de todasy cada una de las columnas que abarca el elemento.
Hay dos maneras de determinar el número de columnas de una tabla (en ordende precedencia):
Es un error que una tabla contenga elementosCOLGROUP oCOLy que los dos cálculos no resulten en el mismo número de columnas.
Una vez que el agente de usuario ha calculado el número de columnas dela tabla, puede agruparlas engrupos de columnas.
Por ejemplo, para cada una de las tablas siguientes, los dos métodosde cálculo de columnas dan tres columnas. Las primeras tres tablas puedenrepresentarse incrementalmente.
<TABLE><COLGROUP span="3"></COLGROUP><TR><TD>......filas...</TABLE><TABLE><COLGROUP><COL><COL span="2"></COLGROUP><TR><TD>......filas...</TABLE><TABLE><COLGROUP><COL></COLGROUP><COLGROUP span="2"><TR><TD>......filas...</TABLE><TABLE><TR> <TD><TD><TD></TR></TABLE>
Los autores pueden especificar anchuras de columnas de tres maneras:
Sin embargo, si la tabla no tiene una anchura fija, los agentes de usuariodeben recibir todos los datos de la tabla antes de poder determinar el espaciohorizontal requerido por la tabla. Sólo entonces puede asignarse este espacioa las columnas proporcionales.
Si un autor no especifica información de anchura para una columna, un agentede usuario no puede dar formato a la tabla incrementalmente, ya que debe esperara que lleguen todos los datos de la columna para poder asignarle una anchuraadecuada.
Si las anchuras de las columnas resultan ser demasiado estrechas para loscontenidos de alguna de las celdas de la tabla, los agentes de usuario puedenoptar por remodelar la tabla.
La tabla de este ejemplo contiene seis columnas. La primera no pertenecea un grupo explícito de columnas. Las tres siguientes pertenecen al primergrupo explícito de columnas y las dos últimas pertenecen al segundo grupoexplícito de columnas. Esta tabla no puede ser formateada incrementalmenteya que contiene especificaciones de anchuras de columna proporcionales y nohay ningún valor para el atributowidth del elementoTABLE.
Una vez que el agente de usuario (visual) ha recibido los datos de la tabla,el agente de usuario asignará el espacio horizontal disponible como sigue:Primero el agente de usuario asignará 30 píxeles a las columnas uno y dos. Después,reservará el espacio mínimo requerido por la tercera columna. El resto delespacio horizontal lo dividirá es seis porciones iguales (ya que 2* + 1* + 3* = 6porciones). La columna cuatro (2*) recibirá dos de estas porciones, la columnacinco (1*) recibirá una, y la columna seis (3*) recibirá tres.
<TABLE><COLGROUP> <COL width="30"><COLGROUP> <COL width="30"> <COL width="0*"> <COL width="2*"><COLGROUP align="center"> <COL width="1*"> <COL width="3*" align="char" char=":"><THEAD><TR><TD>......filas...</TABLE>
Hemos establecido el valor del atributoalign del tercer grupo de columnas en"center". Todas las celdas de todas las columnas de este grupo heredarán estevalor, pero pueden anularlo. De hecho, elCOL hace justo eso, especificandoque todas las celdas de la columna que gobierna serán alineadas con el carácter ":".
En la siguiente tabla, las especificaciones de anchuras de columna permiten alagente de usuario dar formato a la tabla incrementalmente:
<TABLE width="200"><COLGROUP span="10" width="15"><COLGROUP width="*"> <COL> <COL><THEAD><TR><TD>......filas...</TABLE>
Las diez primeras columnas serán cada una de 15 píxeles de ancho. Las dos últimascolumnas recibirán cada una la mitad de los 50 píxeles restantes. Obsérvese que loselementosCOLsólo sirven para que pueda especificarse un valorid a las dos últimas columnas.
Nota. Aunque el atributowidth del elementoTABLE no está desaprobado,se aconseja a los autores usar hojas de estilo para especificar anchurasde tabla.
<!ELEMENTTR - O (TH|TD)+ -- fila de tabla --><!ATTLIST TR -- fila de tabla --%attrs; --%coreattrs,%i18n,%events --%cellhalign; -- alineación horizontal en las celdas --%cellvalign; -- alineación vertical en las celdas -- >
Etiqueta inicial:obligatoria, Etiqueta final:opcional
Atributos definidos en otros lugares
Los elementosTR actúan como contenedores de una fila de celdas de una tabla. La etiquetafinal puede omitirse.
Esta tabla de ejemplo contiene tres filas, cada una iniciada con el elementoTR:
<TABLE summary="Esta tabla muestra el número de tazas de café consumidas por cada senador, el tipo de café (descafeinado o normal), y si lo toma con azúcar."><CAPTION>Tazas de café consumidas por cada senador</CAPTION><TR>...Una fila de encabezado...<TR>...Primera fila de datos...<TR>...Segunda fila de datos......el resto de la tabla...</TABLE>
<!ELEMENT (TH|TD) - O (%flow;)* -- celda de encabezado de tabla, celda de datos de tabla --><!-- Para las tablas normales scope es más simple que el atributo headers --><!ENTITY % Scope "(row|col|rowgroup|colgroup)"><!-- TH es para encabezados, TD es para datos, y para celdas que actúen como ambos use TD --><!ATTLIST (TH|TD) -- celda de encabezado o de datos --%attrs; --%coreattrs,%i18n,%events --abbr%Text; #IMPLIED -- abreviatura para la celda de encabezado --axisCDATA #IMPLIED -- lista de encabezados relacionados separados por comas --headersIDREFS #IMPLIED -- lista de id's de celdas de encabezado --scope%Scope; #IMPLIED -- campo de acción cubierto por las celdas de encabezado --rowspanNUMBER 1 -- número de filas abarcado por la celda --colspanNUMBER 1 -- número de columnas abarcado por la celda --%cellhalign; -- alineación horizontal en las celdas --%cellvalign; -- alineación vertical en las celdas -- >
Etiqueta inicial:obligatoria, Etiqueta final:opcional
Definiciones de atributos
Atributos definidos en otros lugares
Las celdas de una tabla pueden contener dos tipos de información:
El elementoTH define una celda que contiene información de encabezado. Los agentesde usuario tienen a su disposición dos piezas de información de encabezado: los contenidosdel elementoTHy el valor del atributoabbr. Los agentes de usuario deben representar obien los contenidos de la celda o bien el valor del atributoabbr. En medios visuales, el últimopuede ser apropiado cuando no hay espacio suficiente para representar loscontenidos completos de la celda. Para medios no visuales puede usarseabbrcomo abreviatura de los encabezados de la tabla cuando éstos se representenjunto con los contenidos de las celdas a las que se aplican.
Los atributosheaders y
El elementoTD define una celda que contiene datos.
Las celdas pueden estar vacías (es decir, pueden no contener datos).
Por ejemplo, la siguiente tabla contiene cuatro columnas de datos, cadauna encabezada por una descripción de la columna.
<TABLE summary="Esta tabla muestra el número de tazas de café consumidas por cada senador, el tipo de café (descafeinado o normal), y si lo toma con azúcar"><CAPTION>Tazas de café consumidas por cada senador</CAPTION><TR> <TH>Nombre</TH> <TH>Tazas</TH> <TH>Tipo de Café</TH> <TH>¿Azúcar?</TH><TR> <TD>T. Sexton</TD> <TD>10</TD> <TD>Espresso</TD> <TD>No</TD><TR> <TD>J. Dinnen</TD> <TD>5</TD> <TD>Descafeinado</TD> <TD>Sí</TD></TABLE>
Un agente de usuario que represente la salida en un dispositivo ttypodría mostrar esto como sigue:
Nombre Tazas Tipo de Café ¿Azúcar?T. Sexton 10 Espresso NoJ. Dinnen 5 Descafeinado Sí
Las celdas pueden abarcar varias filas o columnas. El número de filas o de columnasabarcado por una celda se establece con los atributosrowspan ycolspan de los elementosTH yTD.
En esta definición de tabla, especificamos que la celda de la fila cuatro,columna 2, debería abarcar un total de tres columnas, incluyendo la columnaactual.
<TABLE border="1"><CAPTION>Tazas de café consumidas por cada senador</CAPTION><TR><TH>Nombre<TH>Tazas<TH>Tipo de Café<TH>¿Azúcar?<TR><TD>T. Sexton<TD>10<TD>Espresso<TD>No<TR><TD>J. Dinnen<TD>5<TD>Descafeinado<TD>Sí<TR><TD>A. Soria<TD colspan="3"><em>No disponible</em></TABLE>
Un agente visual podría representar esta tabla en un dispositivo ttycomo sigue:
Tazas de café consumidas por cada senador ----------------------------------------- | Nombre |Tazas|Tipo de Café |¿Azúcar?| ----------------------------------------- |T. Sexton|10 |Espresso |No | ----------------------------------------- |J. Dinnen|5 |Descafeinado |Yes | ----------------------------------------- |A. Soria |No disponible | -----------------------------------------
El siguiente ejemplo ilustra (con la ayuda de los bordes de la tabla)cómo afectan las definiciones de celdas que abarcan más de una fila o de unacolumna a la definición de celdas posteriores. Consideremos la siguientedefinición de tabla:
<TABLE border="1"><TR><TD>1 <TD rowspan="2">2 <TD>3<TR><TD>4 <TD>6<TR><TD>7 <TD>8 <TD>9</TABLE>
Al abarcar la celda "2" la primera y la segunda filas, la definiciónde la segunda fila la tendrá en cuenta. Así, el segundoTD de la fila dos en realidaddefine la tercera celda de la fila. Visualmente, la tabla podría representarseen un dispositivo tty como sigue:
-------------| 1 | 2 | 3 | ----| |----| 4 | | 6 |----|---|----| 7 | 8 | 9 |-------------
mientras que un agente de usuario gráfico podría representarlo de esta forma:

Obsérvese que si elTD que define la celda "6" hubiera sido omitido, el agente de usuariohabría añadido una celda adicional vacía para completar la fila.
Análogamente, en la siguiente definición de tabla:
<TABLE border="1"><TR><TD>1 <TD>2 <TD>3<TR><TD colspan="2">4 <TD>6<TR><TD>7 <TD>8 <TD>9</TABLE>
la celda "4" abarca dos columnas, de modo que el segundoTD de la fila en realidad define latercera celda ("6"):
-------------| 1 | 2 | 3 | --------|----| 4 | 6 |--------|----| 7 | 8 | 9 |-------------
Un agente de usuario gráfico podría representarlo de esta forma:

La definición de celdas superpuestas es un error. Los agentes de usuariopueden tratar este error de formas diferentes (p.ej., la representaciónpuede variar).
El siguiente ejemplo ilegal ilustra cómo podrían crearse celdassuperpuestas. En esta tabla, la celda "5" abarca dos filas y la celda "7"abarca dos columnas, de modo que hay una superposición en la celda que estáentre "7" y "9":
<TABLE border="1"><TR><TD>1 <TD>2 <TD>3<TR><TD>4 <TD rowspan="2">5 <TD>6<TR><TD colspan="2">7 <TD>9</TABLE>
Nota. Las siguientes secciones describen los atributos HTMLrelacionados con el formato visual de tablas. Cuando esta especificación fuepublicada por primera vez en 1997,[CSS1] no ofrecía mecanismos para controlar todos los aspectosdel formato visual de tablas. Desde entonces,[CSS2] ha añadido propiedadespara permitir el formato visual de tablas.
HTML 4 incluye mecanismos para controlar:
Los atributos siguientes afectan al marco externo (frame) y a las líneas de división interiores(rules) de una tabla.
Definiciones de atributos
Para ayudar a distinguir las celdas de una tabla, podemos establecerel atributoborder del elementoTABLE. Consideremos uno de losejemplos previos:
<TABLE border="1" summary="Esta tabla muestra el número de tazas de café consumidas por cada senador, el tipo de café (descafeinado o normal) y si lo toma con azúcar."><CAPTION>Tazas de café consumidas por cada senador</CAPTION><TR> <TH>Nombre</TH> <TH>Tazas</TH> <TH>Tipo de Café</TH> <TH>¿Azúcar?</TH><TR> <TD>T. Sexton</TD> <TD>10</TD> <TD>Espresso</TD> <TD>No</TD><TR> <TD>J. Dinnen</TD> <TD>5</TD> <TD>Descafeinado</TD> <TD>Sí</TD></TABLE>
En el siguiente ejemplo, el agente de usuario debería mostrarbordes de cinco píxeles de grosor en los lados izquierdo y derecho de latabla, con líneas de división entre cada dos columnas.
<TABLE border="5" frame="vsides" rules="cols"><TR> <TD>1 <TD>2 <TD>3<TR> <TD>4 <TD>5 <TD>6<TR> <TD>7 <TD>8 <TD>9</TABLE>
Los agentes de usuario deberían obedecer las siguientes especificacionespara conservar la compatibilidad con versiones anteriores.
Por ejemplo, las siguientes definiciones son equivalentes:
<TABLE border="2"><TABLE border="2" frame="border" rules="all">
así como las siguientes:
<TABLE border><TABLE frame="border" rules="all">
Nota. El atributoborder también define el comportamientode los bordes de los elementos
Los siguientes atributos pueden especificarse para diferentes elementosde una tabla (véanse sus definiciones).
<!-- atributos de alineación horizontal de los contenidos de las celdas --><!ENTITY % cellhalign "align (left|center|right|justify|char) #IMPLIEDchar%Character; #IMPLIED -- carácter de alineación, p.ej. char=':' --charoff%Length; #IMPLIED -- offset del carácter de alineación --" ><!-- atributos de alineación vertical para los contenidos de las celdas --><!ENTITY % cellvalign "valign (top|middle|bottom|baseline) #IMPLIED" >
Definiciones de atributos
Cuando se usacharoff para establecer el offset de un carácter de alineación,la dirección del desplazamiento está determinada por la dirección actualdel texto (establecida con el atributodir). En texto de izquierda a derecha (el valorpor defecto), el desplazamiento es desde el margen izquierdo. En textos dederecha a izquierda, el desplazamiento es desde el margen derecho. Losagentes de usuario no necesitan soportar este atributo.
La tabla de este ejemplo alinea una fila de valores monetarios alrededorde un punto decimal. Hemos establecido explícitamente el carácter dealineación "."
<TABLE border="1"><COLGROUP><COL><COL align="char" char="."><THEAD><TR><TH>Verdura <TH>Precio por kilo<TBODY><TR><TD>Lechuga <TD>$1<TR><TD>Zanahorias <TD>$10.50<TR><TD>Nabos <TD>$100.30</TABLE>
La tabla formateada puede parecerse a la siguiente:
-------------------------------| Verdura |Precio por kilo||-------------|---------------||Lechuga | $1 ||-------------|---------------||Zanahorias | $10.50||-------------|---------------||Nabos | $100.30|-------------------------------
Cuando los contenidos de una celda contienen más de una aparición delcarácter de alineación especificado porchar y los contenidos nocaben en una sola línea, el comportamiento del agente de usuario quedasin especificar. Los autores deberían por lo tanto tener cuidado cuandousenchar.
Nota. Los agentes de usuario visuales suelen representarlos elementosTHhorizontal y verticalmente centrados dentro de la celda y con una fuente ennegrita.
La alineación de los contenidos de una celda puede especificarse independientementepara cada celda, o heredarse de los elementos que la contienen, como una fila, unacolumna, o la propia tabla.
El orden de precedencia (de más alta a más baja) de los atributosalign,char ycharoff es el siguiente:
El orden de precedencia (de más alta a más baja) para el atributovalign(así como para los otros atributos heredadoslang,dir ystyle) es el siguiente:
Además de eso, cuando se representen celdas, para determinar la alineación horizontallas columnas tienen preferencia sobre las filas, mientras que para la alineación verticallas filas tienen preferencia sobre las columnas.
La alineación por defecto de las celdas depende del agente de usuario.Sin embargo, los agentes de usuario deberían establecer el atributo por defectosegún la direccionalidad actual (es decir, que no sea "left" en todos los casos).
Los agentes de usuario que no soporten el valor "justify" del atributoalign deberían usar en su lugar el valor heredado de la direccionalidad.
Definiciones de atributos
Estos dos atributos controlan el espacio entre y dentro de las celdas.La siguiente ilustración explica cuál es la relación entre ellos:

En el siguiente ejemplo, el atributocellspacing especifica que las celdasdeberían estar separadas entre sí y hasta el marco de la tabla por veintepíxeles. El atributocellpadding especifica que el margen superior de la celda y elmargen inferior de la celda estarán separados de los contenidos de la celda porel 10% del espacio vertical disponible (para un total del 20%). Análogamente,el borde izquierdo de la celda y el borde derecho de la celda estarán separadosde los contenidos de la celda por el 10% del espacio horizontal disponible (paraun total del 20%).
<TABLE cellspacing="20" cellpadding="20%"><TR> <TD>Dato1 <TD>Dato2 <TD>Dato3</TABLE>
Si una tabla o columna dada tiene una anchura fija,cellspacing ycellpadding pueden requerir másespacio que el asignado. Los agentes de usuario pueden dar a estos atributosprecedencia sobre el atributowidth cuando existan conflictos, pero no necesitan hacerlo.
Los agentes de usuario no visuales tales como sintetizadores de vozo dispositivos Braille pueden usar los siguientes atributos de loselementosTD y
En el siguiente ejemplo, asignamos información de encabezado a celdaspor medio del atributoheaders. Todas las celdas de una misma columna se refieren a la mismacelda de encabezado (a través del atributoid).
<TABLE border="1" summary="Esta tabla muestra el número de tazas de café consumidas por cada senador, el tipo de café (descafeinado o normal), y si lo toma con azúcar."><CAPTION>Tazas de café consumidas por cada senador</CAPTION><TR> <TH>Nombre</TH> <TH>Tazas</TH> <TH abbr="Tipo">Tipo de Café</TH> <TH>¿Azúcar?</TH><TR> <TD headers="t1">T. Sexton</TD> <TD headers="t2">10</TD> <TD headers="t3">Espresso</TD> <TD headers="t4">No</TD><TR> <TD headers="t1">J. Dinnen</TD> <TD headers="t2">5</TD> <TD headers="t3">Descafeinado</TD> <TD headers="t4">Sí</TD></TABLE>
Un sintetizador de voz podría representar esta tabla de la forma siguiente:
Título: Tazas de café consumidas por cada senadorResumen: Esta tabla muestra el número de tazas de café consumidas por cada senador, el tipo de café (descafeinado o normal), y si lo toma con azúcar.Nombre: T. Sexton, Tazas: 10, Tipo: Espresso, Azúcar: NoNombre: J. Dinnen, Tazas: 5, Tipo: Decaf, Azúcar: Sí
Observe como se abrevia el encabezado "Tipo de Café" a "Tipo"usando el atributoabbr.
Aquí tenemos el mismo ejemplo, utilizando el atributoscope en lugar del atributoheaders. Obsérvese el valor "col" del atributoscope,que significa "todas las celdas de esta columna":
<TABLE border="1" summary="Esta tabla muestra el número de tazas de café consumidas por cada senador, el tipo de café (descafeinado o normal), y si lo toma con azúcar."><CAPTION>Tazas de café consumidas por cada senador</CAPTION><TR> <TH scope="col">Nombre</TH> <TH scope="col">Tazas</TH> <TH scope="col" abbr="Tipo">Tipo de Café</TH> <TH scope="col">¿Azúcar?</TH><TR> <TD>T. Sexton</TD> <TD>10</TD> <TD>Espresso</TD> <TD>No</TD><TR> <TD>J. Dinnen</TD> <TD>5</TD> <TD>Descafeinado</TD> <TD>Sí</TD></TABLE>
Aquí hay un ejemplo algo más complejo que ilustra otros valores delatributo
<TABLE border="1" cellpadding="5" cellspacing="2" summary="Cursos de historia ofrecidos en la comunidad de Bath ordenados por nombre del curso, tutor, resumen, código y tasas"> <TR> <TH colspan="5" scope="colgroup"> Cursos de la Comunidad -- Bath Otoño de 1997 </TH> </TR> <TR> <TH scope="col" abbr="Nombre">Nombre del Curso</TH> <TH scope="col" abbr="Tutor">Tutor del Curso</TH> <TH scope="col">Resumen</TH> <TH scope="col">Código</TH> <TH scope="col">Tasas</TH> </TR> <TR> <TD scope="row">Tras la Guerra Civil</TD> <TD>Dr. John Wroughton</TD> <TD> El curso examinará los años turbulentos que siguieron a 1646 en Inglattera. <EM> Reuniones cada 6 semanas a partir del lunes 13 de octubre.</EM> </TD> <TD>H27</TD> <TD>£32</TD> </TR> <TR> <TD scope="row">Una introducción a la Inglaterra anglosajona</TD> <TD>Mark Cottle</TD> <TD> Este curso de un día presenta una reconstrucción de los anglosajones y de su sociedad en el período medieval temprano. <EM>Sábado 18 de Octubre.</EM> </TD> <TD>H28</TD> <TD>£18</TD> </TR> <TR> <TD scope="row">La gloriosa Grecia</TD> <TD>Valerie Lorenz</TD> <TD> Lugar de nacimiento de la democracia y la filosofía, patria del teatro, hogar de la discusión. Los romanos pueden haberlo hecho, pero los griegos lo hicieron primero. <EM>Clases matutinas del sábado 25 de Octubre de 1997</EM> </TD> <TD>H30</TD> <TD>£18</TD> </TR></TABLE>
Un agente de usuario gráfico podría representar esto así:

Obsérvese que se usa el atributo
Los usuarios que navegan por una tabla con un agente de usuario basadoen voz pueden querer oír una explicación de los contenidos de una celda ademásde los propios contenidos. Un modo en que el agente de usuario podría proporcionaruna explicación es pronunciando la información de encabezado asociada antes depronunciar los contenidos de la celda de datos (véase la sección sobre laasociación de información de encabezado con celdas de datos).
Los usuarios también pueden querer información sobre más de una celda, encuyo caso proporcionar información de encabezado a nivel de celda (conheaders,

Los usuarios podrían querer extraer información de la tabla por mediode preguntas:
Cada pregunta implica un cálculo por parte del agente de usuario que puedeimplicar a cero o más celdas. Para determinar, por ejemplo, el coste de lascomidas del 25 de agosto, el agente de usuario debe saber qué celdas de la tablase refieren a "Comidas" (todas ellas), y cuáles se refieren a "Fechas" (enparticular al 25 de agosto), y encontrar la intersección de los dos conjuntos.
Para permitir este tipo de preguntas, el modelo de tablas de HTML 4 permitea los autores colocar encabezados y datos de tabla en categorías. Por ejemplo,para la tabla de gastos de viaje, un autor podría agrupar las celdas de encabezado"San Jose" y "Seattle" en la categoría "Localidad", los encabezados "Comidas", "Hotel",y "Transporte" en la categoría "Gastos", y los cuatro días en la categoría "Fecha".Las tres preguntas anteriores podrían tener entonces los significados siguientes:
Los autores categorizan una celda de encabezado o de datos estableciendoel atributoaxisde la celda. Por ejemplo, en la tabla de gastos de viaje, la celda que contiene lainformación "San Jose" podría ser colocada en la categoría "Localidad" como sigue:
<TH axis="localidad">San Jose</TH>
Cualquier celda que contenga información relacionada con "San Jose"debería referirse a esta celda de encabezado o bien por medio del atributoheaders o bien por medio del atributoscope.Así, los gastos en comidas del 25/08/1997 deberían codificarse para quese refirieran al atributo
<TD headers="a6">37.74</TD>
Cada atributoheaders proporciona una lista de referencias a valoresid. Los autores pueden asícategorizar una celda dada de diferentes maneras (o dicho de otra manera, porcualquier número de "headers", de ahí su nombre).
Abajo hemos codificado la tabla de gastos de viaje con información sobre categorías:
<TABLE border="1" summary="Esta tabla resume los gastos producidos durante los viajes a San Jose y a Seattle en agosto"><CAPTION> Informe de Gastos de Viaje</CAPTION><TR> <TH></TH> <TH axis="gastos">Comidas</TH> <TH axis="gastos">Hotel</TH> <TH axis="gastos">Transporte</TH> <TD>subtotales</TD></TR><TR> <TH axis="localidad">San Jose</TH> <TH></TH> <TH></TH> <TH></TH> <TD></TD></TR><TR> <TD axis="fecha">25/08/1997</TD> <TD headers="a6 a7 a2">37.74</TD> <TD headers="a6 a7 a3">112.00</TD> <TD headers="a6 a7 a4">45.00</TD> <TD></TD></TR><TR> <TD axis="fecha">26/08/1997</TD> <TD headers="a6 a8 a2">27.28</TD> <TD headers="a6 a8 a3">112.00</TD> <TD headers="a6 a8 a4">45.00</TD> <TD></TD></TR><TR> <TD>subtotales</TD> <TD>65.02</TD> <TD>224.00</TD> <TD>90.00</TD> <TD>379.02</TD></TR><TR> <TH axis="localidad">Seattle</TH> <TH></TH> <TH></TH> <TH></TH> <TD></TD></TR><TR> <TD axis="fecha">27/08/1997</TD> <TD headers="a10 a11 a2">96.25</TD> <TD headers="a10 a11 a3">109.00</TD> <TD headers="a10 a11 a4">36.00</TD> <TD></TD></TR><TR> <TD axis="fecha">28/08/1997</TD> <TD headers="a10 a12 a2">35.00</TD> <TD headers="a10 a12 a3">109.00</TD> <TD headers="a10 a12 a4">36.00</TD> <TD></TD></TR><TR> <TD>subtotales</TD> <TD>131.25</TD> <TD>218.00</TD> <TD>72.00</TD> <TD>421.25</TD></TR><TR> <TH>Totales</TH> <TD>196.27</TD> <TD>442.00</TD> <TD>162.00</TD> <TD>800.27</TD></TR></TABLE>
Obsérvese que al codificar la tabla de esta manera, los agentesde usuario pueden evitar confundir al usuario con información no deseada.Por ejemplo, si un sintetizador de voz tuviera que pronunciar todaslas cifras de la columna "Comidas" de esta tabla en respuesta a la pregunta"¿Cuánto me gasté en comidas?", un usuario no podría distinguir losgastos diarios subtotales de los totales. Categorizando cuidadosamentelos datos de las celdas, los autores permiten a los agentes de usuariohacer distinciones semánticas importantes en la representación.
Por supuesto, no hay límites en cuanto a la forma en que los autores puedencategorizar la información de una tabla. Por ejemplo, en la tabla de gastosde viaje, podríamos añadir las categorías adicionales "subtotales" y "totales".
Esta especificación no exige a los agentes de usuario que tratenla información proporcionada por el atributoaxis, ni hace ninguna recomendaciónsobre cómo pueden presentar los agentes de usuario la información deaxisa los usuarios, ni sobre cómo pueden preguntar los usuarios al agente de usuariosobre esta información.
Sin embargo, los agentes de usuario, en particular los sintetizadoresde voz, podrían extraer la información que las distintas celdasresultado de una pregunta tienen en común. Por ejemplo, si el usuariopregunta "¿Cuánto me gasté en comidas en San Jose?", el agente de usuario podríadeterminar primero las celdas en cuestión (25/08/1997: 37.74, 26/08/1997: 27.28),y después representar esta información. Un agente de usuario que pronuncieesta información podría leerla así:
Localidad: San Jose. Fecha: 25/08/1997. Gastos, Comidas: 37.74 Localidad: San Jose. Fecha: 26/08/1997. Gastos, Comidas: 27.28
o más compacto:
San Jose, 25/08/1997, Comidas: 37.74 San Jose, 26/08/1997, Comidas: 27.28
Se obtendría una representación aún más económica sacando la informacióncomún y reordenándola:
San Jose, Comidas, 25/08/1997: 37.74 26/08/1997: 27.28
Los agentes de usuario que soporten este tipo de representación deberíanpermitir a los usuarios personalizar la representación (p.ej., con hojas de estilo).
En ausencia de información de encabezado de los atributosscope oheaders, los agentes de usuario pueden construir información deencabezado de acuerdo con el siguiente algoritmo. El fin del algoritmo esencontrar una lista ordenada de encabezados. (En la descripción del algoritmoque sigue, se supone que ladireccionalidadde la tabla es de izquierda a derecha.)
Esta muestra ilustra el agrupamiento de filas y columnas. Este ejemploestá adaptado de "Developing International Software", por Nadine Kano.
En "arte ascii", la siguiente tabla:
<TABLE border="2" frame="hsides" rules="groups" summary="Páginas de códigos soportadas por las diferentes versiones de MS Windows."><CAPTION>PAGINAS DE CODIGOS SOPORTADAS POR MICROSOFT WINDOWS</CAPTION><COLGROUP align="center"><COLGROUP align="left"><COLGROUP align="center" span="2"><COLGROUP align="center" span="3"><THEAD valign="top"><TR><TH>ID<BR>Code-Page<TH>Nombre<TH>ACP<TH>OEMCP<TH>Windows<BR>NT 3.1<TH>Windows<BR>NT 3.51<TH>Windows<BR>95<TBODY><TR><TD>1200<TD>Unicode (BMP de ISO/IEC-10646)<TD><TD><TD>X<TD>X<TD>*<TR><TD>1250<TD>Windows 3.1 Europa del Este<TD>X<TD><TD>X<TD>X<TD>X<TR><TD>1251<TD>Windows 3.1 Cirílico<TD>X<TD><TD>X<TD>X<TD>X<TR><TD>1252<TD>Windows 3.1 US (ANSI)<TD>X<TD><TD>X<TD>X<TD>X<TR><TD>1253<TD>Windows 3.1 Griego<TD>X<TD><TD>X<TD>X<TD>X<TR><TD>1254<TD>Windows 3.1 Turco<TD>X<TD><TD>X<TD>X<TD>X<TR><TD>1255<TD>Hebreo<TD>X<TD><TD><TD><TD>X<TR><TD>1256<TD>Árabe<TD>X<TD><TD><TD><TD>X<TR><TD>1257<TD>Bálticp<TD>X<TD><TD><TD><TD>X<TR><TD>1361<TD>Coreano (Johab)<TD>X<TD><TD><TD>**<TD>X<TBODY><TR><TD>437<TD>MS-DOS Estados Unidos<TD><TD>X<TD>X<TD>X<TD>X<TR><TD>708<TD>Árabe (ASMO 708)<TD><TD>X<TD><TD><TD>X<TR><TD>709<TD>Árabe (ASMO 449+, BCON V4)<TD><TD>X<TD><TD><TD>X<TR><TD>710<TD>Árabe (Árabe Transparente)<TD><TD>X<TD><TD><TD>X<TR><TD>720<TD>Árabe (ASMO Transparente)<TD><TD>X<TD><TD><TD>X</TABLE>
se representaría de forma parecida a ésta:
PAGINAS DE CODIGOS SOPORTADAS POR MICROSOFT WINDOWS=============================================================================== ID | Nombre | ACP OEMCP | Windows Windows WindowsCode-Page | | | NT 3.1 NT 3.51 95------------------------------------------------------------------------------- 1200 | Unicode (BMP de ISO 10646) | | X X * 1250 | Windows 3.1 Europa del Este | X | X X X 1251 | Windows 3.1 Cirílico | X | X X X 1252 | Windows 3.1 US (ANSI) | X | X X X 1253 | Windows 3.1 Griego | X | X X X 1254 | Windows 3.1 Turco | X | X X X 1255 | Hebreo | X | X 1256 | Árabe | X | X 1257 | Báltico | X | X 1361 | Coreano (Johab) | X | ** X------------------------------------------------------------------------------- 437 | MS-DOS Estados Unidos | X | X X X 708 | Árabe (ASMO 708) | X | X 709 | Árabe (ASMO 449+, BCON V4) | X | X 710 | Árabe (Árabe Transparente) | X | X 720 | Árabe (ASMO Transparente) | X | X===============================================================================
Un agente de usuario gráfico podría representarlo así:

Este ejemplo ilustra cómo puede usarseCOLGROUP para agrupar columnas y paraestablecer la alineación por defecto de las columnas. Análogamente se utilizaTBODY paraagrupar filas. Los atributos