Responsiv design

Mobile first.

Webben bestÄr idag av sÄ otroligt mÄnga olika enheter(engelska devices) att det inte lÀngre Àr hÄllbart att bara skapa en sida som fungerar för desktop-upplösning. Responsiv webbdesign (engelska Responsive Web Design, RWD) Àr ett koncept som handlar om att skapa en praxis för utvecklingen av webbsidor som fungerar pÄ mÄnga olika enheter. DÀr det som skiljer enheterna Àr skÀrmstorleken och upplösningen.

Mediaregler

Det frÀmsta verktyget för att skapa en responsiv design Àr att anvÀnda media regler(engelska och CSS, media queries). Media-regler Àr en del av CSS som gör det möjligt att ange olika regler baserat pÄ enhetens storlek och typ.

Syntax

@media MEDIATYPE and (condition: breakpoint) {
  // CSS regler
}

Media typer

  • all - för alla olika former av media

  • print - enbart för skrivare

  • screen - för skĂ€rmar, det kan vara dator eller telefoner och sĂ„ vidare

  • speech - för skĂ€rmlĂ€sare

Breakpoints

HÀr nedan följer nÄgra exempel pÄ vanliga brytpunkter(engelska breakpoints) baserat pÄ pixel-bredd.

  • 320px — 480px: Mobile devices

  • 481px — 768px: iPads, Tablets

  • 769px — 1024px: Small screens, laptops

  • 1025px — 1200px: Desktops, large screens

  • 1201px and more —  Extra large screens, TV

Det populÀra ramverket Bootstrap anvÀnder följande dimensioner för att specificera sina breakpoints.

  • X-Small < 576px

  • Small ≄ 576px

  • Medium ≄ 768px

  • Large ≄ 992px

  • Extra large ≄ 1200px

  • Extra extra large ≄ 1400px

Meta viewport

En responsiv webbsida behöver följande kod i head elementet. Detta berÀttar berÀttar för webblÀsaren hur dokumentet ska skalas och det behövs för att sidan ska fungera som menat.

<meta name="viewport" content="width=device-width,initial-scale=1">

Responsiva bilder

Var noga med att anpassa bildstorleken genom att redigera den. CSS fÄr aldrig ersÀtta anpassningen av bildens upplösning. Den anpassade bilden behöver sedan CSS-regler för att fÄ den att fungera pÄ sidan.

img {
  max-width: 100%;
} 

Responsiv typografi

Textstorlek angiven i procent Àr inget som rekommenderas eller fungerar sÀrskilt bra. IstÀllet sÄ bör du skapa media-regler som byter textens storlek vid vissa breakpoints. HÀr Àr ledordet prova dig fram, typografi pÄ webben Àr komplext.

Exempel

En exempel-sida designad utifrÄn devisen mobil först (engelska mobile first). HÀr har webblÀsarens utvecklarverktyg anvÀnts för att skala om fönstret för en mobil upplösning.

Mobil 340px

Sidan ger 100 för accessibility score i Lighthouse med bra performance. FunktionsmÀssigt fungerar det bra i mobil lÀget. Eftersom sidan Àr designad för mobile först sÄ Àr det att förvÀnta. NÀsta steg blir att anpassa den för andra enheter och skÀrmstorlekar.

index.html
<!DOCTYPE html>
<html lang="en" class="h-100">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>RWD</title>
  <link rel="stylesheet" href="style.css">
</head>
<body class="h-100 flex flex-column">
  <nav>
    <div class="navbar container flex align-center">
      <a class="brand" href="#">Lorem</a>
    </div>
  </nav>
  <main class="container">
    <header class="w-100">
      <h1>Lorem ipsum...</h1>
      <p class="lead">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Aliquam perferendis, quo minima reiciendis quibusdam provident id itaque aut excepturi deserunt quia eveniet exercitationem unde. At, sed! Eveniet obcaecati quia quas!</p>
    </header>
    <section>
      <h2>Lorem ipsum dolor sit...</h2>
      <img src="https://picsum.photos/500/300" alt="Random picture">
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta, dolore quidem. Incidunt minus, fuga ex aut vero consectetur voluptatum officiis reprehenderit repellat harum nemo nobis deserunt inventore libero, culpa enim?</p>
      <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Voluptates neque nobis mollitia in. Odio voluptas eos dolorum, incidunt odit porro, quod, placeat eum numquam fugit id quos a aut sit?</p>
      <h2>Lorem, ipsum dolor...</h2>
      <img src="https://picsum.photos/600/600" alt="Random picture">
      <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Porro cumque commodi amet fuga sed corporis praesentium, magni, inventore harum illo libero excepturi, tempora mollitia possimus eveniet rerum nulla! Maxime, ipsam!</p>
      <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Tenetur aliquam cupiditate exercitationem at sed ipsa, repudiandae est harum laboriosam nam nemo excepturi! Vero quisquam, ea officia atque molestiae cupiditate cum.</p>  
    </section>
  </main>
  <footer>
    <p class="text-center">
      <a href="#">Responsive Web Design</a>
    </p>
    <p class="text-center">© RWD</p>
  </footer>
</body>
</html>

Desktop 768px

NÀsta steg Àr att öka skÀrmens storlek och studera resultatet. Det mesta fungerar helt okej, men det Àr tydligt att bildernas upplösning och ratio gör att linjeringen pÄ sidans högra sida blir vÀldigt hackig. Detta Àr nÄgot som förstÀrks mer och mer desto bredare sidan blir. Sidans marginal Àr nu vÀldigt liten och radlÀngden i lÀngsta laget (bör vara runt 40-75 tecken).

Detta blir alltsÄ det första fokuset att arbeta med. Media regler för marginal, text och bilder. Ingen Àndring ska göras i HTML koden.

style.css
/* Small devices (tablets, 768px and up) */
@media screen and (min-width: 768px) {
  body {
    font-size: 1.2rem;
  }
  h1 {
    font-size: 3rem;
  }
  h2 {
    font-size: 2rem;
  }
  .lead {
    font-size: 1.4rem;
  }
  .container {
    max-width: 540px;
  }
}

Bildstorleken ÄtgÀrdas med att sÀtta en max-width pÄ innehÄllets container klass. InnehÄllet centreras och lÀsbarheten pÄ texten bestÄr. Centreringen och fyllnaden sköts av klassens grundegenskaper. Textens storlek justeras för att vara nÄgot större.

Desktop 1200px

Som skÀrmdumpen visar sÄ Àr nu sidan svÄrlÀst och ful. Det Àr vÀldigt tydligt att den mobila designen inte lÀmpar sig pÄ en dator med webblÀsaren i helskÀrm. Med reglerna pÄ plats för medium-stora skÀrmar sÄ förbÀttras sidans utseende nÄgot, men det kan fortfarande förbÀttras. Det som kanske sticker ut mest Àr att den blir lite för smal och att bilderna inte passar.

Vi kan prova att ÄtgÀrda detta med float pÄ bilderna, men ett annat alternativ Àr att fördela texten i tvÄ spalter. Prova det ena eller det andra.

style.css
/* Large devices (large desktops, 1200px and up) */
@media screen and (min-width: 1200px) {
  .container {
    max-width: 960px;
  }
  section {
    column-count: 2;
  }
  /* img {
    float: right;
    margin: 1rem;
  } */
}

Slutligen uppmanas du att testa sidan, justera storlekar och marginaler tills det ser bra ut och kÀnns rÀtt. Det kan behövas fler media-regler för att det ska bli riktigt bra.

Exempelsidans navigation Àr vÀldigt enkel dÄ den bara innehÄller en brand lÀnk. Just navigationen Àr ett stort omrÄde inom mobil first dÄ navigation ofta tar mycket plats. Detta har lett till ett otal olika menytyper, mest kÀnd Àr hamburgaren.

Kolla mer kring navigationen pÄ övnings-sidan, dÀr finns det tre olika exempel som du kan anvÀnda och anpassa.

Kort

Kort(engelska cards) Àr vanligt förekommande i layout-sammanhang pÄ webben. Ett kort Àr en flexibel container för alla typer av innehÄll. Kortet gÄr att ÄteranvÀnda och det visas olika beroende pÄ skÀrmens storlek.

Ofta samlas flera kort i en behÄllare som bestÀmmer dess layout. Sedan anvÀnds flexbox för att justera layouten med media-regler.

<div class="card-group">
  <div class="card">
    <img src="https://picsum.photos/500/300" alt="Random picture">
    <h3>Lorem ipsum</h3>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Veniam fuga reiciendis velit non est minus, iusto, ipsum ex harum maiores nisi id consectetur repellendus natus reprehenderit error. Animi, iste? Maxime!</p>
  </div>
  <div class="card">
    <img src="https://picsum.photos/500/300" alt="Random picture">
    <h3>Lorem ipsum</h3>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Veniam fuga reiciendis velit non est minus, iusto, ipsum ex harum maiores nisi id consectetur repellendus natus reprehenderit error. Animi, iste? Maxime!</p>
  </div>
  <div class="card">
    <img src="https://picsum.photos/500/300" alt="Random picture">
    <h3>Lorem ipsum</h3>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Veniam fuga reiciendis velit non est minus, iusto, ipsum ex harum maiores nisi id consectetur repellendus natus reprehenderit error. Animi, iste? Maxime!</p>
  </div>  
</div>

Last updated