Saltar al contenido
schedule 10 min HTML

Listas y tablas

Las listas y las tablas son de esas etiquetas que usas constantemente. Menús de navegación, listados de características, tablas de precios, rankings, especificaciones técnicas... Saber cuándo usar cada una y cómo estructurarlas bien es clave.

Listas desordenadas: <ul>

Se usan cuando el orden de los elementos no importa. El navegador muestra cada elemento con un bullet point:

menu.html
<h2>Ingredientes para ramen casero</h2>
<ul>
    <li>Fideos de ramen frescos (200g)</li>
    <li>Caldo dashi (800ml)</li>
    <li>Salsa de soja (3 cucharadas)</li>
    <li>Huevo marinado en soja</li>
    <li>Cebolleta picada</li>
    <li>Nori (alga seca)</li>
    <li>Chashu (cerdo braseado)</li>
</ul>

<ul> (unordered list) contiene los elementos <li> (list item). Los <li> solo pueden ir directamente dentro de <ul> o <ol>.

Listas ordenadas: <ol>

Se usan cuando el orden sí importa: pasos, rankings, instrucciones. El navegador numera los elementos automáticamente:

<h2>Top 5 lenguajes en GitHub (2026)</h2>
<ol>
    <li>Python</li>
    <li>JavaScript</li>
    <li>TypeScript</li>
    <li>Java</li>
    <li>C#</li>
</ol>

Atributos útiles de <ol>

<!-- Empezar desde un número específico -->
<ol start="5">
    <li>Rust</li>
    <li>Go</li>
    <li>PHP</li>
</ol>

<!-- Orden inverso -->
<ol reversed>
    <li>Bronce: equipo C</li>
    <li>Plata: equipo B</li>
    <li>Oro: equipo A</li>
</ol>

<!-- Usar letras o números romanos (con CSS) -->
<!-- El estilo de numeración se controla con CSS: list-style-type -->

Listas anidadas

Puedes meter una lista dentro de otra. Esto es habitual en menús de navegación con submenús o en índices de contenido:

roadmap.html
<h2>Roadmap del curso</h2>
<ol>
    <li>HTML
        <ul>
            <li>Estructura básica</li>
            <li>Etiquetas de texto</li>
            <li>Formularios</li>
        </ul>
    </li>
    <li>CSS
        <ul>
            <li>Selectores</li>
            <li>Flexbox y Grid</li>
            <li>Responsive design</li>
        </ul>
    </li>
    <li>JavaScript
        <ul>
            <li>Variables y funciones</li>
            <li>DOM y eventos</li>
            <li>Fetch y APIs</li>
        </ul>
    </li>
</ol>

La lista anidada va dentro del <li> que la contiene, no fuera. Este es un error común.

Listas de descripción: <dl>

Son menos conocidas, pero perfectas para pares término-definición: glosarios, especificaciones técnicas, FAQs:

<h2>Especificaciones del MacBook Pro M4</h2>
<dl>
    <dt>Procesador</dt>
    <dd>Apple M4 Pro, 14 núcleos (10 rendimiento + 4 eficiencia)</dd>

    <dt>Memoria RAM</dt>
    <dd>24 GB de memoria unificada</dd>

    <dt>Almacenamiento</dt>
    <dd>1 TB SSD</dd>

    <dt>Pantalla</dt>
    <dd>16,2 pulgadas Liquid Retina XDR, 3456 × 2234 píxeles</dd>

    <dt>Batería</dt>
    <dd>Hasta 24 horas de reproducción de vídeo</dd>
</dl>
  • <dl>: description list, el contenedor.
  • <dt>: description term, el término.
  • <dd>: description details, la definición.

Tablas: datos tabulares

Las tablas son para datos que se organizan en filas y columnas. Precios, horarios, comparativas, estadísticas. No uses tablas para maquetar layouts — eso murió con HTML 4.

precios.html
<table>
    <caption>Planes de suscripción — actualizado marzo 2026</caption>
    <thead>
        <tr>
            <th>Plan</th>
            <th>Precio/mes</th>
            <th>Proyectos</th>
            <th>Almacenamiento</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Hobby</td>
            <td>Gratis</td>
            <td>3</td>
            <td>500 MB</td>
        </tr>
        <tr>
            <td>Pro</td>
            <td>12 €</td>
            <td>Ilimitados</td>
            <td>50 GB</td>
        </tr>
        <tr>
            <td>Enterprise</td>
            <td>49 €</td>
            <td>Ilimitados</td>
            <td>500 GB</td>
        </tr>
    </tbody>
</table>

Anatomía de una tabla

Etiqueta Función
<table> Contenedor de toda la tabla
<caption> Título/descripción de la tabla (accesibilidad + SEO)
<thead> Cabecera de la tabla (columnas)
<tbody> Cuerpo de la tabla (datos)
<tfoot> Pie de tabla (totales, resúmenes)
<tr> Table row — una fila
<th> Table header — celda de cabecera (negrita y centrada)
<td> Table data — celda de datos

Siempre usa <thead> y <tbody>. Son opcionales técnicamente, pero hacen la tabla accesible y permiten que los lectores de pantalla distingan encabezados de datos.

Tabla con pie y celdas combinadas

ventas.html
<table>
    <caption>Ventas trimestrales por región</caption>
    <thead>
        <tr>
            <th>Región</th>
            <th>Q1</th>
            <th>Q2</th>
            <th>Q3</th>
            <th>Q4</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <th>Europa</th>
            <td>45.200 €</td>
            <td>52.800 €</td>
            <td>48.100 €</td>
            <td>61.300 €</td>
        </tr>
        <tr>
            <th>América</th>
            <td>38.900 €</td>
            <td>41.200 €</td>
            <td>44.500 €</td>
            <td>55.800 €</td>
        </tr>
    </tbody>
    <tfoot>
        <tr>
            <th>Total</th>
            <td>84.100 €</td>
            <td>94.000 €</td>
            <td>92.600 €</td>
            <td>117.100 €</td>
        </tr>
    </tfoot>
</table>

Para combinar celdas, usa colspan (combinar columnas) y rowspan (combinar filas):

<tr>
    <td colspan="4">Sin datos disponibles para este periodo</td>
</tr>

Cuándo usar lista vs tabla

Usa lista Usa tabla
Menús de navegación Comparativas de productos
Ingredientes de una receta Precios con características
Pasos de un tutorial Horarios
Tags o categorías Estadísticas con varias dimensiones

La regla es simple: si los datos tienen una sola dimensión (una lista de cosas), usa lista. Si tienen dos o más dimensiones (filas y columnas), usa tabla.

code

Crea la página de precios de una SaaS

Medio schedule 15 min

Crea un archivo precios.html con la página de precios de una app SaaS inventada (un gestor de tareas, un editor de fotos online, una herramienta de email marketing...). Debe incluir:

  • Una tabla comparativa con al menos 3 planes (Free, Pro, Enterprise)
  • Al menos 5 características comparadas entre planes
  • <caption>, <thead> y <tbody>
  • Una lista <ul> con las características destacadas del plan más popular
  • Una lista <dl> con preguntas frecuentes (FAQ) sobre la suscripción
lightbulb Pistas

Usa <th> tanto en la fila de cabecera como en la primera columna de cada fila (el nombre de la característica). Eso mejora la accesibilidad. Para las FAQ, cada <dt> es la pregunta y cada <dd> es la respuesta.

Newsletter

Recibe nuevos cursos, actualizaciones, artículos del blog y promociones en tu correo.