Comparação entre Flexbox, Grid e Layouts em Colunas
Este artigo explica a comparação entre Flexbox, Grid e Layouts em Colunas.
Você aprenderá as diferenças entre Flexbox, Grid e Layouts em Colunas, e quando usar cada um.
YouTube Video
HTML para Visualização
css-layout-comparision.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>CSS Properties Example</title>
7 <link rel="stylesheet" href="css-base.css">
8 <link rel="stylesheet" href="css-layout-comparision.css">
9</head>
10<body>
11 <!-- Header -->
12 <header>
13 <h1>CSS Properties For Layout</h1>
14 </header>
15 <!-- Main content -->
16 <main>
17 <header>
18 <h2>Layout Comparision</h2>
19 </header>
20 <article>
21 <h3>flex</h3>
22 <section>
23 <section class="sample-view">
24 <div class="flex-container">
25 <div class="flex-item">Item 1</div>
26 <div class="flex-item">Item 2</div>
27 <div class="flex-item">Item 3</div>
28 <div class="flex-item">Item 4</div>
29 <div class="flex-item">Item 5</div>
30 <div class="flex-item">Item 6</div>
31 <div class="flex-item">Item 7</div>
32 <div class="flex-item">Item 8</div>
33 <div class="flex-item">Item 9</div>
34 </div>
35 </section>
36 </section>
37 </article>
38 <article>
39 <h3>grid</h3>
40 <section>
41 <section class="sample-view">
42 <div class="grid-box">
43 <div class="grid-item item1">Item 1</div>
44 <div class="grid-item item2">Item 2</div>
45 <div class="grid-item item3">Item 3</div>
46 <div class="grid-item item4">Item 4</div>
47 <div class="grid-item item5">Item 5</div>
48 <div class="grid-item item6">Item 6</div>
49 <div class="grid-item item7">Item 7</div>
50 <div class="grid-item item8">Item 8</div>
51 <div class="grid-item item9">Item 9</div>
52 </div>
53 </section>
54 </section>
55 </article>
56 <article>
57 <h3>column</h3>
58 <section>
59 <section class="sample-view">
60 <section class="columns-container">
61 <p class="columns-item">Item 1</p>
62 <p class="columns-item">Item 2</p>
63 <p class="columns-item">Item 3</p>
64 <p class="columns-item">Item 4</p>
65 <p class="columns-item">Item 5</p>
66 <p class="columns-item">Item 6</p>
67 <p class="columns-item">Item 7</p>
68 <p class="columns-item">Item 8</p>
69 <p class="columns-item">Item 9</p>
70 </section>
71 </section>
72 </section>
73 </article>
74 </main>
75</body>
76</html>
Comparação entre Flexbox, Grid e Layouts em Colunas
CSS flex
, grid
e columns
são todas técnicas para alinhar e organizar elementos, mas cada uma tem suas próprias vantagens e casos de uso ideais. Abaixo está uma explicação clara de suas diferenças por meio de uma comparação.
Flexbox(display: flex
)
1.flex-container {
2 display: flex;
3 justify-content: space-between;
4 align-items: center;
5 flex-wrap: wrap;
6 background-color: lightblue;
7 height: 200px;
8}
9
10.flex-item {
11 background-color: lightskyblue;
12 padding: 10px;
13 margin: 5px;
14 width: 70px;
15 height: auto;
16}
Recursos
- Adequado para layouts unidirecionais—sejam horizontais ou verticais.
- Permite controle flexível sobre a ordem e flexibilidade dos elementos.
- Mais adequado para layouts de pequena escala, como barras de navegação e grupos de botões.
Vantagens
- Ajusta automaticamente o tamanho dos elementos filhos.
- Você pode alterar a ordem dos elementos usando propriedades como
flex-direction
,flex-wrap
eorder
.
Exemplo de alteração da ordem de exibição
Como exemplo de alteração da ordem de exibição, vamos definir a propriedade flex-direction
como column
.
1.flex-container {
2 flex-direction: column;
3}
Quando flex-direction
é definido como column
, os itens mudam de um layout horizontal para um layout vertical. O layout muda de um formato da esquerda para a direita para de cima para baixo.
Grid(display: grid
)
1.grid-box {
2 display: grid;
3 grid-template-columns: 100px 100px 100px;
4 grid-template-rows: 50px 50px 50px;
5 gap: 20px;
6 background-color: lightblue;
7 border: none;
8 height: 200px;
9}
10
11.grid-item {
12 background-color: lightskyblue;
13 width: 100%;
14 padding: 0;
15 text-align: center;
16}
Recursos
- Ideal para layouts bidimensionais.
- Permite uma definição clara de layouts baseados em grade.
- Ótimo para designs mais complexos e para a estrutura geral da página.
Vantagens
- Linhas e colunas podem ser definidas simultaneamente.
- Seções podem ser posicionadas usando áreas nomeadas (
grid-area
). - Os elementos filhos podem ser posicionados livremente dentro da grade, permitindo controle flexível da ordem.
Exemplo de alteração da ordem de exibição
Como exemplo de alteração da ordem de exibição, vamos usar a propriedade grid-template-areas
para definir as posições de exibição.
1.grid-box {
2 grid-template-areas:
3 "item1 item4 item5"
4 "item2 item6 item7"
5 "item3 item8 item9";
6}
7
8.item1 { grid-area: item1; }
9.item2 { grid-area: item2; }
10.item3 { grid-area: item3; }
11.item4 { grid-area: item4; }
12.item5 { grid-area: item5; }
13.item6 { grid-area: item6; }
14.item7 { grid-area: item7; }
15.item8 { grid-area: item8; }
16.item9 { grid-area: item9; }
Como você pode ver, o grid
pode ser usado não apenas para alterar a ordem de exibição, mas também para criar layouts únicos.
Columns(column-count
, column-width
)
1.columns-container {
2 background-color: lightblue;
3 columns: 100px 3;
4 column-gap: 20px;
5 column-rule: 2px solid #333;
6 padding: 10px;
7}
8
9.columns-item {
10 background-color: lightskyblue;
11 text-align: center;
12 margin: 20px auto;
13 color: white;
14 display: flex;
15 align-items: center;
16 justify-content: center;
17 font-size: 1.2rem;
18 border: 1px solid #ccc;
19 height: 50px;
20}
Recursos
- Você pode criar facilmente colunas no estilo de revistas.
- Ideal para conteúdo de texto fluido.
- Segue a ordem de origem do HTML, o que o torna menos adequado para controlar a ordem dos elementos.
Vantagens
- Pode dividir automaticamente textos longos.
- Você pode criar de forma muito fácil layouts no estilo de jornais.
Tabela Comparativa
Recurso / Caso de Uso | Flexbox | Grid | Colunas |
---|---|---|---|
Dimensão do Layout | 1D (horizontal ou vertical) | 2D (horizontal e vertical) | 1D (vertical) |
Melhor Para | Alinhamento de componentes | Estrutura de página completa | Texto em várias colunas |
Flexibilidade do Layout | Alta (ordem e tamanho) | Muito Alta (definição de áreas) | Baixa (apenas divisão automática) |
Controle dos Elementos Filhos | Flexível | Claramente definido | Difícil de controlar |
Intenção do Layout | Orientado ao conteúdo | Orientado ao layout | Orientado ao texto |
Resumo
- Flexbox é ideal quando você quer alinhar elementos em uma linha, como cabeçalhos ou listas de cartões.
- Grid é adequado quando você quer criar o layout completo, como a estrutura de uma página web.
- Colunas são melhores quando você quer formatar texto em várias colunas, como em artigos ou blogs.
Você também pode combiná-los conforme necessário. Por exemplo, você pode criar o layout geral com Grid e alinhar os elementos internos com Flex.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.