Websites met stijl

23. Responsive webdesign

In dit hoofdstuk

Wat is responsive webdesign?

Responsive webdesign houdt in dat je de website zó ontwerpt dat die er goed uitziet op grote schermen (laptops, desktops) én kleine schermen (mobieltjes).

Als je je website in de browser bekijkt en dan het venster kleiner maakt zie je dat de website aanvankelijk prima te bekijken blijft. Maar vanaf een breedte van zo ongeveer 700px worden de afbeeldingen rechts wat klein, en bij een breedte van minder dan ca 450px ziet het er niet meer uit.
Zie ook de figuren 1 (900px breed: prima) en 2 (320px breed: een troep) hieronder.

Opmerkingen

figuur 1: scherm 900px breed

figuur 2: scherm 320px breed, niet responsive
figuur 3: scherm 320px breed, responsive

We gaan in het volgende hoofdstuk het stijlblad uitbreiden, zodat de website er op kleine schermen uit ziet als figuur 3.
Op grote schermen blijft de website eruitzien als figuur 1. Dat lijkt op magie, toch?

Het toverwoord is media query of media regel. Hieronder gaan we daarmee experimenteren.
Daarna maken we in het volgende hoofdstuk de website responsive, ook voor kleine schermen.

Een media query

Een media query (media regel) ziet er zó uit: figuur 4 @media screen and (max-width: 800px) { /* hier komt opmaak */ }

Het voorbeeld van figuur 5 laat zien hoe @media in de praktijk werkt.

figuur 5 170article {
171background-color: red;
172}
173
174@media screen and(max-width: 800px;) {
175
176article {
177background-color: green;
178}
179
180}

Toelichting

Het resultaat: de achtergrondkleur van de article elementen is rood voor grote schermen en groen voor schermen met een maximale breedte van 800px.

Probeer dit maar als volgt uit:

Natuurlijk is dit een onzinnig voorbeeld, maar het gaat hier om het principe.

De naam media query

Misschien vraag je je af waarom het woord media in de naam media query staat.

Dat is omdat een media query oorspronkelijk bedoeld was voor een aangepaste opmaak voor bepaalde media. Zo kan je bijvoorbeeld met @media print een afwijkende opmaak voor afdrukken opgeven. Denk aan het weglaten van een donkere achtergrond.

Sinds versie 3 van CSS is daar dus de mogelijkheid van queries voor verschillende schermgrootten bijgekomen.

Aanpak

Responsive design begint met het gebruik van afmetingen in procenten in plaats van pixels. Daarmee krimpen en rekken de elementen mee met de grootte van het venster.

Meestal is dat niet voldoende. Dan moet je daarnaast gebruik maken van media queries. Daarbij zijn twee manieren van aanpak:

Methode 1

Methode 2

Volgens deskundigen is de tweede methode beter om volgende redenen:

Voor kleine websites als die van Terschelling maakt het allemaal weinig uit.

Verschillende media queries in een stijlblad

Soms is één media query niet voldoende, dan heb je een website voor grote schermen gemaakt en wil je een aangepaste opmaak voor middelgrote schermen en een nog weer wat andere opmaak voor kleine schermen. Dan moet je twee (of meer) media queries maken. We zullen dat ook voor de website van Terschelling doen.

Om dat een beetje in de vingers te krijgen gaan we enkele experimentjes uitvoeren.

Experiment 1

Maak daartoe eerst de regels 170-180 van je stijlblad leeg en voeg dan de regels van figuur 6 toe.

(Ik heb de stijlregels wat compacter genoteerd dan in figuur 5.)

figuur 6 170@media screen and (max-width: 900px) {
171article { background-color: green; }
172}
173
174@media screen and (max-width: 700px) {
175article { background-color: brown; }
176}

Let op, bij de media regels komt tussen de haakjes geen puntkomma (zoals na een stijlregel):
Dus niet @media screen and (max-width: 900px;) maar @media screen and (max-width: 900px)

Als het goed is wordt de achtergrond van de article-elementen groen bij schermbreedten van 900px en lager. De achtergrond wordt bruin bij schermen van 700px en lager.
Anders gezegd: met schermen boven 900 px een standaard achtergrond, tussen 700px en 900px groen, daaronder bruin.

Probeer het maar uit.

Experiment 2

Laat de media queries staan, maar verwissel alleen de 700px en 900px:

Het stijlblad ziet er dan uit als figuur 7.

figuur 7 170@media screen and (max-width: 700px) {
171article { background-color: green; }
172}
173
174@media screen and (max-width: 900px) {
175article { background-color: brown; }
176}

Bekijk het resultaat.
Nu zie je dat de achtergrond bij een schermbreedte van 900px bruin wordt, maar onder de 700px wordt hij niet groen!

Het blijkt dat je je bij media queries aan de volgende regels moet houden:

Regels voor media queries
  1. Media queries met max-width moeten van groot naar klein gerangschikt zijn.
  2. Media queries met min-width moeten van klein naar groot gerangschikt zijn.
Experiment 3

Experiment 4

Klik nog even op de knop Antwoord om te zien of jouw antwoord overeenkomt met mijn antwoord.

Maak tenslotte de regels 170-180 van je stijlblad weer leeg.

Samenvatting