Propriedade flex-direction: Orientando os itens (linha ou coluna)

Controle a direção principal dos itens flex (horizontal ou vertical).

A propriedade flex-direction é uma das primeiras e mais importantes propriedades que você aplicará ao seu Contêiner Flex. Ela define o eixo principal (main axis) do contêiner, que por sua vez determina a direção em que os Itens Flex são dispostos.

Pense no flex-direction como a "direção da fila" em um evento. Se a fila é horizontal, as pessoas (flex-items) se alinham lado a lado. Se a fila é vertical, elas se alinham uma abaixo da outra. O flex-direction é quem decide essa orientação.

Eixo Principal e Eixo Cruzado

No Flexbox, existem dois eixos principais:

  1. Eixo Principal (Main Axis): É a direção definida por flex-direction. Os Itens Flex são dispostos ao longo deste eixo.
  2. Eixo Cruzado (Cross Axis): É o eixo perpendicular ao eixo principal.

A compreensão desses dois eixos é crucial, pois muitas outras propriedades do Flexbox (como justify-content e align-items) operam em relação a eles.

Valores da Propriedade flex-direction

A propriedade flex-direction é aplicada ao Contêiner Flex e aceita quatro valores principais:

  1. row (padrão):

    • Os Itens Flex são dispostos em uma linha, da esquerda para a direita (em idiomas LTR - Left-to-Right, como o português).
    • O eixo principal é horizontal.
    • O eixo cruzado é vertical.
  2. row-reverse:

    • Os Itens Flex são dispostos em uma linha, mas na ordem inversa, da direita para a esquerda.
    • O eixo principal é horizontal.
    • O eixo cruzado é vertical.
  3. column:

    • Os Itens Flex são dispostos em uma coluna, de cima para baixo.
    • O eixo principal é vertical.
    • O eixo cruzado é horizontal.
  4. column-reverse:

    • Os Itens Flex são dispostos em uma coluna, mas na ordem inversa, de baixo para cima.
    • O eixo principal é vertical.
    • O eixo cruzado é horizontal.

Exemplo Prático:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <title>Flex-direction</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: 100px; /* Altura mínima para visualização */
      margin-bottom: 20px;
    }

    .flex-item {
      background-color: lightblue;
      border: 1px solid blue;
      padding: 15px;
      margin: 5px;
      color: #333;
      font-weight: bold;
      text-align: center;
      width: 80px; /* Largura fixa para os itens */
      height: 60px; /* Altura fixa para os itens */
      line-height: 60px; /* Para centralizar texto verticalmente */
    }

    /* --- Exemplos de flex-direction --- */

    .container-row {
      flex-direction: row; /* Padrão */
    }

    .container-row-reverse {
      flex-direction: row-reverse;
    }

    .container-column {
      flex-direction: column;
      height: 300px; /* Necessário para ver a coluna */
    }

    .container-column-reverse {
      flex-direction: column-reverse;
      height: 300px; /* Necessário para ver a coluna */
    }
  </style>
</head>
<body>
  <h1>Propriedade `flex-direction`</h1>

  <h2>`flex-direction: row` (Padrão)</h2>
  <div class="flex-container container-row">
    <div class="flex-item">1</div>
    <div class="flex-item">2</div>
    <div class="flex-item">3</div>
  </div>
  <p>Itens dispostos em uma linha, da esquerda para a direita.</p>

  <h2>`flex-direction: row-reverse`</h2>
  <div class="flex-container container-row-reverse">
    <div class="flex-item">1</div>
    <div class="flex-item">2</div>
    <div class="flex-item">3</div>
  </div>
  <p>Itens dispostos em uma linha, da direita para a esquerda.</p>

  <h2>`flex-direction: column`</h2>
  <div class="flex-container container-column">
    <div class="flex-item">1</div>
    <div class="flex-item">2</div>
    <div class="flex-item">3</div>
  </div>
  <p>Itens dispostos em uma coluna, de cima para baixo.</p>

  <h2>`flex-direction: column-reverse`</h2>
  <div class="flex-container container-column-reverse">
    <div class="flex-item">1</div>
    <div class="flex-item">2</div>
    <div class="flex-item">3</div>
  </div>
  <p>Itens dispostos em uma coluna, de baixo para cima.</p>
</body>
</html>

Resultado:

  • Você verá os itens se organizando em diferentes direções (horizontal ou vertical) e ordens (normal ou reversa) de acordo com o flex-direction aplicado ao contêiner.

Boas Práticas:

  • Defina Cedo: flex-direction é uma das primeiras propriedades que você deve definir em seu Contêiner Flex, pois ela estabelece a base para como os outros alinhamentos funcionarão.
  • Pense nos Eixos: Sempre tenha em mente qual é o eixo principal e qual é o eixo cruzado, pois isso influenciará o comportamento de justify-content e align-items.
  • Cuidado com *-reverse: Usar row-reverse ou column-reverse pode ter implicações para a acessibilidade, pois a ordem visual pode ser diferente da ordem do HTML (lida por leitores de tela). Use com moderação e teste a acessibilidade.

Dominar flex-direction é o primeiro passo para controlar o fluxo dos seus Itens Flex e construir layouts Flexbox dinâmicos.