Layout de duas colunas para site em CSS
Vamos criar um layout de duas colunas do seguinte tipo:
Para começar, vamos criar a estrutura básica da página:
<div id="wrapper">
<div id="header">
header
</div>
<div id="container">
<div id="content">
content
</div>
<div id="sidebar">
sidebar
</div>
</div>
<div id="footer">
footer
</div>
</div>
Agora vamos aplicar estilos ao wrapper, alinhando-o ao centro da tela:
#wrapper {
width: 1000px;
margin: 30px auto;
border: 1px solid black;
}
Agora vamos definir os estilos do header e do footer:
#header {
height: 200px;
border: 1px solid black;
}
#footer {
height: 200px;
border: 1px solid black;
}
Como você pode ver, estamos definindo uma altura para o header e o footer. Fazemos isso porque, no nosso esquema, eles não têm conteúdo. Se houvesse conteúdo, não seria necessário definir a altura dos blocos - ela seria formada pelo seu conteúdo.
Note também que não estamos definindo a largura para eles. Isso acontece porque o header e o footer são elementos de bloco e sua largura será automaticamente igual à largura do wrapper.
Vamos agora adicionar padding a eles, para
que o texto não fique colado nas bordas:
#header {
height: 200px;
padding: 20px;
border: 1px solid black;
}
#footer {
height: 200px;
padding: 20px;
border: 1px solid black;
}
No entanto, a presença do padding afetará negativamente
os tamanhos dos blocos - eles ficarão maiores do que
o especificado. Vamos mudar o comportamento de todos os blocos
para que o padding e as bordas não expandam
nossos blocos:
* {
box-sizing: border-box;
}
Agora precisamos colocar o conteúdo e a sidebar na mesma linha. Vamos fazer isso usando flexbox:
#container {
display: flex;
}
Vamos especificar a largura do conteúdo e da sidebar. A soma de suas larguras deve ser igual à largura do wrapper:
#content {
width: 800px;
}
#sidebar {
width: 200px;
}
Suponha que queremos criar um espaçamento entre a sidebar
e o conteúdo. Neste caso, precisamos aplicar
um margin à sidebar. Com isso, teremos que
"arrancar" a largura desse margin de algum lugar.
Vamos "arrancar" do conteúdo, reduzindo correspondentemente
sua largura:
#content {
width: 780px;
}
#sidebar {
width: 200px;
margin-right: 20px;
}
Agora vamos adicionar altura, já que nossos elementos não contêm conteúdo. É suficiente adicionar altura apenas a um elemento, pois o segundo elemento flex se ajustará em altura (por quê?). Vamos definir a altura para o conteúdo:
#content {
width: 780px;
height: 700px;
}
#sidebar {
width: 200px;
margin-right: 20px;
}
Vamos adicionar os estilos restantes ao conteúdo e à sidebar:
#content {
width: 780px;
height: 700px;
padding: 20px;
border: 1px solid black;
}
#sidebar {
width: 200px;
margin-right: 20px;
padding: 20px;
border: 1px solid black;
}
Pronto, nosso layout está finalizado. Vamos juntar todo o código:
<div id="wrapper">
<div id="header">
header
</div>
<div id="container">
<div id="sidebar">
sidebar
</div>
<div id="content">
content
</div>
</div>
<div id="footer">
footer
</div>
</div>
* {
box-sizing: border-box;
}
#wrapper {
width: 1000px;
margin: 30px auto;
border: 1px solid black;
}
#header {
height: 200px;
padding: 20px;
border: 1px solid black;
}
#container {
display: flex;
}
#content {
width: 780px;
height: 700px;
padding: 20px;
border: 1px solid black;
}
#sidebar {
width: 200px;
margin-right: 20px;
padding: 20px;
border: 1px solid black;
}
#footer {
height: 200px;
padding: 20px;
border: 1px solid black;
}