Establecer el ancho de las columnas en tablas HTML
Aprende a establecer anchos predecibles para columnas de tablas HTML con CSS, colgroup, table-layout, selectores y control del desbordamiento.
Por Neha ImranPublicado 2023-06-20Actualizado 2026-09-17
En esta página
Usa CSS para establecer el ancho de una tabla HTML y sus columnas. En una tabla mantenible, define los anchos con
y usa table-layout: fixed cuando la tabla deba respetar esas proporciones. El navegador aún puede ajustar una columna si el contenido no cabe, por lo que los ejemplos también muestran cómo tratar ese límite.
Establecer anchos de columna con CSS
El antiguo atributo width de
o
es HTML obsoleto. Los navegadores pueden interpretar el marcado heredado, pero el código nuevo debe colocar las reglas de presentación en CSS. Los porcentajes son relativos al ancho usado por la tabla, así que esta necesita un ancho disponible de su elemento padre.
Para una tabla pequeña y puntual basta una declaración en línea como <th style="width: 15%">ID</th>. En un componente reutilizable, prefiere una hoja de estilos o un <colgroup> para que la regla se aplique a toda la columna, incluidas sus celdas de datos:
Los tres porcentajes suman 100%, así que la tabla tiene una distribución inicial clara: Name es más ancha que ID y Age. table-layout: fixed hace que el tamaño dependa principalmente del ancho de la tabla, los anchos explícitos y la primera fila, no de la celda más larga de cada fila. overflow-wrap: anywhere permite ajustar un valor inusualmente largo sin ensanchar la tabla.
<colgroup> debe aparecer antes de los grupos de filas de la tabla. Un <col> representa una columna, no una celda visible, y no tiene contenido propio. Usa span en un <col> cuando varias columnas consecutivas compartan una regla. Este enfoque también mantiene el HTML semántico: usa <th> para encabezados y scope="col" para que la tecnología de asistencia los relacione con sus celdas.
Elegir entre clases y :nth-child()
Puedes establecer anchos en la primera fila con selectores como .people th:nth-child(1) { width: 15%; }, .people th:nth-child(2) { width: 70%; } y .people th:nth-child(3) { width: 15%; }. Así conservas las técnicas basadas en clases y :nth-child() sin añadir una clase a cada encabezado. Las clases son más claras cuando importa el significado de la columna; :nth-child() resulta práctico con un orden estable y sencillo.
No dependas de :nth-child() cuando las filas contengan colspan, cuando las filas de encabezado tengan otra estructura o cuando se puedan reordenar las columnas. En esos casos, <colgroup> o las clases con nombre hacen explícita la correspondencia. Si solo especificas algunos anchos, el navegador distribuye el espacio restante; no supongas que una columna sin especificar siempre recibirá un porcentaje exacto con el diseño automático.
Tratar el contenido que no cabe
El diseño fijo no hace que una columna estrecha sea lo bastante grande para cualquier valor. Una URL o identificador largo sin cortes puede desbordarse si no puede ajustarse. El siguiente límite conserva la regla de ancho y permite desplazamiento horizontal en la celda, sin cambiar el diseño de la página:
Para texto normal, ajustar líneas suele ser preferible al desplazamiento horizontal. Prueba la tabla con contenido realista y en ventanas estrechas. Los anchos son indicaciones interpretadas por el algoritmo de diseño de tablas, no una garantía de que cada celda conserve un tamaño exacto en píxeles.