
O Flexbox (Flexible Box Layout) é uma das funcionalidades mais poderosas e versáteis do CSS, criada para proporcionar uma maneira mais eficiente de alinhar, distribuir e ajustar o espaço entre itens em um contêiner, mesmo quando o tamanho desses itens é desconhecido ou dinâmico.
No conteúdo de hoje, vamos explorar o Flexbox CSS em profundidade, detalhando sua estrutura, propriedades e exemplos práticos, para que você possa ter uma compreensão abrangente dessa ferramenta poderosa para o desenvolvimento web moderno.
Sumário do Artigo
Introdução ao Flexbox CSS
Se você está iniciando no mundo do desenvolvimento front-end, uma área que se destaca pelo visual, certamente encontrará técnicas, estratégias e métodos que potencializarão suas habilidades de desenvolvimento.
Hoje, apresento o Flexbox CSS, que, sem dúvida, melhorará sua maneira de estruturar e organizar suas páginas.
Flexbox é um modelo de layout unidimensional que distribui os elementos ao longo de um eixo principal (main axis) ou de um eixo transversal (cross axis).
Ele é particularmente útil para a construção de layouts responsivos, pois facilita o alinhamento e a distribuição dos elementos de uma maneira que não era possível com os métodos tradicionais de CSS, como floats ou inline-blocks.
Estrutura Básica do Flexbox CSS
Antigamente, as propriedades responsáveis por alinhar os elementos HTML eram float
para conteúdos das páginas e inline-block
para menus.
Essas propriedades ainda são muito utilizadas hoje em dia, porém, com a chegada do Flexbox, elas perderam um pouco de espaço na estruturação de páginas.
Com a crescente popularidade do design responsivo, o Flexbox CSS ganhou destaque devido à sua capacidade de adaptação dos elementos.
A estrutura do Flexbox é composta por dois elementos principais:
- Contêiner Flex: O elemento pai que possui a propriedade
display: flex;
oudisplay: inline-flex;
. - Itens Flex: Os elementos filhos diretos do contêiner Flex, que serão afetados pelas propriedades do Flexbox CSS.
Confira também:
Propriedades do Contêiner Flex
As propriedades aplicáveis ao contêiner Flex são essenciais para definir como os itens flexíveis serão dispostos dentro dele.
É possível alinhar os itens à esquerda, à direita, para cima ou para baixo, além de outros tipos de alinhamento, permitindo dispor os itens em colunas ou linhas.
No caso das linhas, é possível permitir ou não a quebra dessas linhas, entre outras formas de trabalhar com o posicionamento dos elementos.
Vamos detalhar cada uma delas:
1. display
.container {
display: flex;
}
2. flex-direction
.container {
flex-direction: row; /* padrão */
}
Essas propriedades definem a direção dos itens no contêiner.
Os valores possíveis são:
row
: Direção horizontal (da esquerda para a direita).row-reverse
: Direção horizontal inversa (da direita para a esquerda).column
: Direção vertical (de cima para baixo).column-reverse
: Direção vertical inversa (de baixo para cima).
3. flex-wrap
.container {
flex-wrap: nowrap; /* padrão */
}
Define se os itens flexíveis devem ser mantidos em uma única linha ou quebrados em várias linhas.
Os valores possíveis são:
nowrap
: Todos os itens em uma única linha.wrap
: Os itens quebram em várias linhas.wrap-reverse
: Os itens quebram em várias linhas na ordem inversa.
4. flex-flow
.container {
flex-flow: row nowrap; /* padrão */
}
É um atalho para as propriedades flex-direction
e flex-wrap
.
5. justify-content
.container {
justify-content: flex-start; /* padrão */
}
Alinha os itens ao longo do eixo principal.
Esta propriedade varia dependendo se a direção foi definida em colunas ou linhas na propriedade flex-direction
.
Por exemplo, se você definir a direção dos itens como linhas, ao usar flex-end
, os itens serão alinhados para o fim da linha, que é a direita.
Por outro lado, se a direção for em colunas, os itens serão alinhados para baixo, que é o fim da coluna.
Os valores possíveis são:
flex-start
: Alinha os itens ao início do contêiner.flex-end
: Alinha os itens ao final do contêiner.center
: Alinha os itens ao centro do contêiner.space-between
: Distribui os itens com espaço igual entre eles.space-around
: Distribui os itens com espaço igual ao redor de cada item.space-evenly
: Distribui os itens com espaços iguais entre eles e nas extremidades.
6. align-items
.container {
align-items: stretch; /* padrão */
}
Alinha os itens ao longo do eixo transversal. Essa propriedade se comporta de maneira similar à propriedade justify-content
, considerando se a direção for linhas ou colunas.
Os valores possíveis são:
stretch
: Estica os itens para preencher o contêiner.flex-start
: Alinha os itens ao início do eixo transversal.flex-end
: Alinha os itens ao final do eixo transversal.center
: Alinha os itens ao centro do eixo transversal.baseline
: Alinha os itens ao baseline (linha base) do texto.
7. align-content
.container {
align-content: stretch; /* padrão */
}
Alinha as linhas do contêiner quando há espaço extra no eixo transversal.
E adivinha? Essa propriedade também se comportará com base na definição de linhas ou colunas.
Os valores possíveis são:
stretch
: Estica as linhas para preencher o espaço disponível.flex-start
: Alinha as linhas ao início do eixo transversal.flex-end
: Alinha as linhas ao final do eixo transversal.center
: Alinha as linhas ao centro do eixo transversal.space-between
: Distribui as linhas com espaço igual entre elas.space-around
: Distribui as linhas com espaço igual ao redor de cada linha.

Propriedades dos Itens Flex
Nas propriedades do contêiner Flex, as propriedades são responsáveis por organizar os itens dentro de um contêiner.
No entanto, os itens não são controlados apenas pelo contêiner; eles também têm suas próprias propriedades e flexibilidade. Os itens flexíveis dentro do contêiner Flex possuem suas próprias propriedades para controlar seu comportamento.
Vamos explorar cada uma delas:
1. order
.item {
order: 0; /* padrão */
}
Define a ordem dos itens no contêiner.
Essa propriedade é muito interessante, pois permite definir a ordem dos elementos, onde podemos atribuir um número indicando a posição.
Por exemplo, se você possui 5 itens dentro de um contêiner e o item 5 receber a ordem 2, ele aparecerá na segunda posição.
O valor padrão é 0, e itens com valores menores de order
aparecem primeiro.
2. flex-grow
.item {
flex-grow: 0; /* padrão */
}
Define a capacidade do item de crescer em relação aos outros itens no contêiner.
Por exemplo, se você tiver 3 itens dentro do seu contêiner e definir flex-grow: 1
para o item um, ele crescerá 1 unidade em relação aos outros.
Um valor de 1 permite que o item cresça para ocupar o espaço disponível.
3. flex-shrink
.item {
flex-shrink: 1; /* padrão */
}
Define a capacidade do item de encolher em relação aos outros itens no contêiner.
Um valor de 0 impede que o item encolha.
4. flex-basis
.item {
flex-basis: auto; /* padrão */
}
Define o tamanho inicial do item antes de distribuir o espaço restante.
Pode ser um valor fixo (como 200px
) ou auto
.
5. flex
.item {
flex: 0 1 auto; /* padrão */
}
É um atalho para as propriedades flex-grow
, flex-shrink
e flex-basis
.
6. align-self
.item {
align-self: auto; /* padrão */
}
Permite que um item sobrescreva a propriedade align-items
do contêiner.
Os valores possíveis são:
auto
: Usa o valor dealign-items
do contêiner.stretch
: Estica o item para preencher o contêiner.flex-start
: Alinha o item ao início do eixo transversal.flex-end
: Alinha o item ao final do eixo transversal.center
: Alinha o item ao centro do eixo transversal.baseline
: Alinha o item ao baseline (linha base) do texto.
Exemplos Práticos do Flexbox CSS
Para consolidar nosso entendimento, vejamos alguns exemplos práticos de uso do Flexbox.
Layout Básico com Flexbox
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Layout Flexbox Básico</title>
<style>
.container {
display: flex;
justify-content: space-between;
align-items: center;
height: 100vh;
}
.item {
background-color: #4CAF50;
color: white;
padding: 20px;
margin: 10px;
text-align: center;
font-size: 1.5em;
}
</style>
</head>
<body>
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
</div>
</body>
</html>
Layout Responsivo com Flexbox
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Layout Flexbox Responsivo</title>
<style>
.container {
display: flex;
flex-wrap: wrap;
}
.item {
background-color: #4CAF50;
color: white;
padding: 20px;
margin: 10px;
text-align: center;
font-size: 1.5em;
flex: 1 1 calc(33.333% - 20px);
}
@media (max-width: 600px) {
.item {
flex: 1 1 calc(100% - 20px);
}
}
</style>
</head>
<body>
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item
</div>
</body>
</html>
Benefícios do Flexbox CSS
- Simplicidade: Flexbox oferece uma maneira mais simples e intuitiva de criar layouts complexos, substituindo a necessidade de floats e tabelas.
- Responsividade: Flexbox CSS facilita a criação de layouts responsivos que se adaptam a diferentes tamanhos de tela sem a necessidade de media queries complexas.
- Alinhamento Dinâmico: Com Flexbox, você pode facilmente centralizar e alinhar itens tanto horizontalmente quanto verticalmente.
- Espaçamento Eficiente: Flexbox permite distribuir o espaço entre os itens de forma eficiente, garantindo uma aparência consistente e agradável.
Dicas e Boas Práticas
- Entender os Eixos: Compreender a diferença entre o eixo principal (main axis) e o eixo transversal (cross axis) é crucial para utilizar Flexbox CSS de maneira eficaz.
- Utilizar Propriedades de Atalho: Propriedades como
flex
eflex-flow
são atalhos úteis que combinam várias outras propriedades, tornando o código mais limpo e fácil de manter. - Combinar com Outras Técnicas: Flexbox é mais eficaz quando combinado com outras técnicas de layout, como Grid Layout, para criar layouts ainda mais complexos e responsivos.
- Testar em Diferentes Navegadores: Embora o suporte ao Flexbox CSS seja excelente nos navegadores modernos, é sempre uma boa prática testar seu layout em diferentes navegadores para garantir a compatibilidade.
Conclusão
Flexbox CSS é uma ferramenta poderosa e versátil para criar layouts modernos e responsivos de maneira simples e eficiente.
Com as propriedades e exemplos práticos abordados neste post, você estará bem equipado para utilizar Flexbox CSS em seus projetos de desenvolvimento web. Lembre-se de experimentar e praticar com diferentes combinações de propriedades para encontrar a melhor solução para seus layouts específicos.
Aproveite o poder do Flexbox e eleve seus designs web a um novo nível de sofisticação e funcionalidade.
Com paciência e prática, você dominará essa incrível tecnologia e criará interfaces cada vez mais dinâmicas e responsivas.