Generador de CSS Flexbox

Mueve los controles, haz clic en una caja y mira cómo se reorganiza el contenedor flex en vivo, con el CSS exacto listo para copiar.

Todo ocurre localmente en tu navegador. Nada sale de tu dispositivo.

Haz clic en una caja para ajustar su flex individual; clic de nuevo para deseleccionar.

Ninguna caja seleccionada

CSS generado

Cómo funciona

El campo de pruebas es un contenedor flex real: cada control reescribe los estilos en línea del escenario, y el panel de CSS refleja exactamente lo que ves. La clave son los ejes. flex-direction elige el eje principal — row va de izquierda a derecha, column de arriba a abajo, y las variantes -reverse invierten la dirección de escritura. justify-content reparte entonces el espacio libre a lo largo del eje principal, y align-items coloca cada elemento a través del eje transversal, en ángulo recto. Cambia el escenario a column y verás que justify y align intercambian roles visuales mientras los nombres de las propiedades no se mueven.

Eje principal vs eje transversal
Casi toda confusión de flexbox es una confusión de ejes. justify-content siempre actúa a lo largo de la dirección en que fluyen los elementos (eje principal); align-items siempre actúa a través (eje transversal). Con flex-direction: row, justify mueve los elementos en horizontal y align en vertical — cambia a column y los mismos ajustes giran 90 grados con el eje.
Cuándo se aplica align-content
align-content reparte líneas completas, no elementos, así que necesita al menos dos: pon flex-wrap en wrap y haz el contenedor suficientemente alto (o los elementos suficientemente anchos) para que se forme una segunda línea. En un contenedor de una sola línea la propiedad está definida para no tener efecto, y por eso parece rota en la mayoría de los primeros intentos.
Cómo leer el shorthand de flex
flex: 1 0 120px empaqueta tres valores en orden fijo: flex-grow (cuánto espacio libre reclama el elemento), flex-shrink (su peso cuando la línea desborda) y flex-basis (su tamaño inicial antes del reparto). Un flex: 1 de un valor se expande a 1 1 0%; flex: auto significa 1 1 auto; flex: none significa 0 0 auto. Haz clic en una caja del escenario para crear valores por hijo y mira cómo se actualiza el shorthand.

Preguntas frecuentes

¿Funciona gap en todas partes?

Sí, con flexbox es seguro en cualquier navegador moderno: gap en contenedores flex llegó en Chrome 84, Firefox 63 y Safari 14.1, así que lleva años cumpliendo el estándar Baseline. Firefox lo tuvo primero y Safari el último — quien aún soporte iOS 13 o Safari 13 de escritorio necesita márgenes en lugar de gap.

¿Por qué se desbordan mis filas con envoltura y flex-basis en porcentaje?

Porque el gap no se descuenta del basis porcentual antes de que cierre la aritmética de box-sizing, y los basis en porcentaje se resuelven sobre el tamaño interior del contenedor. Dos hijos con flex-basis: 50% más cualquier gap ya no caben, y acaban uno por línea. Usa bases tipo calc(50% - 8px), o flex-basis: 0 con flex-grow, y deja que el navegador reparta.

¿Se comporta distinto en Safari móvil?

No de ninguna forma que deba preocuparte hoy. Safari 14.1+ implementa fielmente la especificación moderna de flexbox, incluido gap y align-content con líneas envueltas. El viejo baile de prefijos -webkit-flex solo importa si soportas iOS 9-10, y esta herramienta no emite salida con prefijos a propósito.

¿Por qué align-content parece no hacer nada?

Casi siempre porque el contenedor tiene una sola línea de elementos. align-content solo reparte líneas flex completas, y con flex-wrap: nowrap hay exactamente una, así que la propiedad se ignora. Activa wrap, fuerza dos líneas con un basis o min-width, y el control empieza a funcionar.

¿Se sube algo a un servidor?

No. El campo de pruebas es CSS puro: tus ajustes se convierten en una hoja de estilos en memoria y se copian desde tu portapapeles. Nada se guarda, envía ni descarga, y la página sigue funcionando sin red.