🎮 TUTORIAL: Jerarquía y Centrado en CSS
🎮 TUTORIAL: Jerarquía y Centrado en CSS
"El Juego de las Cajas Mágicas"
📦 PARTE 1: ENTENDIENDO LA JERARQUÍA (Padre, Hijo, Nieto)
Imagina que las etiquetas HTML son como familias:
La Regla de Oro:
Un elemento SOLO puede controlar a sus HIJOS DIRECTOS, NO a sus nietos ni a sí mismo.
Visualicémoslo con una familia:
<abuelo> ← NIVEL 1
└── <padre> ← NIVEL 2 (HIJO del abuelo)
└── <hijo> ← NIVEL 3 (HIJO del padre, NIETO del abuelo)
└── <nieto> ← NIVEL 4 (HIJO del hijo, NIETO del padre, BIZNIETO del abuelo)En código real sería:
<body> ← ABUELO
└── <div class="casa"> ← PADRE
└── <div class="cuarto"> ← HIJO
└── <p>Texto</p> ← NIETO🧩 PARTE 2: EL CARD Y SU JERARQUÍA
Ahora apliquemos esto a tu card:
<body> ← BISABUELO
└── <div class="container"> ← ABUELO
└── <div class="card"> ← PADRE
├── <div class="card-header">texto</div> ← HIJO 1
├── <div class="card-body">texto</div> ← HIJO 2
└── <div class="card-footer">texto</div> ← HIJO 3🎨 Dibujemos la familia:
🌍 BODY (Bisabuelo)
│
│
📦 CONTAINER (Abuelo)
│
│
🏠 CARD (Padre)
┌──────┼──────┐
│ │ │
📌Header 📌Body 📌Footer
(Hijo 1) (Hijo 2) (Hijo 3)
│ │ │
Texto Texto Texto
(Nieto) (Nieto) (Nieto)🎯 PARTE 3: ¿QUIÉN CENTRA A QUIÉN?
Aquí viene lo más importante. Cada caja solo puede centrar a sus hijos directos:
Regla del Centrado:
El PADRE centra a sus HIJOS. Los HIJOS NO pueden centrarse a sí mismos.
/* ✅ CORRECTO: El PADRE centra a sus HIJOS */
.padre {
display: flex;
justify-content: center; /* Centra a los HIJOS horizontalmente */
align-items: center; /* Centra a los HIJOS verticalmente */
}
/* ❌ INCORRECTO: Un HIJO intenta centrarse a sí mismo */
.hijo {
display: flex;
justify-content: center; /* Esto centra a SUS hijos, NO a sí mismo */
align-items: center; /* Esto centra a SUS hijos, NO a sí mismo */
}🏗️ PARTE 4: EJEMPLO PRÁCTICO PASO A PASO
Vamos a construir nuestro card desde cero entendiendo quién centra a quién:
Paso 1: El BODY (Bisabuelo)
El body es el contenedor de toda la página.
body {
min-height: 100vh; /* Ocupa toda la pantalla */
margin: 0; /* Quita márgenes molestos */
}Paso 2: El CONTAINER (Abuelo)
Queremos que el card esté centrado en la pantalla.
¿Quién es el padre del card? ¡El container!
.container {
display: flex; /* El ABUELO activa flex */
justify-content: center; /* Centra a su HIJO (el card) horizontalmente */
align-items: center; /* Centra a su HIJO (el card) verticalmente */
min-height: 100vh; /* Ocupa toda la pantalla */
}Paso 3: El CARD (Padre)
El card contiene 3 hijos (header, body, footer).
Si queremos que esos hijos se apilen en columna:
.card {
display: flex; /* El PADRE activa flex */
flex-direction: column; /* Apila a sus HIJOS en columna */
width: 300px; /* Ancho fijo */
}Paso 4: Los HIJOS (Header, Body, Footer)
Cada hijo contiene texto (sus nietos).
Si queremos centrar el texto DENTRO de cada hijo:
.card-header, .card-body, .card-footer {
display: flex; /* Cada HIJO activa flex */
justify-content: center; /* Centra a sus NIETOS (el texto) horizontalmente */
align-items: center; /* Centra a sus NIETOS (el texto) verticalmente */
}📊 PARTE 5: TABLA DE RESPONSABILIDADES
| Elemento | Su PADRE es... | Sus HIJOS son... | Puede centrar a... |
|---|---|---|---|
| BODY | (no tiene) | .container | .container |
| CONTAINER | body | .card | .card |
| CARD | .container | .header, .body, .footer | .header, .body, .footer |
| HEADER | .card | El texto "1" | El texto "1" |
| BODY | .card | El texto "2" | El texto "2" |
| FOOTER | .card | El texto "3" | El texto "3" |
🎮 PARTE 6: EL TRUCO DEL "BRAZO" (Para recordar)
Imagina que cada elemento tiene brazos que solo alcanzan a sus hijos:
🌍 BODY (brazos largos)
└──🦾──> 📦 CONTAINER (centrado por body)
└──🦾──> 🏠 CARD (centrado por container)
├──🦾──> 📌 HEADER (centrado por card)
├──🦾──> 📌 BODY
└──🦾──> 📌 FOOTERLos brazos NO pueden atravesar generaciones:
El body NO puede centrar directamente al card (necesita al container)
El container NO puede centrar al header (necesita al card)
El card NO puede centrar el texto (necesita al header)
✅ PARTE 7: CÓDIGO COMPLETO COMENTADO
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jerarquía de Centrado</title>
<style>
/* ===== NIVEL 1: BODY (Bisabuelo) ===== */
body {
min-height: 100vh; /* Ocupa toda la pantalla */
margin: 0; /* Quita márgenes */
background: #f0f0f0; /* Solo para verlo */ /* BORDE AZUL para el body */
border: 3px solid blue !important;
}
/* ===== NIVEL 2: CONTAINER (Abuelo) ===== */
.container {
display: flex; /* ACTIVA FLEX: puede controlar a sus HIJOS */
justify-content: center; /* CENTRA a su HIJO (card) horizontalmente */
align-items: center; /* CENTRA a su HIJO (card) verticalmente */
min-height: 100vh; /* Ocupa toda la pantalla */ /* BORDE VERDE para el container */
border: 3px solid green !important;
background-color: rgba(0, 255, 0, 0.05); /* Fondo verde muy suave */
}
/* ===== NIVEL 3: CARD (Padre) ===== */
.card {
display: flex; /* ACTIVA FLEX: puede controlar a sus HIJOS */
flex-direction: column; /* Sus HIJOS (header,body,footer) se apilan */
width: 300px; /* Ancho fijo */
background: white; /* Fondo blanco */
border-radius: 8px; /* Esquinas redondeadas */
box-shadow: 0 2px 4px rgba(0,0,0,0.1); /* Sombra suave */ /* BORDE NARANJA para el card */
border: 3px solid orange !important;
border-radius: 8px; /* Esquinas redondeadas */
box-shadow: 0 2px 4px rgba(0,0,0,0.1); /* Sombra suave */
}
/* ===== NIVEL 4: HIJOS DEL CARD (Header, Body, Footer) ===== */
.card-header,
.card-body,
.card-footer {
display: flex; /* ACTIVA FLEX: pueden controlar a SUS HIJOS */
justify-content: center; /* CENTRA a sus HIJOS (el texto) horizontal */
align-items: center; /* CENTRA a sus HIJOS (el texto) vertical */ /* BORDE MORADO para los hijos */
border: 3px solid purple !important;
}
/* Estilos específicos de cada hijo */
.card-header {
height: 40px;
background: #f8f9fa;
border-radius: 8px 8px 0 0;
}
.card-body {
min-height: 150px;
padding: 15px;
}
.card-footer {
height: 40px;
background: #f8f9fa;
border-radius: 0 0 8px 8px;
}
/* ===== NIVEL 5: NIETOS (el texto) ===== */
/* Los nietos NO necesitan CSS porque ya están centrados por sus padres */
</style>
</head>
<body>
<!-- NIVEL 1: BODY -->
<!-- NIVEL 2: CONTAINER -->
<div class="container">
<!-- NIVEL 3: CARD -->
<div class="card">
<!-- NIVEL 4: HEADER (HIJO del card) -->
<div class="card-header">
<!-- NIVEL 5: TEXTO (NIETO del card, HIJO del header) -->
<p>1</p>
</div>
<!-- NIVEL 4: BODY (HIJO del card) -->
<div class="card-body">
<!-- NIVEL 5: TEXTO (NIETO del card, HIJO del body) -->
<p>2</p>
</div>
<!-- NIVEL 4: FOOTER (HIJO del card) -->
<div class="card-footer">
<!-- NIVEL 5: TEXTO (NIETO del card, HIJO del footer) -->
<p>3</p>
</div>
</div>
</div>
</body>
</html>🧠 PARTE 8: TRUCO PARA RECORDAR (La Regla del "Vecino")
"Solo puedes tomar de la mano a quien está a tu lado, no puedes tomar la mano de tu nieto saltándote a tu hijo."
El body toma de la mano al container ✅
El container toma de la mano al card ✅
El card toma de la mano al header, body, footer ✅
El header toma de la mano al texto ✅
🎯 EJERCICIO PARA PRACTICAR
Intenta responder:
¿Quién centra al card? → El container
¿Quién centra al texto del header? → El header
¿Puede el body centrar directamente al texto? → NO (no es su hijo directo)
📝 RESUMEN FINAL
| Si quieres centrar... | El flex debe estar en... | Porque es su... |
|---|---|---|
| El container | body | Padre |
| El card | container | Padre |
| El header, body, footer | card | Padre |
| El texto | header, body, footer | Padre |
¡Y eso es todo! Ahora ya sabes cómo funciona la jerarquía y el centrado. Practica cambiando nombres y añadiendo más cajas para dominarlo completamente.
Comentarios
Publicar un comentario