Frontend

CSS Flexbox: La guía para quien tiene prisa

Aprende los pilares de CSS Flexbox en tiempo récord. Una guía enfocada en la sintaxis esencial y en los alineamientos que realmente usas en el día a día, sin rodeos y directo al código.

CSS Flexbox: La guía para quien tiene prisa

🎯 Conceptos Clave

  • Contenedor (Padre): Elemento que recibe display: flex;. Gestiona el diseño de sus hijos.

  • Ítem (Hijo): Elementos directamente dentro del contenedor flex. Son organizados por el contenedor.

  • Eje Principal: Dirección predeterminada de los ítems (fila por defecto, pero puede ser columna). Controlado por flex-direction.

  • Eje Cruzado: Perpendicular al eje principal. Controlado por align-items y align-content.

  • Flexibilidad: Capacidad de los ítems para crecer (flex-grow), encogerse (flex-shrink) o tener un tamaño base (flex-basis).

Um diagrama que ilustra um container flex com seus itens. O diagrama deve claramente rotular o 'Container (Pai)', os 'Itens (Filhos)', o 'Eixo Principal' (com setas indicando a direção, e notações para `row` e `column`), e o 'Eixo Cruzado' (também com setas). Poderia mostrar um exemplo simples de itens alinhados.

📝 Sintaxis Esencial

CSS
/* No Container (Pai) */.flex-container {  display: flex; /* Define como container flex */  /* Direção dos itens */  flex-direction: row; /* padrão: linha (horizontal) */  /* flex-direction: column; linha vertical */  /* Quebra de linha */  flex-wrap: wrap; /* permite quebrar linha */  /* flex-wrap: nowrap; não quebra (padrão) */  /* Atalho para flex-direction e flex-wrap */  flex-flow: row wrap;  /* Alinhamento no Eixo Principal */  justify-content: flex-start; /* início (padrão) */  /* justify-content: flex-end; fim */  /* justify-content: center; centro */  /* justify-content: space-between; espaço entre */  /* justify-content: space-around; espaço ao redor */  /* justify-content: space-evenly; espaço igualmente */  /* Alinhamento no Eixo Cruzado (single line) */  align-items: stretch; /* estica (padrão) */  /* align-items: flex-start; início */  /* align-items: flex-end; fim */  /* align-items: center; centro */  /* align-items: baseline; alinha pela linha de base */  /* Alinhamento no Eixo Cruzado (multiple lines) */  align-content: stretch; /* estica (padrão) */  /* align-content: flex-start; */  /* align-content: flex-end; */  /* align-content: center; */  /* align-content: space-between; */  /* align-content: space-around; */}/* Nos Itens (Filhos) */.flex-item {  /* Crescimento do item (fator) */  flex-grow: 1; /* ocupa espaço disponível */  /* flex-grow: 0; não cresce (padrão) */  /* Encolhimento do item (fator) */  flex-shrink: 1; /* encolhe se necessário (padrão) */  /* flex-shrink: 0; não encolhe */  /* Tamanho base do item antes de crescer/encolher */  flex-basis: auto; /* largura/altura do conteúdo (padrão) */  /* flex-basis: 100px; */  /* Atalho para flex-grow, flex-shrink e flex-basis */  flex: 0 1 auto; /* não cresce, encolhe, auto-base */  /* flex: 1; (igual a flex: 1 1 0%) */  /* flex: auto; (igual a flex: 1 1 auto) */  /* flex: none; (igual a flex: 0 0 auto) */  /* Ordem individual dos itens */  order: 0; /* padrão */  /* order: 1; */  /* Alinhamento individual no Eixo Cruzado */  align-self: auto; /* herda do container (padrão) */  /* align-self: flex-start; */  /* align-self: flex-end; */  /* align-self: center; */}

⚡ Comandos Rápidos

  • display: flex;: Convierte el elemento en un contenedor flex.

  • justify-content: center;: Centra los ítems en el eje principal.

  • align-items: center;: Centra los ítems en el eje cruzado (en una sola línea).

  • flex-direction: column;: Cambia la dirección de los ítems a vertical.

  • flex-wrap: wrap;: Permite que los ítems salten a la siguiente línea/columna.

  • flex: 1;: El ítem crece, se encoge y tiene una base de 0 (ideal para llenar espacio).

🔧 Casos de Uso

  1. Caso básico: Alineación Horizontal y Vertical Simple

    HTML
    <div class="container">  <div class="item">Conteúdo</div></div>
    CSS
    .container {  display: flex;  justify-content: center; /* Centraliza horizontalmente */  align-items: center;     /* Centraliza verticalmente */  height: 100vh; /* Exemplo para ver o efeito */}
  2. Caso intermedio: Diseño de Navegación Responsiva

    HTML
    <nav class="navbar">  <a href="#">Home</a>  <a href="#">Sobre</a>  <a href="#">Contato</a></nav>
    CSS
    .navbar {  display: flex;  justify-content: space-around; /* Distribui links igualmente */  flex-wrap: wrap; /* Permite quebrar linha em telas menores */  background-color: #eee;  padding: 10px;}.navbar a {  padding: 8px 15px;  text-decoration: none;  color: #333;}
  3. Caso avanzado: Sistema de Cuadrícula Simple (3 columnas, flexibles)

    HTML
    <div class="grid-container">  <div class="col">Coluna 1</div>  <div class="col">Coluna 2</div>  <div class="col">Coluna 3</div></div>
    CSS
    .grid-container {  display: flex;  flex-wrap: wrap; /* Permite quebrar colunas */  gap: 20px;       /* Espaço entre as colunas */}.col {  flex: 1 1 calc(33.333% - 20px); /* 3 colunas, encolhem, base de 1/3 menos o gap */  min-width: 250px; /* Colunas não ficam muito pequenas */  background-color: lightblue;  padding: 15px;  text-align: center;}/* Para telas muito pequenas, uma coluna por linha */@media (max-width: 600px) {  .col {    flex: 1 1 100%;  }}

🚨 Errores Comunes

  • display: flex; solo funciona en el padre directo: Las propiedades flexbox aplicadas al contenedor afectan solo a sus hijos directos.

  • Altura del flex-container: Para que align-items: center; funcione verticalmente, el contenedor necesita tener una altura definida (p. ej., height: 100vh; o un valor fijo).

  • margin: auto; en ítems flex: Usar margin: auto; en un ítem flex puede ser potente para empujar otros ítems o centrar un ítem específico dentro del eje principal/cruzado.

  • width y height vs flex-basis: flex-basis generalmente anula width (en el eje principal) y height (en el eje cruzado) en ítems flex. Usa flex-basis para definir el tamaño inicial preferido.

  • flex-wrap: nowrap; con overflow: Si no usas flex-wrap: wrap;, los ítems intentarán permanecer en una sola línea y pueden desbordar el contenedor.

Quiz interactivo

Pon a prueba tus conocimientos

Responde y valida tu comprensión.

1. ¿Qué propiedad convierte un elemento en un contenedor flex?
2. ¿Qué propiedad centra los elementos en el eje principal?
3. ¿A quién afectan las propiedades flexbox aplicadas al contenedor?