Flexbox - exempel: Skillnad mellan sidversioner

Från Webbling
Hoppa till: navigering, sök
Rad 29: Rad 29:
</codepen>
</codepen>
[http://exempel.webbling.se/flexbox17.html Här] kan du se hur exemplet blir att se ut.
[http://exempel.webbling.se/flexbox17.html Här] kan du se hur exemplet blir att se ut.
 
<codepen pen="pJXebe" height="250" tab="result">
</codepen>
Ville vi bara justera i en ledd, kunde vi utelämnat motsvarande centrerings-CSS-egenskap.
Ville vi bara justera i en ledd, kunde vi utelämnat motsvarande centrerings-CSS-egenskap.



Versionen från 20 augusti 2015 kl. 13.56

Nu ska vi titta på hur man kan använda sig av flexbox för att skapa olika typer av layout.

Centrering

Att centrera saker har i många fall varit problematiskt i CSS. Med flexbox är det mycket lätt att centrera saker. Låt säga att vi vill centrera en text i en box. Vi vill centrera både horisontellt och vertikalt. Vår HTML ser ut så här:

See the Pen pJXebe by Patrik Grip-Jansson (@PGJ) on CodePen.

Vi behöver först slå igång flexbox för div-elementet, vilket man gör med display: flex;. Sen måste vi sätta såväl align-items och justify-content till center. Vår CSS blir att se ut som följer:

See the Pen pJXebe by Patrik Grip-Jansson (@PGJ) on CodePen.

Här kan du se hur exemplet blir att se ut.

See the Pen pJXebe by Patrik Grip-Jansson (@PGJ) on CodePen.

Ville vi bara justera i en ledd, kunde vi utelämnat motsvarande centrerings-CSS-egenskap.

Layout i kolumner

Som du kanske sett så bygger de flesta webbsajter på en layout där man har flera kolumner. Historiskt sett har det varit svårt att få till en bra kolumnlayout med HTML/CSS. Främst är det svårt att få till kolumner som har samma höjd. Med flexbox blir det dock lätt att få till en dylik layout. Vi provar att göra en layout med tre kolumner. På höger och vänster sida har smala kolumner och i mitten ar vi en bredare layout. För de smala kolumnerna använder vi oss av aside, som är HTML-kommandot för saker som hör till innehållet, fast som inte är central och superviktigt (ofta har man saker som reklam och navigation i dessa kolumner). Mittenkolumnen sätter vi med main eftersom det ska vara huvudinnehållet.

Så här skulle koden kunna att bli och se ut, vi börjar med HTML:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf8">
    <title>Kolumner</title>
  </head>
  <body>
    <aside class="left">
      <p>Vänster</p>
    </aside>
    <main>
      <p>Mitt</p>
    </main>
    <aside class="right">
      <p>Höger</p>
    </aside>
  </body>
</html>

Sen behöver vi lite CSS ocskå:

body {
  display: flex;
  min-height: 100%;
  align-items: stretch;
}

aside {
  flex-grow: 1;
  background-color: yellow;
}

main {
  flex-grow: 4;
  background-color: green;
}

Här kan du se hur en något expanderad version av exemplet blir att se ut.

Kolumner samt sid-huvud och -fot

Förutom en kolumnlayout har de flesta webbsajter även ett sidhuvud och en sidfot. Det finns lite olika sätt på vilket vi kan lösa detta. Ett enkelt sätt är att kombinera två flexboxar, en kolumn- och en rad-box. Så här kan HTML-koden se ut:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf8">
    <title>Kolumner</title>
  </head>
  <body>
    <header>
      <h1>Sidhuvud</h1>
    </header>
    <div>
      <aside class="left">
        <p>Vänster</p>
      </aside>
      <main>
        <p>Mitt</p>
      </main>
      <aside class="right">
        <p>Höger</p>
      </aside>
    </div>
    <footer>
      <p>Sidfot</p>
    </footer>
  </body>
</html>

CSS:en för att få till det hela blir att se ut så här:

   body {
     min-height: 100vh;
     display: flex;
     flex-direction: column;
     align-items: stretch;
   }

   header {
     flex-grow: 1;
   }

   div {
     flex-grow: 20;
     display: flex;
     align-items: stretch;
   }

   div {
     flex-grow: 20;
     display: flex;
     align-items: stretch;
   }

   aside {
     flex-grow: 1;
   }

   main {
     flex-grow: 4;
   }

   footer {
     flex-grow: 1;
  }

Här kan du se hur en något förbättrad version av exemplet blir att se ut.