Acerca de este problema de CSS
El atributo valign era parte de especificaciones HTML anteriores (HTML 4.01 y XHTML 1.0) y aceptaba valores como top, middle, bottom y baseline para controlar cómo se posicionaba verticalmente el contenido dentro de una celda de tabla. En HTML5, este atributo está obsoleto porque la especificación separa la estructura del contenido de la presentación. Todo el estilo visual debe manejarse a través de CSS.
Esto importa por varias razones. Primero, usar atributos obsoletos genera errores de validación W3C, que pueden indicar problemas más amplios de calidad del código. Segundo, los navegadores eventualmente pueden eliminar el soporte para atributos de presentación heredados, rompiendo potencialmente tu diseño. Tercero, CSS proporciona mucha más flexibilidad y mantenibilidad: puedes dar estilo a tablas enteras o grupos de celdas con una sola regla en lugar de repetir valign en cada <td>.
El atributo valign también era válido en los elementos <th>, <tr>, <thead>, <tbody> y <tfoot>, y está obsoleto en todos ellos. La solución es la misma: usa la propiedad CSS vertical-align.
Para solucionar este problema, elimina el atributo valign de tus elementos <td> y aplica la propiedad CSS vertical-align equivalente. La propiedad CSS acepta los mismos valores familiares: top, middle, bottom y baseline.
Ejemplos
❌ Incorrecto: usando el atributo obsoleto valign
<table>
<tr>
<td valign="top">Contenido alineado arriba</td>
<td valign="middle">Contenido alineado al centro</td>
<td valign="bottom">Contenido alineado abajo</td>
</tr>
</table>
✅ Corregido: usando CSS en línea
<table>
<tr>
<td style="vertical-align: top;">Contenido alineado arriba</td>
<td style="vertical-align: middle;">Contenido alineado al centro</td>
<td style="vertical-align: bottom;">Contenido alineado abajo</td>
</tr>
</table>
✅ Corregido: usando un enfoque basado en clases (recomendado)
Para mejor mantenibilidad, define clases CSS reutilizables en lugar de repetir estilos en línea:
<style>
.valign-top { vertical-align: top; }
.valign-middle { vertical-align: middle; }
.valign-bottom { vertical-align: bottom; }
</style>
<table>
<tr>
<td class="valign-top">Contenido alineado arriba</td>
<td class="valign-middle">Contenido alineado al centro</td>
<td class="valign-bottom">Contenido alineado abajo</td>
</tr>
</table>
✅ Corregido: aplicando un valor por defecto a todas las celdas en una tabla
Si cada celda en una tabla debe compartir la misma alineación vertical, apúntalas con una sola regla CSS:
<style>
.data-table td,
.data-table th {
vertical-align: top;
}
</style>
<table class="data-table">
<tr>
<th>Nombre</th>
<th>Descripción</th>
</tr>
<tr>
<td>Elemento A</td>
<td>Una descripción más larga que puede<br>abarcar múltiples líneas</td>
</tr>
</table>
Este enfoque es el más mantenible: estableces la alineación una vez y se aplica consistentemente a cada celda, sin necesidad de modificar elementos individuales <td> o <th>.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.