Templates de Layout HTML
Aprenda a construir layouts modernos de páginas HTML com elementos semânticos e colunas responsivas usando CSS Flexbox e CSS Grid.
Um layout de página é a forma como as principais regiões de uma página — o cabeçalho, a navegação, o conteúdo principal, a barra lateral e o rodapé — são dispostas na tela. Este capítulo mostra como construir um layout de forma moderna: marcar as regiões com elementos semânticos do HTML5, e depois posicioná-las com CSS Flexbox ou CSS Grid. Ao final, você será capaz de montar uma página responsiva com múltiplas colunas do zero.
A estrutura de uma página típica
Quase todo site é construído a partir dos mesmos cinco blocos:
| Região | Finalidade | Elemento |
|---|---|---|
| Cabeçalho | Logotipo, título do site, banner | <header> |
| Navegação | Menu principal / links | <nav> |
| Conteúdo principal | O conteúdo único da página | <main> |
| Barra lateral | Links relacionados, anúncios, "extras" | <aside> |
| Rodapé | Copyright, contato, links secundários | <footer> |
Antes do HTML5, essas regiões eram escritas como elementos genéricos <div> com atributos id ou class como <div id="header">. Isso ainda renderiza bem, mas não carrega nenhum significado: um navegador, um leitor de tela ou um mecanismo de busca não consegue distinguir um banner de um rodapé. Os elementos semânticos acima descrevem o que cada região é, o que melhora a acessibilidade e o SEO sem custo adicional. Veja a lista completa em Elementos Semânticos no HTML5.
Um esqueleto semântico de página
Comece com a marcação, antes de adicionar qualquer CSS de layout. Use cada elemento de referência uma vez onde ele naturalmente se encaixa:
<!DOCTYPE html>
<html lang="en">
<head>
<title>My page</title>
</head>
<body>
<header>
<h1>My Website</h1>
<nav>
<a href="#">Home</a>
<a href="#">About</a>
<a href="#">Contact</a>
</nav>
</header>
<main>
<h2>Welcome</h2>
<p>This is the primary content of the page.</p>
</main>
<aside>
<h2>Related</h2>
<p>Links, ads, or extra information go here.</p>
</aside>
<footer>
<p>© 2024 My Website</p>
</footer>
</body>
</html>Algumas regras que vale lembrar:
- Deve haver apenas um
<main>por página, e ele não pode estar aninhado dentro de<header>,<nav>,<aside>ou<footer>. <nav>é para blocos de navegação principais, não para qualquer grupo de links.<aside>é um conteúdo tangencial ao conteúdo principal — funciona tanto dentro de<main>quanto ao lado dele.
Este esqueleto ainda não tem colunas; tudo é empilhado verticalmente. O layout — transformar esses blocos em colunas — é uma tarefa do CSS, que adicionamos a seguir.
Um layout de duas colunas com Flexbox
O CSS Flexbox organiza itens ao longo de um único eixo — uma linha ou uma coluna — e é ideal para uma disposição de conteúdo com barra lateral. Envolva <main> e <aside> em um container flex; display: flex os coloca lado a lado, e flex controla como o espaço restante é distribuído.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Flexbox two-column layout</title>
<style>
body {
margin: 0;
font-family: Arial, sans-serif;
}
header, footer {
background: #2c3e50;
color: #fff;
padding: 16px;
}
.container {
display: flex;
gap: 16px;
padding: 16px;
}
main {
flex: 3; /* main takes 3 shares of the space */
background: #ecf0f1;
padding: 16px;
}
aside {
flex: 1; /* sidebar takes 1 share */
background: #dfe6e9;
padding: 16px;
}
</style>
</head>
<body>
<header><h1>My Website</h1></header>
<div class="container">
<main>
<h2>Main content</h2>
<p>This column grows to fill most of the width.</p>
</main>
<aside>
<h2>Sidebar</h2>
<p>A narrower second column.</p>
</aside>
</div>
<footer><p>© 2024 My Website</p></footer>
</body>
</html>flex: 3 e flex: 1 fazem as duas colunas dividirem a largura disponível em uma proporção de 3 para 1. Como são proporções, as colunas permanecem fluidas: elas encolhem e crescem com o viewport em vez de ficarem com um número fixo de pixels. Para empilhá-las em telas pequenas, envolva a regra em uma media query:
@media (max-width: 600px) {
.container {
flex-direction: column;
}
}Um layout completo com CSS Grid
O CSS Grid organiza itens em duas dimensões — linhas e colunas ao mesmo tempo — o que o torna a ferramenta mais adequada para um layout de página inteira. Com grid-template-areas você pode desenhar o layout em texto simples e atribuir cada elemento a uma região nomeada:
<!DOCTYPE html>
<html lang="en">
<head>
<title>CSS Grid page layout</title>
<style>
body {
margin: 0;
font-family: Arial, sans-serif;
}
.grid {
display: grid;
grid-template-columns: 1fr 3fr; /* sidebar : content */
grid-template-areas:
"header header"
"nav main"
"footer footer";
gap: 12px;
padding: 12px;
}
header { grid-area: header; background: #2c3e50; color: #fff; }
nav { grid-area: nav; background: #dfe6e9; }
main { grid-area: main; background: #ecf0f1; }
footer { grid-area: footer; background: #2c3e50; color: #fff; }
header, nav, main, footer { padding: 16px; }
</style>
</head>
<body>
<div class="grid">
<header><h1>My Website</h1></header>
<nav>Navigation</nav>
<main>
<h2>Main content</h2>
<p>The header and footer span both columns.</p>
</main>
<footer><p>© 2024 My Website</p></footer>
</div>
</body>
</html>A unidade fr significa "uma fração do espaço livre", portanto 1fr 3fr torna a coluna de conteúdo três vezes mais larga que a barra lateral — novamente, uma proporção fluida em vez de uma largura fixa. O mapa visual em grid-template-areas permite que o cabeçalho e o rodapé se estendam por ambas as colunas simplesmente repetindo seus nomes em uma linha.
Flexbox ou Grid — qual devo usar?
Ambos são modernos, bem suportados e frequentemente intercambiáveis, mas têm uma divisão natural de trabalho:
- Use Flexbox quando estiver organizando itens em uma direção — uma barra de navegação, uma barra de ferramentas, uma fileira de cartões ou uma divisão de conteúdo com barra lateral.
- Use Grid quando precisar de linhas e colunas juntas, como um layout de página inteira (cabeçalho / barra lateral / conteúdo / rodapé) ou uma galeria de imagens.
Um padrão comum e robusto é usar Grid para o esqueleto geral da página e Flexbox para os componentes menores dentro de cada região.
Layouts de largura fixa vs. fluidos
Os exemplos acima são fluidos (também chamados de líquidos): as larguras são expressas como proporções (flex: 3, 3fr) ou porcentagens, de modo que o layout se ajusta para preencher qualquer tela. Esta é a base do design responsivo.
Um layout de largura fixa fixa as regiões em um valor exato de pixels, por exemplo width: 960px ou flex: 0 0 240px para uma barra lateral. Larguras fixas oferecem controle preciso, mas não se adaptam — em um telefone estreito causam rolagem horizontal, e em um monitor largo deixam espaço vazio. Na prática, a maioria dos sites combina os dois: uma barra lateral de largura fixa ao lado de uma coluna de conteúdo fluida, geralmente limitada com max-width para que telas muito largas permaneçam legíveis.
A abordagem mais antiga para layouts de múltiplas colunas usava a propriedade CSS float junto com valores negativos de margin. Essa técnica é agora considerada legada — é frágil e difícil de manter. Use Flexbox ou Grid para layout; float hoje é principalmente para envolver texto ao redor de uma imagem.
Templates de layout prontos
Se você preferir começar com uma estrutura pronta, a galeria abaixo oferece layouts HTML para download — fixos, fluidos e híbridos, com duas ou três colunas. São uma referência útil, mas as técnicas modernas mostradas acima são a forma recomendada de construir novas páginas.
Duas colunas, menu à esquerda (template 01)
Três colunas em porcentagem (template 02)
Três colunas em porcentagem (template 03)
Três colunas em porcentagem (template 04)
Três colunas em porcentagem (template 05)
Três colunas em porcentagem (template 06)
Três colunas fixas (template 07)
Três colunas fixas (template 08)
Três colunas fixas (template 09)
Três colunas fixas (template 10)
Três colunas fixas (template 11)
Três colunas fixas (template 12)
Líquido, colunas secundárias de largura fixa (template 13)
Líquido, colunas secundárias de largura fixa (template 14)
Líquido, colunas secundárias de largura fixa (template 15)
Líquido, colunas secundárias de largura fixa (template 16)
Líquido, colunas secundárias de largura fixa (template 17)
Líquido, colunas secundárias de largura fixa (template 18)
Líquido, três colunas, larguras híbridas (template 19)
Líquido, três colunas, larguras híbridas (template 20)
Líquido, três colunas, larguras híbridas (template 21)
Líquido, três colunas, larguras híbridas (template 22)
Duas colunas líquidas, lateral fixa (template 23)
Duas colunas líquidas, lateral fixa (template 24)
- Duas colunas em porcentagem (template 25)
Duas colunas em porcentagem (template 26)
Uma coluna líquida e duas metades (template 27)
Uma coluna líquida e duas metades (template 28)
Duas colunas em porcentagem e uma maior (template 29)
Duas colunas em porcentagem e uma maior (template 30)
Duas colunas líquidas, lateral fixa e uma grande (template 31)
- Duas colunas líquidas, lateral fixa e uma grande (template 32)
Duas colunas fixas (template 33)
Duas colunas fixas (template 34)
Duas colunas fixas (template 35)
Duas colunas fixas (template 36)
Duas colunas fixas (template 37)
Duas colunas fixas (template 38)
Uma coluna fixa e duas metades (template 39)
Uma coluna fixa e duas metades (template 40)
Esses templates foram construídos com a técnica legada de CSS float e margin negativa. Você pode estudá-los para obter ideias, mas reconstrua a estrutura com as abordagens de Flexbox ou Grid mostradas acima para um resultado mais fácil de manter e responsivo por padrão.
Personalizando um template
Depois de escolher uma estrutura de que goste, aqui estão formas comuns de torná-la sua:
- Substitua o texto de exemplo e adicione suas próprias imagens.
- Ajuste a marcação semântica para corresponder ao seu conteúdo.
- Aprofunde a marcação com nosso tutorial de HTML.
- Reestilize o layout com nosso tutorial de CSS.
- Adicione interatividade com nosso tutorial de JavaScript.