web/06

Lay-Out Technieken

elementen naast / onder elkaar plaatsen

Float layout

Layout technieken

Float layout

Vanaf 1999 was "floating" de manier tot om een layout te bepalen voor webpagina's.

 

(Nu is dit echter nog maar voor enkele use-cases in gebruik)

Float layout

Float is een CSS property die letterlijk vertaald -- drijven -- betekent.

Float layout

<img class="first-image" src="img.png" alt="">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean volutpat eleifend augue. Aliquam fermentum fringilla pretium. Phasellus rutrum nibh sed orci rutrum varius. Sed mauris felis, viverra consectetur maximus non, dignissim sit amet ligula. Aliquam tempus sodales neque nec rhoncus. Ut eleifend interdum vehicula. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut ante leo, blandit eu auctor vel, dapibus vitae purus. Pellentesque vulputate neque sit amet felis feugiat, congue egestas nunc ullamcorper. Nulla elementum arcu mi, id scelerisque lectus consequat a. Nam a ornare neque, eu porttitor nunc. Etiam mattis augue nibh, id aliquam libero varius id. Sed porta lobortis facilisis. Sed hendrerit lobortis varius. Ut ligula massa, laoreet vel gravida id, laoreet non sem. Nullam volutpat, leo at tempor feugiat, elit lorem maximus orci, in varius velit justo sit amet lacus. Nunc pulvinar erat sed malesuada consequat. Phasellus ultricies ac mi id efficitur. Morbi egestas hendrerit est nec semper. Proin id dapibus libero. Nam ullamcorper imperdiet tincidunt. Ut metus diam, auctor non nibh at, ullamcorper elementum nisl. Vestibulum arcu ex, tincidunt vitae turpis sit amet, volutpat dignissim nisi. Praesent rhoncus nibh eget lorem condimentum tristique. Cras lobortis pulvinar interdum. In tincidunt ornare quam, a malesuada felis porttitor eget. Etiam vel metus quam. Donec lobortis iaculis molestie. Proin euismod scelerisque sollicitudin. Proin non nunc enim. Cras aliquam velit lobortis lobortis tristique. Etiam scelerisque, massa eu pellentesque ullamcorper, mauris dui condimentum mauris, sed auctor orci nisi nec lacus. Donec condimentum pretium neque id consequat. Aliquam commodo ullamcorper ipsum, quis feugiat dui interdum id. Pellentesque lacinia semper massa, et porttitor metus luctus congue. Phasellus auctor, massa vitae lacinia pulvinar, justo sapien ultrices dolor, ac molestie nibh justo vel orci. Nunc et lorem sed nisi cursus semper vel tincidunt lectus. Sed molestie ipsum nec dolor pharetra, id interdum quam accumsan. Ut fringilla interdum elit, vel porta erat varius semper. Cras tempor et lectus nec ultrices. Pellentesque fermentum mattis ipsum ac iaculis. Vestibulum ullamcorper sem non diam vestibulum aliquam. Praesent quis fermentum purus. Praesent ut lectus et ante egestas commodo. Sed eu tortor eros. Maecenas molestie, ligula in pharetra ultrices, nunc leo dapibus sapien, sit amet auctor velit felis non erat. Nulla dolor velit, rhoncus sit amet elit ut, fermentum rhoncus libero. Nulla erat ligula, aliquet vehicula sagittis id, consequat eu nisl. Nullam vehicula sapien et magna aliquam scelerisque. Donec rutrum commodo massa lobortis sodales. Ut a dignissim eros. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla facilisi. Quisque consectetur velit id mi consectetur suscipit. Nulla mauris neque, sollicitudin ac quam ac, lobortis placerat nisl. Morbi laoreet nulla ac lectus dictum, non finibus nulla ultrices. Nulla facilisi. Suspendisse non mi nibh.</p>
<img class="second-image" src="img.png" alt="">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean volutpat eleifend augue. Aliquam fermentum fringilla pretium. Phasellus rutrum nibh sed orci rutrum varius. Sed mauris felis, viverra consectetur maximus non, dignissim sit amet ligula. Aliquam tempus sodales neque nec rhoncus. Ut eleifend interdum vehicula. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut ante leo, blandit eu auctor vel, dapibus vitae purus. Pellentesque vulputate neque sit amet felis feugiat, congue egestas nunc ullamcorper. Nulla elementum arcu mi, id scelerisque lectus consequat a. Nam a ornare neque, eu porttitor nunc. Etiam mattis augue nibh, id aliquam libero varius id. Sed porta lobortis facilisis. Sed hendrerit lobortis varius. Ut ligula massa, laoreet vel gravida id, laoreet non sem. Nullam volutpat, leo at tempor feugiat, elit lorem maximus orci, in varius velit justo sit amet lacus. Nunc pulvinar erat sed malesuada consequat. Phasellus ultricies ac mi id efficitur. Morbi egestas hendrerit est nec semper. Proin id dapibus libero. Nam ullamcorper imperdiet tincidunt. Ut metus diam, auctor non nibh at, ullamcorper elementum nisl. Vestibulum arcu ex, tincidunt vitae turpis sit amet, volutpat dignissim nisi. Praesent rhoncus nibh eget lorem condimentum tristique. Cras lobortis pulvinar interdum. In tincidunt ornare quam, a malesuada felis porttitor eget. Etiam vel metus quam. Donec lobortis iaculis molestie. Proin euismod scelerisque sollicitudin. Proin non nunc enim. Cras aliquam velit lobortis lobortis tristique. Etiam scelerisque, massa eu pellentesque ullamcorper, mauris dui condimentum mauris, sed auctor orci nisi nec lacus. Donec condimentum pretium neque id consequat. Aliquam commodo ullamcorper ipsum, quis feugiat dui interdum id. Pellentesque lacinia semper massa, et porttitor metus luctus congue. Phasellus auctor, massa vitae lacinia pulvinar, justo sapien ultrices dolor, ac molestie nibh justo vel orci. Nunc et lorem sed nisi cursus semper vel tincidunt lectus. Sed molestie ipsum nec dolor pharetra, id interdum quam accumsan. Ut fringilla interdum elit, vel porta erat varius semper. Cras tempor et lectus nec ultrices. Pellentesque fermentum mattis ipsum ac iaculis. Vestibulum ullamcorper sem non diam vestibulum aliquam. Praesent quis fermentum purus. Praesent ut lectus et ante egestas commodo. Sed eu tortor eros. Maecenas molestie, ligula in pharetra ultrices, nunc leo dapibus sapien, sit amet auctor velit felis non erat. Nulla dolor velit, rhoncus sit amet elit ut, fermentum rhoncus libero. Nulla erat ligula, aliquet vehicula sagittis id, consequat eu nisl. Nullam vehicula sapien et magna aliquam scelerisque. Donec rutrum commodo massa lobortis sodales. Ut a dignissim eros. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla facilisi. Quisque consectetur velit id mi consectetur suscipit. Nulla mauris neque, sollicitudin ac quam ac, lobortis placerat nisl. Morbi laoreet nulla ac lectus dictum, non finibus nulla ultrices. Nulla facilisi. Suspendisse non mi nibh.</p>
p {
  display: inline;
}

.first-image {
  float: left;
}

.second-image {
  float: right;
}

Float layout

Gebruik "floats" enkel voor deze vorm van layout: een layout waar een afbeelding letterlijk doorheen de tekst mag drijven.

 

Gebruik een max width (van bv: 40%) voor de afbeeldingen zodat tekst niet abrupt onderbroken wordt op mobiel!

Float layout

Oefening @Campus

A winter night in the forest II - Float

Flexbox layout

Layout technieken

Flexbox layout

Flexbox werd uitgevonden om flexibel ruimte te verdelen tussen children in een container -- zelf wanneer hun grootte ongekend en dynamisch is.

 

Tot nu toe hebben we nog niet gezien hoe we elementen naast elkaar kunnen plaatsen.

Flexbox layout

<div class="container">
  <div class="item item--first">...</div>
  <div class="item item--second">...</div>
  <div class="item item--third">...</div>
</div>
.container {
  background: purple;
}

.item {
  background: orange;
  margin: 1rem;
  height: 4rem;
  width: 100%;
}

Zonder flexbox gaat alles onder elkaar staan

Flexbox layout

.container {
  background: purple;
  display: flex;
}

.item {
  background: orange;
  heigth: 3rem;
  width: 100%;
  margin: 1rem;
  ...
}

Flexbox layout

Flexbox layout

.container {
  background: purple;
  display: flex;
  width: 40rem;
}

.item {
  background: orange;
  heigth: 3rem;
  width: 10rem;
  margin: 1rem;
  ...
}

Flexbox layout

.container {
  background: purple;
  display: flex;
  justify-content: flex-end;
  width: 40rem;
}

.item {
  background: orange;
  heigth: 3rem;
  width: 10rem;
  margin: 1rem;
  ...
}

Justify content 🤩

 

Flexbox layout

.container {
  background: purple;
  display: flex;
  justify-content: center;
  width: 40rem;
}

.item {
  background: orange;
  heigth: 3rem;
  width: 10rem;
  margin: 1rem;
  ...
}

Justify content 🤩

 

Flexbox layout

.container {
  background: purple;
  display: flex;
  justify-content: space-between;
  width: 40rem;
}

.item {
  background: orange;
  heigth: 3rem;
  width: 10rem;
  margin: 1rem;
  ...
}

Justify content 🤩

 

Flexbox layout

.container {
  background: purple;
  display: flex;
  justify-content: space-evenly;
  width: 40rem;
}

.item {
  background: orange;
  heigth: 3rem;
  width: 10rem;
  margin: 1rem;
  ...
}

Justify content 🤩

 

Flexbox layout

Flexbox layout

.container {
  background: purple;
  display: flex;
  flex-wrap: wrap;
  width: 40rem;
}

.item {
  background: orange;
  heigth: 3rem;
  width: 10rem;
  margin: 1rem;
  ...
}

Een flexbox container zal altijd alle items naast elkaar blijven tonen. Maar dit gedrag kunnen we aanpassen.

Flexbox layout

Flexbox layout

.container {
  display: flex;
  align-items: flex-start;
}

.item {
  heigth: 3rem;
}

.item--second {
  height: 4rem;
}

.item--third {
  height: 2rem;
}

Flexbox layout

.container {
  display: flex;
  align-items: flex-end;
}

.item {
  heigth: 3rem;
}

.item--second {
  height: 4rem;
}

.item--third {
  height: 2rem;
}

Flexbox layout

.container {
  display: flex;
  align-items: center;
}

.item {
  heigth: 3rem;
}

.item--second {
  height: 4rem;
}

.item--third {
  height: 2rem;
}

Flexbox layout

.container {
  display: flex;
  align-items: stretch;
}

.item {
  heigth: 3rem;
}

.item--second {
  height: 4rem;
}

.item--third {
  height: 2rem;
}

Flexbox layout

.container {
  display: flex;
  align-items: baseline;
}

.item {
  heigth: 3rem;
}

.item--second {
  height: 4rem;
}

.item--third {
  height: 2rem;
}

Flexbox layout

Flexbox layout

.container {
  display: flex;
  /* default */
  flex-direction: row;
}

.item {
  ...
}

In alle bovenstaande slides, gaan we uit van een logische volgorde: links naar rechts!

Flexbox layout

.container {
  display: flex;
  /* default */
  flex-direction: row-reverse;
}

.item {
  ...
}

Maar dit kunnen we omdraaien ook!

Flexbox layout

.container {
  display: flex;
  /* default */
  flex-direction: column;
}

.item {
  ...
}

Maar in plaats dat we flexbox direction op de horizontale as houden, kunnen we dit ook op de verticale as plaatsen

Flexbox layout

.container {
  display: flex;
  /* default */
  flex-direction: column-reverse;
}

.item {
  ...
}

En zelf hier kunnen we ook de omgekeerde versie kiezen

Flexbox layout

Flexbox layout

Eventjes weer resetten: naast een hele hoop opties dat we kunnen definieren op

de parent, hebben we ook nog opties op de children!

Flexbox layout

.container {
  display: flex;
  justify-content: space-evenly;
  width: 40rem;
}

.item {
  margin: 1rem;
  width: 10rem;
  /* default */
  flex-basis: auto;
}

Flex-basis legt de norm vast van de breedte van het element voor dat de overtollige ruimte verdeeld wordt.

Flexbox layout

Flexbox layout

.container {
  display: flex;
  width: 40rem;
}

.item {
  margin: 1rem;
  width: 10rem;
  /* default */
  flex-grow: 0;
}

.item--second {
  flex-grow: 1;
}

Flex-grow bepaalt als het element mag groeien.

Flexbox layout

Flexbox layout

.container {
  display: flex;
  width: 40rem;
}

.item {
  margin: 1rem;
  width: 20rem;
  /* default */
  flex-shrink: 1;
}

.item--second {
  flex-shrink: 0;
}

Flex-shrink bepaalt als het element mag krimpen.

Flexbox layout

Flexbox layout

.container {
  display: flex;
  width: 40rem;
}

.item {
  margin: 1rem;
  width: 10rem;
  /* defaults */
  flex-grow: 0;
  flex-shrink: 1;
  flex-basis: auto;
  flex: 0 1 auto;
}

Flex combineert flex-grow, flex-shrink en flex-basis in 1 property.

Flexbox layout

Flexbox layout

.container {
  display: flex;
  width: 40rem;
}

.item {
  margin: 1rem;
  width: 10rem;
  /* defaults */
  order: 0;
}

.item--third {
  order: -1;
}

Order bepaald op welke positie een element komt te staan.

Flexbox layout

Tip:

Een volledig overzicht is te vinden op dit artikel van CSS-tricks

Oefening @Campus

Flexbox Froggy

Flexy menu

Mario V - Flexbox

 

Opdracht @home

Nesting flexboxes

My avocado project

 

Grid

Layout technieken

Grid

Grid wordt niet gegeven in dit vak maar je kan hier wel de properties zelf ontdekken.

 

Grid wordt vooral gebruikt voor wanneer je vastzit met flexbox, en een globale 2-dimensionele layout wilt voorzien.