Hoe ik mijn blog responsive heb gemaakt met css @media queries

zaterdag 9 februari 2013 om 22:50 uur

Een tijdje geleden maakte iedereen nog een website om te tonen in een webbrowser op een PC of MAC. Dat is sinds de komst van de smartphone anders geworden, steeds vaker hoor je de term ‘responsive (webdesign)’. Niet zo gek, want het scheelt een hoop gedoe als je een website op een smartphone bekijkt. Waar je normaal moest zoomen om dingen goed te bekijken of een knopje goed in te drukken, bekijk je nu een speciale versie waardoor het gebruik op je smartphone een stuk gemakkelijker wordt!

Een aantal weken geleden ben ik hier ook eens mee gaan spelen, ik ben er op een avond eens lekker voor gaan zitten heb me een beetje ingelezen in media queries en heb mijn eigen blog ook omgebouwd naar een responsive versie. Het gemakkelijkst is dit te zien door de browser groter en kleiner te maken. Dan zie je dat de opmaak van groot naar klein 3 of 4 keer veranderd. Hieronder leg ik kort uit hoe ik dat heb gedaan.

Manier één: Verschillende stylesheets

Er zijn verschillende manieren om met media queries te werken. Je kunt dit doen door per apparaat (of grootte van de browser) een aparte stylesheet in te stellen, zoals hieronder:

< link rel="stylesheet" href="maximaal480.css" media="screen and (max-width: 480px)" />

De stylesheet hierboven wordt aangeroepen wanneer je scherm een breedte heeft tot maximaal 480px. Deze zin kan je gewoon herhalen en de link en de breedte aanpassen aan de resoluties die jij graag wilt ondersteunen.

Manier twee: Alles in één stylesheet

De tweede manier is om het allemaal in één stylesheet te doen. Dit is de manier waarop ik het heb gedaan. Dit leek mij het meest handig omdat ik de gehele stylesheet al had staan en hierdoor aan de onderkant de responsive stijlen kon toevoegen. (Achteraf moet ik zeggen dat de andere manier denk ik een stuk netter en vooral duidelijker was geweest, maar dat is achteraf.) Om alles in één stylesheet te zetten zet je het volgende in je stijldocument (css-bestand):

/* Smartphones (portrait and landscape) ----------- */
@media only screen and (max-device-width : 480px) {
/* Hieronder komt je opmaak te staan */
}

De stijlen die je hier onder het zinnetje /* Hieronder komt je opmaak te staan */ toe voegt worden alleen getoond op een scherm tot 480 pixels breed. Net als bij de eerste manier kan je deze ook in je stylesheet meerdere keren gebruiken en de breedte aanpassen naar de breedtes die jij graag wilt ondersteunen.

In bovenstaande voorbeelden heb ik alleen de maximale breedte van het scherm aangegeven, je kunt ook de minimale breedte aangeven. Om alleen de minimale breedte aan te geven (in dit voorbeeld 320 pixels breed) wordt het bij de eerste manier:

< link rel="stylesheet" href="minimaal320.css" media="screen and (min-width: 320px)" />

En bij de tweede manier:

/* Smartphones (portrait and landscape) ----------- */
@media only screen and (min-device-width : 320px) {
/* Hieronder komt je opmaak te staan */
}

Voor de allermeeste controle over alle breedtes voeg je de minimale (in dit voorbeeld weer 320 pixels breed) en de maximale breedte (in dit voorbeeld 480 pixels breed) toe, bij de eerste manier:

< link rel="stylesheet" href="min320max480.css" media="screen and (min-width: 320px) and (max-width: 480px)" />

En bij de tweede manier:

/* Smartphones (portrait and landscape) ----------- */
@media only screen and (min-device-width : 320px) and (min-device-width : 480px) {
/* Hieronder komt je opmaak te staan */
}

In mijn geval:

Zoals eerder al heb aangegeven heb ik er voor gekozen om alles in één stylesheet te zetten, dus voor manier twee te kiezen. Omdat ik bij mijn eigen opmaak een vast aantal blokken met een vaste breedte en hoogte heb en ik altijd wil dat het één geheel blijft heb ik voor een aantal breedtes gekozen, waarbij je ook kan zien dat het dus echt niet altijd zo hoeft te zijn dat je de resolutie of een beeldscherm moet pakken maar ook eigen breedtes kunt pakken die beter binnen jou ontwerp passen. Hieronder staan de breedtes die ik toe pas:

/* vanaf 320px breed (iPhone) 2 kolommen */
@media only screen and (min-width : 320px) {
/* Hieronder de opmaak voor de Iphone, met twee smalle kolommen op de homepage */
}

/* vanaf 480px breed 2 kolommen */
@media only screen and (min-width : 480px) {
/* Hieronder de opmaak voor smartphones met een breedte vanaf 480 pixels, met twee bredere kolommen op de homepage */
}

/* vanaf 960px breed, 4 kolommen */
@media only screen and (min-width : 960px) {
/* Hieronder de opmaak voor een beeldscherm vanaf 960 pixels, met vier kolommen op de homepage */
}

/* vanaf 1540px breed, 6 kolommen */
@media only screen and (min-width : 1540px) {
/* Hieronder de opmaak voor een beeldscherm met een hogere resolutie dan 1540 pixels breed, met zes kolommen op de homepage */
}

Het laatste in mijn geval is dus een layout van 1540 pixels breed. Dus heb je een beeldscherm met een resolutie van 2560×1440 pixels dan word alsnog de versie van 1540 pixels breed getoond.

Andere manieren

Uiteraard zijn er ook andere manier, je kan ook een responsive layout opzetten door middel van javascript met mooie animaties bij het switchen van browsergrootte en dergelijke, alleen ben ik niet zo’n held met javascript dus kan ik niet laten zien hoe dat gaat, sorry!

4 Reacties op “Hoe ik mijn blog responsive heb gemaakt met css @media queries

    1. Hoi Niek!

      Je kunt een aparte stylesheet maken of het allemaal in één stylesheet zetten. Bij alle twee manieren moet je dezelfde class inderdaad meerdere keren aanroepen. Eigenlijk overschrijf je dus de één met de andere. Het makkelijkst is om met de kleinste resolutie te beginnen (mobile first) en dan steeds een stapje uit te breiden naar desktop (hogere resoluties).

      Waar je ook nog eens naar zou kunnen kijken is een framework zoals bijvoorbeeld bootstrap (http://www.getbootstrap.com), dat heb ik ook voor de nieuwere versie van mijn blog gebruikt.

      1. Ik heb deze:
        Bootstrap v3.3.4 (http://getbootstrap.com)
        Van https://github.com/twbs/bootstrap/blob/master/LICENSE)
        Maar dat is niet erg overzichtelijk daar staat in de bootstrap.min.css alles achter elkaar en kun je bijna niet zien wat waar bij hoort , en dat werkt met Javascript dus als een gebruiker dat uit heeft staan, dan werkt het niet volgens mij.
        Maar wat anders ik zie op https://css-tricks.com/snippets/css/media-queries-for-standard-devices/ lijsten van Phones and Handhelds, Tablets, Laptops en Wearables staan, en op andere site’s nog wel meer merken van iPots en dergelijken met elk hun eige resolutie zijn hier geen standaards voor, want anders zou je voor iedere merk en type een css moeten maken.

        1. Hoi Niek!

          Sorry dat ik niet eerder heb gereageerd! Verschillende delen van Bootstrap werken inderdaad niet wanneer een bezoeker javascript uit heeft staan, het grid systeem echter wel omdat die ook door media queries in de css worden uitgevoerd.
          Er zijn inderdaad een hele hoop devices. Ik denk dat wanneer je de breedtes gebruikt die Bootstrap ook gebruikt je aardig goed zit, dus kleiner dan 768px breed voor extra kleine devices (telefoons), 768px en daarboven voor kleine devices (tablets), vanaf 992px voor medium devices (desktops) en 1200px voor grote devices (desktops met hogere resolutie).

Geef een reactie