Etiqueta caption en HTML: título de una tabla
La etiqueta <caption> proporciona el título o una descripción de una tabla HTML. Sirve para explicar qué datos contiene antes de leer las celdas: por ejemplo, si unos números representan horas de formación o personas inscritas. Úsala dentro de <table> cuando la tabla necesite un contexto propio, especialmente si hay varias en la página.
Ejemplo mínimo: una tabla con título
<table>
<caption>Duración de los cursos, en horas</caption>
<tr>
<th scope="col">Curso</th>
<th scope="col">Horas</th>
</tr>
<tr>
<td>HTML</td>
<td>12</td>
</tr>
</table>
Coloca este fragmento en el cuerpo de un documento HTML. Se verá el título sobre una tabla de dos columnas: «Curso» y «Horas», con una fila que indica HTML y 12. El navegador no dibuja necesariamente bordes si no añades CSS.
<caption> queda asociado a la tabla; no es una celda ni una fila. Si cambias su texto, cambia el contexto que recibe el lector, pero los datos permanecen iguales. Si lo retiras, desaparece ese título y su asociación con la tabla. Los encabezados «Curso» y «Horas» siguen existiendo, aunque ya no ofrecen la misma presentación general.
Sintaxis y lugar dentro de table
Escribe <caption>Texto del título</caption> como primer elemento hijo de <table>, antes de <colgroup>, <thead>, <tbody> o las filas. Una tabla admite como máximo un <caption>. No lo coloques dentro de <tr> ni fuera de la tabla, aunque visualmente quieras situarlo debajo.
Su contenido puede incluir texto y otros elementos de flujo, como <strong> o un párrafo, pero no puede contener otra <table>, ni siquiera dentro de un contenedor intermedio. En una tabla sencilla suele bastar una frase breve. Estas restricciones proceden del modelo de contenido de <caption> en el estándar HTML.
Los ejemplos muestran siempre </caption> para que el límite del título quede claro. HTML permite omitir ese cierre si el elemento no va seguido inmediatamente de un espacio en blanco ASCII o un comentario; conservarlo evita depender de esa condición.
Un título que identifica los datos
«Tabla de datos» aporta poco. «Inscripciones a talleres de octubre de 2026, en personas» identifica el tema, el periodo y la unidad. Incluye la información que realmente ayude a interpretar tu tabla y evita repetir en el título cada encabezado o cada valor.
El título describe el conjunto; <th> identifica una columna o fila. Por eso <caption> no sustituye a scope ni a las asociaciones mediante headers que pueden necesitar tablas complejas. Tampoco sustituye una explicación extensa de una estructura difícil: puedes dar instrucciones adicionales en texto cercano.
La guía de tablas de W3C WAI explica cómo los títulos ayudan a encontrar una tabla y decidir si interesa leerla. Los lectores de pantalla pueden utilizarlos para identificarla; el anuncio concreto depende del navegador, la tecnología de asistencia y su configuración. Mantén visible el contexto que también necesita quien lee la página visualmente.
Ejemplo práctico: un título arriba y otro abajo
Guarda este documento completo como tablas-caption.html, con codificación UTF-8, y ábrelo en tu navegador. Contiene datos ficticios para practicar; no necesita archivos adicionales, servidor ni JavaScript.
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tablas de un centro de formación</title>
<style>
body {
max-width: 42rem;
margin: 2rem auto;
padding: 0 1rem;
font-family: sans-serif;
line-height: 1.5;
}
.datos {
width: 100%;
margin-block: 2rem;
border-collapse: collapse;
}
.datos caption {
caption-side: top;
padding-block: 0.75rem;
font-weight: bold;
text-align: left;
}
.datos th,
.datos td {
border: 1px solid #666;
padding: 0.5rem;
text-align: left;
}
.datos--pie caption {
caption-side: bottom;
}
</style>
</head>
<body>
<h1>Centro de formación</h1>
<table class="datos">
<caption>Inscripciones a talleres de octubre de 2026, en personas</caption>
<thead>
<tr>
<th scope="col">Taller</th>
<th scope="col">Inscripciones</th>
</tr>
</thead>
<tbody>
<tr><th scope="row">HTML</th><td>18</td></tr>
<tr><th scope="row">CSS</th><td>14</td></tr>
</tbody>
</table>
<table class="datos datos--pie">
<caption>Material disponible al 3 de octubre de 2026, en unidades</caption>
<thead>
<tr>
<th scope="col">Material</th>
<th scope="col">Unidades</th>
</tr>
</thead>
<tbody>
<tr><th scope="row">Portátiles</th><td>8</td></tr>
<tr><th scope="row">Proyectores</th><td>2</td></tr>
</tbody>
</table>
</body>
</html>
La primera tabla muestra su título arriba. En la segunda, .datos--pie caption aplica caption-side: bottom y lo muestra debajo de las filas. En ambas, <caption> sigue siendo el primer elemento hijo: CSS cambia su posición visual, no lo convierte en una fila ni modifica el orden del DOM.
Para comprobarlo, cambia bottom por top: el segundo título volverá arriba sin mover una sola etiqueta. Después desactiva los estilos; ambos títulos aparecerán arriba con la presentación predeterminada y los datos seguirán disponibles. Desactivar JavaScript no afecta al ejemplo.
Atributos y propiedades CSS
<caption> no tiene atributos específicos vigentes. Admite atributos globales, como id, class o lang; en el ejemplo, la clase de la tabla permite seleccionar su título desde CSS.
caption-side es una propiedad CSS, no un atributo HTML ni una propiedad específica de JavaScript. Su valor inicial es top; bottom sitúa el título abajo en el documento horizontal de este ejemplo. Para alinear el texto dentro del título, usa text-align. La especificación CSS sobre posición y alineación de títulos distingue ambas tareas.
El atributo antiguo align es obsoleto: si encuentras <caption align="bottom"> en código heredado, migra esa presentación a CSS. La referencia de MDN sobre <caption> lo documenta como información histórica.
Caption, figcaption y legend
Elige según el contenido al que pertenece el título:
<caption>titula una tabla<table>.<figcaption>titula o explica una figura<figure>, que puede contener una imagen, un gráfico u otro contenido autónomo.<legend>da título a un grupo de controles<fieldset>; no sirve para titular tablas.
Si una figura contiene únicamente una tabla y su <figcaption>, el estándar recomienda usar ese <figcaption> y omitir <caption>. Evita duplicar el mismo título en ambos elementos. Para una tabla independiente como las de esta guía, utiliza <caption>.
Errores y preguntas frecuentes
¿Caption puede ir fuera de table? No en HTML válido. Su padre debe ser <table> y debe ocupar la primera posición entre sus hijos que sean elementos. Un título separado mediante <h2> puede presentar una sección, pero no crea por sí solo la asociación de <caption> con la tabla.
¿Cómo pongo caption abajo? Aplica caption-side: bottom a su selector CSS y conserva su posición inicial en el HTML. Si no cambia, comprueba que el selector alcance ese título y que otra regla no sobrescriba la propiedad.
¿Puedo simularlo con una celda y colspan? Una celda que abarca todas las columnas sigue siendo una celda. Usa <caption> para el título y reserva colspan para datos o encabezados que realmente abarquen columnas.
No añadas varios títulos <caption> a una misma tabla ni insertes un <h2> directamente dentro de <table>. Si necesitas una aclaración breve, incorpórala al único título; si es extensa, usa texto cercano. Evita ocultar con display: none el único contexto: también puede desaparecer de la información accesible.
Compatibilidad y fuentes
Revisión del 4 de octubre de 2026: <caption> y los valores top y bottom de caption-side están disponibles en los navegadores actuales. Para este uso no hace falta un script ni una biblioteca. Consulta la compatibilidad de <caption> en MDN y la referencia de caption-side.
El HTML Living Standard fija el significado y las restricciones del elemento; W3C WAI desarrolla su utilidad para la lectura accesible. Para continuar con la estructura de los datos, revisa las funciones de <table> y <th>; el título aporta contexto y los encabezados identifican las celdas.