馃幃 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:

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

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

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

text
            馃實 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.

css
/* ✅ 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.

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

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

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

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

ElementoSu PADRE es...Sus HIJOS son...Puede centrar a...
BODY(no tiene).container.container
CONTAINERbody.card.card
CARD.container.header.body.footer.header.body.footer
HEADER.cardEl texto "1"El texto "1"
BODY.cardEl texto "2"El texto "2"
FOOTER.cardEl 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:

text
馃實 BODY (brazos largos)
   └──馃──> 馃摝 CONTAINER (centrado por body)
           └──馃──> 馃彔 CARD (centrado por container)
                   ├──馃──> 馃搶 HEADER (centrado por card)
                   ├──馃──> 馃搶 BODY
                   └──馃──> 馃搶 FOOTER

Los 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

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

  1. ¿Qui茅n centra al card? → El container

  2. ¿Qui茅n centra al texto del header? → El header

  3. ¿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 containerbodyPadre
El cardcontainerPadre
El header, body, footercardPadre
El textoheader, body, footerPadre

¡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

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