Shorthand flex-flow: Atalho para flex-direction e flex-wrap
Aprenda a combinar as propriedades de direção e quebra em uma única linha.
No CSS, as propriedades "shorthand" (atalho) são uma mão na roda para escrever código mais conciso e legível. A propriedade flex-flow é um desses atalhos, permitindo que você defina flex-direction e flex-wrap em uma única linha de código.
Pense no flex-flow como um "comando combinado" para o seu Contêiner Flex. Em vez de dar duas instruções separadas ("organize em linha" e "quebre se não couber"), você pode dar uma única instrução mais completa ("organize em linha e quebre se não couber").
Como funciona flex-flow
A propriedade flex-flow é aplicada ao Contêiner Flex e aceita dois valores, na seguinte ordem:
<flex-direction>: O valor para a propriedadeflex-direction(ex:row,column,row-reverse,column-reverse).<flex-wrap>: O valor para a propriedadeflex-wrap(ex:nowrap,wrap,wrap-reverse).
A ordem dos valores não importa, mas é uma boa prática seguir a ordem flex-direction e depois flex-wrap para manter a consistência. Se um dos valores for omitido, o valor padrão da propriedade correspondente será usado.
Sintaxe:
.flex-container {
flex-flow: <flex-direction> <flex-wrap>;
}
Exemplos:
flex-flow: row wrap;- Equivalente a:
flex-direction: row; flex-wrap: wrap;
- Equivalente a:
flex-flow: column nowrap;- Equivalente a:
flex-direction: column; flex-wrap: nowrap;
- Equivalente a:
flex-flow: row-reverse wrap;- Equivalente a:
flex-direction: row-reverse; flex-wrap: wrap;
- Equivalente a:
flex-flow: column;(apenasflex-directiondefinido)- Equivalente a:
flex-direction: column; flex-wrap: nowrap; /* flex-wrap padrão */
- Equivalente a:
flex-flow: wrap;(apenasflex-wrapdefinido)- Equivalente a:
flex-direction: row; /* flex-direction padrão */ flex-wrap: wrap;
- Equivalente a:
Por que usar flex-flow?
- Concisão: Reduz a quantidade de código CSS, tornando-o mais compacto.
- Legibilidade: Para quem já está familiarizado com Flexbox,
flex-flowpode tornar o código mais fácil de ler, pois agrupa duas propriedades relacionadas. - Organização: Ajuda a manter as propriedades relacionadas juntas.
Exemplo Prático:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Flex-flow Shorthand</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f4f4f4;
}
.flex-container {
display: flex;
background-color: #e0e0e0;
border: 2px solid #333;
padding: 10px;
min-height: 120px; /* Altura mínima para visualização */
margin-bottom: 20px;
width: 300px; /* Largura limitada para forçar a quebra */
}
.flex-item {
background-color: lightblue;
border: 1px solid blue;
padding: 15px;
margin: 5px;
color: #333;
font-weight: bold;
text-align: center;
width: 100px; /* Largura fixa para os itens */
height: 60px; /* Altura fixa para os itens */
line-height: 60px; /* Para centralizar texto verticalmente */
flex-shrink: 0; /* Impede que os itens encolham para demonstrar o wrap */
}
/* --- Exemplos de flex-flow --- */
.container-row-wrap {
flex-flow: row wrap; /* Equivalente a flex-direction: row; flex-wrap: wrap; */
}
.container-column-nowrap {
flex-flow: column nowrap; /* Equivalente a flex-direction: column; flex-wrap: nowrap; */
height: 300px; /* Altura para ver a coluna */
width: 150px; /* Largura para a coluna */
}
.container-row-reverse-wrap {
flex-flow: row-reverse wrap; /* Equivalente a flex-direction: row-reverse; flex-wrap: wrap; */
}
.container-only-direction {
flex-flow: column; /* Equivalente a flex-direction: column; flex-wrap: nowrap; */
height: 300px;
width: 150px;
}
.container-only-wrap {
flex-flow: wrap; /* Equivalente a flex-direction: row; flex-wrap: wrap; */
}
</style>
</head>
<body>
<h1>Propriedade `flex-flow` (Shorthand)</h1>
<h2>`flex-flow: row wrap`</h2>
<div class="flex-container container-row-wrap">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
</div>
<p>Itens em linha, quebram para a próxima linha.</p>
<h2>`flex-flow: column nowrap`</h2>
<div class="flex-container container-column-nowrap">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
</div>
<p>Itens em coluna, não quebram (transbordam verticalmente).</p>
<h2>`flex-flow: row-reverse wrap`</h2>
<div class="flex-container container-row-reverse-wrap">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
</div>
<p>Itens em linha reversa, quebram para a próxima linha.</p>
<h2>`flex-flow: column` (apenas direction)</h2>
<div class="flex-container container-only-direction">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
</div>
<p>Itens em coluna, `flex-wrap` padrão (`nowrap`).</p>
<h2>`flex-flow: wrap` (apenas wrap)</h2>
<div class="flex-container container-only-wrap">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
</div>
<p>Itens em linha (`flex-direction` padrão), quebram.</p>
</body>
</html>
Resultado:
- Você verá que os contêineres se comportam exatamente como se
flex-directioneflex-wraptivessem sido definidos separadamente, mas com um código mais compacto.
Boas Práticas:
- Consistência: Use
flex-flowse você preferir a sintaxe shorthand, mas seja consistente em seu projeto. - Clareza: Para iniciantes, pode ser mais claro usar
flex-directioneflex-wrapseparadamente até que se sintam confortáveis com o shorthand. - Valores Padrão: Lembre-se que se um dos valores for omitido em
flex-flow, o valor padrão da propriedade correspondente será aplicado (rowparaflex-directionenowrapparaflex-wrap).
A propriedade flex-flow é uma ferramenta útil para otimizar seu código CSS, especialmente quando você precisa definir a direção e o comportamento de quebra dos seus Itens Flex com frequência.