Dlaždicové rozložení pomocí flexboxů v CSS

Pojďme se nyní naučit vytvářet dlaždicové rozložení pomocí flexboxů. Nejprve uspořádejme flexboxy do několika řad, po třech blocích v řadě.

K tomu nastavme rodiči flexboxů šířku na 300px a flex-wrap na hodnotu wrap, a potomkům šířku na 100px:

html<div class="parent">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="child">5</div>
  <div class="child">6</div>
  <div class="child">7</div>
  <div class="child">8</div>
  <div class="child">9</div>
</div>
css.parent {
  display: flex;
  flex-wrap: wrap;
  width: 300px;
  border: 1px solid red;
}
.child {
  box-sizing: border-box;
  width: 100px;
  height: 100px;
  border: 1px solid green;
}

Результат:

Nyní přidejme mezeru mezi našimi bloky vodorovně. K tomu zvětšeme šířku rodiče, abychom vytvořili dodatečný prostor pro odsazení.

Protože máme tři bloky v řadě, znamená to, že mezi nimi jsou dvě mezery. Řekněme, že chceme, aby každá mezera měla šířku 10px. Vyplývá z toho, že šířku rodiče je třeba zvětšit o 20px, tedy nastavit ne 300px, ale 320px.

Nyní nastavme rodiči bloků justify-content na hodnotu space-between a dosáhneme požadované mezery mezi bloky:

html<div class="parent">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="child">5</div>
  <div class="child">6</div>
  <div class="child">7</div>
  <div class="child">8</div>
  <div class="child">9</div>
</div>
css.parent {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  width: 320px;
  border: 1px solid red;
}
.child {
  box-sizing: border-box;
  width: 100px;
  height: 100px;
  border: 1px solid green;
}

Результат:

Nyní přidejme stejnou mezeru mezi bloky i svisle. K tomu lze nastavit vlastnost align-content na hodnotu space-between.

K tomu je však třeba nastavit rodiči výšku, jinak align-content nebude fungovat. Nastavme výšku na 320px. V tomto případě se nám vejdou právě tři řady bloků o výšce 100px plus dvě mezery mezi řadami o 10px.

Spusťme:

html<div class="parent">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="child">5</div>
  <div class="child">6</div>
  <div class="child">7</div>
  <div class="child">8</div>
  <div class="child">9</div>
</div>
css.parent {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-content: space-between;
  flex-wrap: wrap;
  width: 320px;
  height: 320px;
  border: 1px solid red;
}
.child {
  box-sizing: border-box;
  width: 100px;
  height: 100px;
  border: 1px solid green;
}

Результат:

Vše funguje skvěle, ale existují některé problémy, které rozebereme v následující lekci.