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:

html<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:

css#wrapper {
  width: 1000px;
  margin: 30px auto;
  border: 1px solid black;
}

Nyní nastavme styly pro header a footer:

css#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:

css#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:

css* {
  box-sizing: border-box;
}

Nyní potřebujeme umístit obsah a sidebar do jedné řady. Uděláme to pomocí flexboxu:

css#container {
  display: flex;
}

Nastavme obsahu a sidebaru jejich šířku. Přitom součet jejich šírek musí být roven šířce wrapperu:

css#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:

css#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:

css#content {
  width: 780px;
  height: 700px;
}
#sidebar {
  width: 200px;
  margin-right: 20px;
}

Nyní přidejme obsahu a sidebaru zbývající styly:

css#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:

html<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>
css* {
  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;
}
Задание 1
Задание 2