Schéma dvousloupcového layoutu webu v CSS
Pojďme vytvořit dvousloupcový layout následujícího druhu:
Nejprve vytvoříme základní strukturu stránky:
<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>
Nyní přiřadíme wrapperu styly, zarovnáme jej na střed obrazovky:
#wrapper {
width: 1000px;
margin: 30px auto;
border: 1px solid black;
}
Nyní nastavme styly pro header a footer:
#header {
height: 200px;
border: 1px solid black;
}
#footer {
height: 200px;
border: 1px solid black;
}
Jak vidíte, nastavujeme headeru a footeru výšku. Děláme to proto, že v našem schématu nemají žádný obsah. Pokud by obsah měly, výšku bychom blokům nastavovat neměli - bude se tvořit jejich obsahem.
Všimněte si také, že jsme jim nenastavili šířku. Děje se tak proto, že header a footer jsou blokové elementy a jejich šířka bude automaticky rovna šířce wrapperu.
Nyní jim nastavme padding, aby
se text nelepil k okrajům:
#header {
height: 200px;
padding: 20px;
border: 1px solid black;
}
#footer {
height: 200px;
padding: 20px;
border: 1px solid black;
}
Přítomnost paddingu však špatně ovlivní
velikosti bloků - stanou se většími, než
je uvedeno. Změňme chování všech bloků
tak, aby padding a ohraničení nerozšiřovaly
naše bloky:
* {
box-sizing: border-box;
}
Nyní potřebujeme umístit obsah a sidebar do jedné řady. Uděláme to pomocí flexboxu:
#container {
display: flex;
}
Nastavme obsahu a sidebaru jejich šířku. Přitom součet jejich šírek musí být roven šířce wrapperu:
#content {
width: 800px;
}
#sidebar {
width: 200px;
}
Řekněme, že chceme vytvořit mezeru mezi sidebarem
a obsahem. V tomto případě je sidebaru potřeba
nastavit margin. Zároveň budeme muset
někomu ubrat šířku pro tento margin.
Uberme od obsahu, podle toho snižme
jeho šířku:
#content {
width: 780px;
}
#sidebar {
width: 200px;
margin-right: 20px;
}
Nyní přidejme výšku, protože naše elementy neobsahují obsah. Stačí přidat výšku pouze jednomu elementu, protože druhý flex element se přizpůsobí výšce (proč?). Nastavme výšku obsahu:
#content {
width: 780px;
height: 700px;
}
#sidebar {
width: 200px;
margin-right: 20px;
}
Nyní přidejme obsahu a sidebaru zbývající styly:
#content {
width: 780px;
height: 700px;
padding: 20px;
border: 1px solid black;
}
#sidebar {
width: 200px;
margin-right: 20px;
padding: 20px;
border: 1px solid black;
}
Hotovo, náš layout je připraven. Shrňme celý kód dohromady:
<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;
}