El problema: Flexbox en el contenedor
El problema: Flexbox en el contenedor
El error está en que el .container tiene display: flex y eso hace que los elementos hijos (el <h2> y la <table>) se pongan uno al lado del otro.
Tu código actual:
.container { display: flex; /* ← Esto pone los hijos en fila */ justify-content: center; align-items: center; padding: 15px; }
Solución: Cambiar a display: block (el valor por defecto)
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Tabla con título</title> <style> body { margin: 0; padding: 0; background: #ddd; font-family: Arial, sans-serif; } /* Menú */ ul { list-style-type: none; margin: 0; padding: 0; background-color: #333333; display: flex; } ul li a { display: block; color: white; text-align: center; padding: 14px 16px; text-decoration: none; } ul li a:hover { background-color: #111111; } /* Contenedor - CORREGIDO: ya NO es flex */ .container { padding: 20px; /* Solo espacio alrededor */ } /* Estilos para la tabla */ table { width: 100%; border-collapse: collapse; margin-top: 15px; } th, td { padding: 10px; text-align: left; } th { background-color: #4CAF50; color: white; } h2 { color: #333; margin: 0; } </style> </head> <body> <nav> <ul> <li><a href="#home">Home</a></li> <li><a href="#news">News</a></li> <li><a href="#contact">Contact</a></li> <li><a href="#about">About</a></li> </ul> </nav> <!-- Contenedor AHORA ES BLOCK (por defecto) --> <div class="container"> <h2>TH elements define table headers</h2> <table border="1"> <tr> <th>Person 1</th> <th>Person 2</th> <th>Person 3</th> </tr> <tr> <td>Emil</td> <td>Tobias</td> <td>Linus</td> </tr> <tr> <td>16</td> <td>14</td> <td>10</td> </tr> </table> </div> </body> </html>
¿Qué cambié?
1. Eliminé el display: flex del contenedor
/* ANTES (mal) */ .container { display: flex; /* ← Esto ponía todo en fila */ justify-content: center; align-items: center; padding: 15px; } /* DESPUÉS (bien) */ .container { padding: 20px; /* Sin flex, los elementos se apilan */ }
2. Comportamiento normal de HTML
Sin display: flex, los elementos se comportan por defecto como block:
<h2>→ bloque (ocupa todo el ancho)<table>→ bloque (ocupa todo el ancho)
Resultado:
┌─────────────────────┐ │ TH elements define │ ← Título (arriba) │ table headers │ ├─────────────────────┤ │ Person1 Person2... │ ← Tabla (debajo) │ Emil Tobias... │ │ 16 14... │ └─────────────────────┘
Si quisieras usar Grid en el contenedor:
.container { display: grid; /* En lugar de flex */ grid-template-columns: 1fr; /* Una columna */ gap: 20px; padding: 20px; }
¡Pero con display: block (por defecto) es más simple! 😊
Comentarios
Publicar un comentario