Gerador de CSS Flexbox

Mexa os sliders, clique numa caixa e veja um contêiner flex se reorganizar ao vivo — e copie o CSS exato. O playground inteiro roda no seu navegador.

Tudo acontece localmente no seu navegador. Nada sai do seu dispositivo.

Clique numa caixa para ajustar seu flex individual; clique de novo para deselecionar.

Nenhuma caixa selecionada

CSS gerado

Como funciona

O playground é um contêiner flex de verdade: cada controle reescreve os estilos inline do palco, e o painel de CSS espelha exatamente o que você vê. A chave são os eixos. flex-direction escolhe o eixo principal — row vai da esquerda à direita, column de cima para baixo, e as variantes -reverse apenas invertem a direção de escrita. justify-content distribui o espaço livre ao longo desse eixo principal, e align-items posiciona cada item ao longo do eixo transversal, em ângulo reto. Troque o palco para column e veja justify e align trocarem de papéis visuais enquanto os nomes das propriedades ficam onde estão.

Eixo principal vs eixo transversal
Quase toda confusão no flexbox é confusão de eixos. justify-content sempre age ao longo da direção em que os itens fluem (eixo principal); align-items sempre age através dela (eixo transversal). Com flex-direction: row, justify move os itens na horizontal e align na vertical — troque para column e os mesmos ajustes giram 90 graus junto com o eixo.
Quando align-content se aplica
align-content distribui linhas inteiras, não itens, então precisa de pelo menos duas: defina flex-wrap como wrap e deixe o contêiner alto o bastante (ou os itens largos o bastante) para formar uma segunda linha. Num contêiner de linha única a propriedade é definida para não ter efeito, e é por isso que parece quebrada na maioria das primeiras tentativas.
Lendo o shorthand de flex
flex: 1 0 120px empacota três valores em ordem fixa: flex-grow (quanto do espaço livre o item reclama), flex-shrink (seu peso quando a linha estoura) e flex-basis (seu tamanho inicial antes da distribuição). Um flex: 1 de um valor se expande para 1 1 0%; flex: auto significa 1 1 auto; flex: none significa 0 0 auto. Clique numa caixa do palco para criar valores por filho e veja o shorthand atualizar.

Perguntas frequentes

gap funciona em todos os lugares?

Sim, com flexbox é seguro em qualquer navegador moderno: gap em contêineres flex chegou no Chrome 84, Firefox 63 e Safari 14.1, então já se alinha ao padrão Baseline há anos. Firefox teve primeiro e Safari por último — quem ainda suporta iOS 13 ou Safari 13 de desktop precisa de margens no lugar de gap.

Por que minhas linhas com quebra e flex-basis percentual estouram?

Porque o gap não é descontado do basis percentual antes do acerto do box-sizing, e basis em porcentagem resolve sobre o tamanho interno do contêiner. Dois filhos com flex-basis: 50% mais qualquer gap já não cabem, e ficam um por linha. Use bases tipo calc(50% - 8px), ou flex-basis: 0 com flex-grow, e deixe o navegador dividir.

O comportamento muda no Safari móvel?

Não de um jeito que deva te preocupar hoje. O Safari 14.1+ implementa fielmente a especificação moderna de flexbox, incluindo gap e align-content com linhas quebradas. A velha dança dos prefixos -webkit-flex só importa se você der suporte a iOS 9-10, e esta ferramenta deliberadamente não gera saída com prefixo.

Por que align-content parece não fazer nada?

Quase sempre porque o contêiner tem uma única linha de itens. align-content só distribui linhas flex inteiras, e com flex-wrap: nowrap existe exatamente uma linha, então a propriedade é ignorada. Ative o wrap, force duas linhas com um basis ou min-width, e o controle passa a funcionar.

Algo é enviado para um servidor?

Não. O playground é CSS puro: suas posições de slider viram uma folha de estilos na memória e são copiadas pela sua área de transferência. Nada é armazenado, enviado ou baixado, e a página continua funcionando sem rede.