¿Por qué en un caso quité flex y en otro lo puse?
- Obtener vínculo
- X
- Correo electrónico
- Otras apps
¿Por qué en un caso quité flex y en otro lo puse?
Caso 1 (título + tabla sin card) - QUITÉ flex:
css
.container { /* display: flex; ← LO QUITÉ */ padding: 20px; }
Motivo: Los elementos (<h2> y <table>) debían ir UNO DEBAJO DEL OTRO (vertical).
Sin flex, por defecto son block y se apilan verticalmente.
Caso 2 (card centrada) - PUSE flex:
css
.contenedor-card { display: flex; /* ← LO PUSE */ justify-content: center; /* Centra horizontalmente */ padding: 30px 20px; }
Motivo: Queremos centrar la CARD (un solo elemento) horizontalmente.
Flex es perfecto para centrar un elemento hijo.
DOCUMENTACIÓN COMPLETA DEL CÓDIGO
html
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Card con Tabla - Explicada</title> <style> /* ========== ESTILOS GLOBALES ========== */ body { margin: 0; /* Quita márgenes por defecto */ padding: 0; /* Quita padding por defecto */ background: #ddd; /* Fondo gris claro */ font-family: Arial, sans-serif; /* Fuente para todo */ } /* ========== MENÚ DE NAVEGACIÓN ========== */ ul { list-style-type: none; /* Quita los puntos de la lista */ margin: 0; /* Quita margen por defecto */ padding: 0; /* Quita padding por defecto */ background-color: #333333; /* Fondo gris oscuro */ /* FLEX: hace que los <li> estén en HORIZONTAL */ display: flex; } /* Estilos para los enlaces del menú */ ul li a { display: block; /* Hace todo el área clickeable */ color: white; /* Texto blanco */ text-align: center; /* Texto centrado */ padding: 14px 16px; /* Espaciado interno */ text-decoration: none; /* Quita subrayado */ } /* Efecto al pasar el mouse */ ul li a:hover { background-color: #111111; /* Fondo más oscuro */ } /* ========== CONTENEDOR DE LA CARD ========== */ .contenedor-card { /* FLEX: para CENTRAR la card horizontalmente */ display: flex; justify-content: center; /* Centra horizontalmente */ /* NOTA: Al tener UN SOLO elemento (la card), flex lo centra perfectamente */ padding: 30px 20px; /* Espacio alrededor de la card */ } /* ========== LA CARD ========== */ .card { /* === ESTILOS VISUALES DE LA CARD === */ background: white; /* Fondo blanco */ width: 450px; /* Ancho fijo */ padding: 25px; /* Espacio interno */ border-radius: 10px; /* Bordes redondeados */ box-shadow: 0 4px 12px rgba(0,0,0,0.15); /* Sombra suave */ /* === GRID: ORGANIZACIÓN INTERNA === */ display: grid; /* Activa Grid */ grid-template-columns: 1fr; /* UNA sola columna */ gap: 20px; /* Espacio entre elementos */ /* EXPLICACIÓN GRID: - 1fr = 1 fracción (ocupa todo el ancho) - Los hijos directos (h2 y table) se apilan verticalmente - gap crea 20px de separación entre ellos */ } /* ========== TÍTULO DENTRO DE LA CARD ========== */ h2 { color: #333; /* Texto gris oscuro */ margin: 0; /* Quita margen por defecto */ text-align: center; /* Centra el texto */ font-size: 22px; /* Tamaño de fuente */ border-bottom: 2px solid #4CAF50; /* Línea verde abajo */ padding-bottom: 10px; /* Espacio debajo del texto */ } /* ========== TABLA DENTRO DE LA CARD ========== */ table { width: 100%; /* Ocupa todo el ancho de la card */ border-collapse: collapse; /* Junta los bordes de celdas */ border: 1px solid #ddd; /* Borde gris claro */ } /* Estilos para celdas de encabezado */ th { background-color: #4CAF50; /* Fondo verde */ color: white; /* Texto blanco */ padding: 12px; /* Espaciado interno */ text-align: left; /* Texto alineado izquierda */ } /* Estilos para celdas normales */ td { padding: 10px; /* Espaciado interno */ border: 1px solid #ddd; /* Borde gris claro */ } /* Filas pares (2da, 4ta, etc.) con fondo gris */ tr:nth-child(even) { background-color: #f2f2f2; /* Fondo gris muy claro */ } </style> </head> <body> <!-- MENÚ --> <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: usa FLEX para centrar la card --> <div class="contenedor-card"> <!-- CARD: usa GRID para organizar título y tabla --> <div class="card"> <h2>TH elements define table headers</h2> <table> <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> <!-- Fin card --> </div> <!-- Fin contenedor-card --> </body> </html>
RESUMEN: ¿Flex o no Flex?
| Situación | ¿Usar Flex? | ¿Por qué? |
|---|---|---|
| Varios elementos que queremos VERTICALMENTE | ❌ NO | Usar block (por defecto) |
| Centrar UN elemento | ✅ SÍ | Flex centra fácilmente |
| Elementos en HORIZONTAL | ✅ SÍ | Flex dirección row |
| Organizar contenido DENTRO de la card | ❌ NO | Usamos Grid |
Visual de las cajas:
text
┌─────────────────────────────────────┐ │ [Home][News][Contact][About] │ ← MENÚ (flex) ├─────────────────────────────────────┤ │ │ │ ┌───────────────────────────┐ │ ← CONTENEDOR-CARD (flex) │ │ │ │ (centra la card) │ │ TÍTULO │ │ │ │ │ │ │ │ ┌─────────────────────┐ │ │ ← CARD (grid) │ │ │ TABLA │ │ │ (organiza adentro) │ │ └─────────────────────┘ │ │ │ │ │ │ │ └───────────────────────────┘ │ │ │ └─────────────────────────────────────┘
¿Queda claro por qué usamos flex en el contenedor-card pero no dentro de la card?
- Obtener vínculo
- X
- Correo electrónico
- Otras apps
Comentarios
Publicar un comentario