Oh MyUtils

Generador CSS Flexbox - Constructor Visual de Layouts Flex Online

Crea layouts CSS Flexbox con controles visuales. Ajusta dirección, alineación, wrap y gap con vista previa — genera código CSS limpio.

Preguntas frecuentes

¿Qué es CSS Flexbox?

CSS Flexbox (Flexible Box Layout) es un módulo de diseño CSS que proporciona una forma eficiente de organizar, alinear y distribuir espacio entre elementos en un contenedor. A diferencia de los diseños tradicionales de bloque/línea, flexbox es independiente de la dirección y funciona en una dimensión (fila o columna). Destaca en la distribución del espacio y la alineación del contenido incluso cuando los tamaños de los elementos son dinámicos o desconocidos.

¿Cómo uso este generador Flexbox?

Configure las propiedades del contenedor usando el panel de control: elija valores de flex-direction, flex-wrap, justify-content, align-items y gap. Agregue o elimine elementos secundarios con los botones Agregar/Eliminar (comienza con 3 elementos). Haga clic en cualquier elemento de la vista previa para seleccionarlo y ajustar sus propiedades flex individuales. Opcionalmente pruebe un diseño preestablecido como punto de partida. Copie el código CSS y HTML generado con el botón de copiar.

¿Mis datos están seguros? ¿Se envía algo a un servidor?

Sí, sus datos están completamente seguros. Esta herramienta se ejecuta enteramente en su navegador usando JavaScript del lado del cliente. No se envían configuraciones de diseño, código CSS ni ningún dato a ningún servidor. Toda la generación de código y renderizado de vista previa ocurre localmente en su dispositivo.

¿Cuál es la diferencia entre justify-content y align-items?

justify-content controla cómo se distribuyen los elementos a lo largo del eje principal (horizontal para flex-direction: row, vertical para column). align-items controla cómo se alinean los elementos a lo largo del eje transversal (perpendicular al eje principal). Por ejemplo, en un diseño de fila, justify-content: center centra horizontalmente, mientras que align-items: center centra verticalmente.

¿Cuándo debo usar flex-wrap?

Use flex-wrap: wrap cuando quiera que los elementos fluyan a múltiples líneas en lugar de comprimirse en una sola línea. Esto es esencial para cuadrículas de tarjetas responsivas, listas de etiquetas y cualquier diseño donde los elementos deben pasar naturalmente a la siguiente fila cuando el ancho del contenedor es insuficiente.

¿Qué es la propiedad gap y por qué es mejor que los márgenes?

La propiedad gap define el espaciado entre elementos flex sin agregar espacio en los bordes exteriores del contenedor. A diferencia de los márgenes, gap solo crea espacio entre elementos (no antes del primero ni después del último), no causa problemas de colapso de márgenes y funciona consistentemente independientemente del flex-direction.

¿Cómo funcionan flex-grow, flex-shrink y flex-basis juntos?

Estas tres propiedades controlan cómo los elementos se dimensionan dentro del contenedor. flex-basis establece el tamaño inicial antes de distribuir el espacio restante (predeterminado: auto). flex-grow determina cuánto espacio libre debe tomar un elemento (predeterminado: 0). flex-shrink determina cuánto debe encogerse si el contenedor es demasiado pequeño (predeterminado: 1). Por ejemplo, flex: 1 1 0 hace que un elemento crezca y se encoja equitativamente.

Ejemplos de código

// CSS Flexbox Generator - JavaScript

function generateFlexboxCSS(options = {}) {
  const {
    display = 'flex',
    flexDirection = 'row',
    flexWrap = 'nowrap',
    justifyContent = 'flex-start',
    alignItems = 'stretch',
    alignContent = 'stretch',
    rowGap = 0,
    columnGap = 0,
  } = options;

  const rules = [`display: ${display}`];

  if (flexDirection !== 'row') rules.push(`flex-direction: ${flexDirection}`);
  if (flexWrap !== 'nowrap') rules.push(`flex-wrap: ${flexWrap}`);
  if (justifyContent !== 'flex-start') rules.push(`justify-content: ${justifyContent}`);
  if (alignItems !== 'stretch') rules.push(`align-items: ${alignItems}`);
  if (alignContent !== 'stretch' && flexWrap !== 'nowrap') {
    rules.push(`align-content: ${alignContent}`);
  }
  if (rowGap > 0 || columnGap > 0) {
    if (rowGap === columnGap) {
      rules.push(`gap: ${rowGap}px`);
    } else {
      rules.push(`gap: ${rowGap}px ${columnGap}px`);
    }
  }

  return rules.map(r => `${r};`).join('\n');
}

function generateFlexItemCSS(options = {}) {
  const {
    flexGrow = 0,
    flexShrink = 1,
    flexBasis = 'auto',
    order = 0,
    alignSelf = 'auto',
  } = options;

  const rules = [];
  if (flexGrow !== 0 || flexShrink !== 1 || flexBasis !== 'auto') {
    rules.push(`flex: ${flexGrow} ${flexShrink} ${flexBasis}`);
  }
  if (order !== 0) rules.push(`order: ${order}`);
  if (alignSelf !== 'auto') rules.push(`align-self: ${alignSelf}`);

  return rules.map(r => `${r};`).join('\n');
}

// Usage
console.log(generateFlexboxCSS({
  justifyContent: 'center',
  alignItems: 'center',
  rowGap: 16,
  columnGap: 16,
}));
// display: flex;
// justify-content: center;
// align-items: center;
// gap: 16px;

Herramientas relacionadas