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:

css
.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)

html
<!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

css
/* 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:

text
┌─────────────────────┐
│ TH elements define  │ ← Título (arriba)
│ table headers       │
├─────────────────────┤
│ Person1 Person2...   │ ← Tabla (debajo)
│ Emil   Tobias...    │
│ 16     14...        │
└─────────────────────┘

Si quisieras usar Grid en el contenedor:

css
.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

Entradas más populares de este blog

Tutorial de CSS: De Cero a Estilizar tu Primera Página Web

layouts

Proyecto Práctico: Tarjeta de Perfil