Generador de CSS Flexbox

Generar CSS
Siguiente

Flexbox es la opción para el diseño unidimensional: filas de tarjetas, barras de navegación, héroes centrados, formularios. El modelo de contenedor e ítem es potente, pero sus propiedades interactúan de maneras poco evidentes. Este generador elimina las conjeturas a la hora de configurar el contenedor: elige flex-direction, justify-content, align-items, flex-wrap y gap, y obtén una regla CSS limpia para copiar directamente en tu hoja de estilos.

Cómo generar el CSS

  1. 1

    Elige una dirección

    Elige row, column o las variantes invertidas. Esto define flex-direction, el eje por el que fluyen los ítems.

  2. 2

    Configura justify-content

    Elige cómo se distribuyen los ítems en el eje principal: inicio, centro, space-between, space-around o final.

  3. 3

    Configura align-items

    Elige cómo se alinean los ítems en el eje cruzado: stretch, inicio, centro o final.

  4. 4

    Configura gap y wrap

    Añade espacio entre los ítems en píxeles y decide si los ítems pasan a una nueva línea.

  5. 5

    Copia el CSS

    El generador produce la regla del contenedor con todas las propiedades, lista para pegar en tu hoja de estilos.

Propiedades del contenedor

Propiedad Valores Efecto
flex-direction fila / columna / fila-inversa / columna-inversa Eje principal
flex-wrap nowrap / wrap / wrap-inversa Si los ítems se envuelven
justify-content flex-start / center / flex-end / space-between / space-around / space-evenly Distribución del eje principal
align-items flex-start / center / flex-end / baseline / stretch Alineación del eje cruzado de cada línea
align-content mismos valores + space-between / space-around Cuando se envuelven, distribución del eje cruzado de las líneas
gap (row-gap, column-gap) longitud Espaciado entre ítems

Propiedades del ítem

Propiedad Valores Efecto
flex-grow 0+ (sin unidad) Parte del espacio sobrante a absorber
flex-shrink 0+ (sin unidad) Parte del desbordamiento a reducir
flex-basis longitud o auto Tamaño inicial antes de crecer/reducir
flex abreviatura (1 1 auto, etc.) Las tres a la vez
align-self auto / flex-start / center / flex-end / baseline / stretch Sobrescribe align-items para un ítem
order entero Reorden visual sin cambiar el DOM

El truco de flex: 1

flex: 1 es una abreviatura para flex: 1 1 0%. Hace que un ítem:

  • Crezca para llenar el espacio disponible (crecer: 1)
  • Se reduzca si es necesario (reducir: 1)
  • Comience desde un tamaño cero (base: 0%)

Para columnas de igual ancho, flex: 1 en cada ítem da una división perfecta. Para barras laterales que no deben reducirse por debajo del contenido, usa flex: 0 0 240px (sin crecer, sin reducir, base de 240px).

Patrones comunes

Héroe centrado

.hero {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

Navbar con logo a la izquierda, enlaces a la derecha

.nav {
  display: flex;
  align-items: center;
  gap: 2rem;
}
.nav-links {
  margin-left: auto;  /* empujar a la derecha */
  display: flex;
  gap: 1rem;
}

Fila de tarjetas responsiva

.card-row {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
}
.card {
  flex: 1 1 260px;  /* crecer/reducir, 260px mínimo antes de envolver */
}

Campo de formulario con botón (input flexible, botón fijo)

.field {
  display: flex;
  gap: 0.5rem;
}
.field input {
  flex: 1;
}
.field button {
  flex: 0 0 auto;
}

Flexbox vs. Grid

  • Flexbox: una dimensión (fila O columna). Mejor cuando los tamaños de los ítems son impulsados por el contenido o cuando distribuyes espacio a lo largo de una sola línea.
  • Grid: dos dimensiones (filas Y columnas con pistas explícitas). Mejor cuando el diseño tiene estructura de filas y columnas simultáneamente.

Para una barra de navegación o una pila de tarjetas: Flexbox. Para una cuadrícula de tarjetas de producto con múltiples filas de tarjetas alineadas: CSS Grid. Muchas páginas reales usan ambos: un diseño de página Grid con Flexbox dentro de los componentes.

Problemas comunes

  • Ítems que no llenan el contenedor: el align-items: stretch por defecto se aplica solo si los ítems no tienen altura fija. Con altura explícita, permanecen en ese tamaño.
  • gap no funciona: verifica la compatibilidad del navegador. El gap de flex llegó tarde; Safari <14.1 no lo soportaba. Ahora es universal en 2024+.
  • Hijos de flex en columna colapsando: una columna flex tiene align-items: stretch como predeterminado, lo que estira los ítems al ancho del contenedor. Si un hijo establece un ancho, se sale.
  • order es solo visual: los lectores de pantalla y la navegación por teclado siguen el orden del DOM. No uses order para hacer que el contenido tenga sentido; úsalo solo para pulido visual.

Preguntas frecuentes

Grid para diseños de página bidimensionales (filas y columnas juntas). Flexbox para distribuciones unidimensionales (barra de navegación, fila de botones, pila). Dentro de una celda de Grid, Flexbox para su diseño interno. La mayoría de las UIs complejas usan ambos.

Porque el valor predeterminado de flex-shrink es 1 pero el valor predeterminado de min-width es auto, que equivale al ancho del contenido. Establece min-width: 0 (o min-inline-size: 0) en el ítem para permitir que se reduzca por debajo de su tamaño intrínseco.

display: flex; justify-content: center; align-items: center; en el contenedor. Cubre la gran mayoría de los casos de “centra esta cosa” con dos líneas.

Sí, en todos los navegadores modernos. Safari llegó tarde (se agregó en 14.1, abril de 2021); hoy todos los navegadores principales lo soportan. Reemplaza el espaciado basado en margin con gap siempre que puedas, mucho más simple.

Herramientas relacionadas