Weergave
Labo 4: container, nav en links
Opnieuw een apart oefenproject binnen je portfolio, in projecten/labo04/oplossing/.
Dit labo moet niet af zijn op het einde van de les. Werk door tot waar je raakt, en maak de rest thuis af tegen zondag.
gitlab
Commit na elke stap, met een commit message die zegt wat je gedaan hebt.
push ook regelmatig je commits naar gitlab!
📝 Voor je verslag
Een paar opdrachten stellen een vraag. Die staan gemarkeerd met 📝. Je antwoord komt in je verslag op projecten/labo04/index.html, zoals bij de vorige labo's.
Doelstellingen
Na dit labo kan je:
box-sizing: border-boxtoepassen en uitleggen wat het verandert CORE_3.3- een page container maken met
max-width,margin-inlineenpadding-inlineCORE_3.6 - uitleggen waarom de container binnen je landmarks staat en niet errond CORE_3.6
- een navigatielijst opmaken en het klikbare oppervlak van een link vergroten CORE_4.2
- uitleggen waarom verticale padding op een inline element niets lijkt te doen CORE_3.3
- links opmaken in al hun toestanden, met een zichtbare focus CORE_4.2 CORE_7.1
- pseudo-classes, combinators en attribute selectors gebruiken CORE_3.2
- herbruikbare classes schrijven en ze stapelen CORE_3.2
- afmetingen kiezen in
rem,%endvw/dvhCORE_3.5 - herkennen wanneer verticale marges samenvallen CORE_3.3
Voorbereiding
Maak de map projecten/labo04/oplossing/ met daarin index.html en styles.css.
De HTML
Schrijf zelf de HTML die nodig is om het resultaat uit figuur 0 te krijgen. Pas je lang aan en geef de pagina de title Labo 04.
- vergeet je landmark regions niet
- deel je hoofdinhoud op in
sections, elk met een eigen titel - de links in de navigatie zijn same page links
- valideer regelmatig met de W3C-validator en met axe DevTools
💡 Cheat sheet
Drie weken geleden heb je dit al eens gedaan. Lukt het niet meteen zonder spieken?
Lees dan zeker de cheat sheet nog eens na.
De CSS
html
<link rel="stylesheet" href="https://unpkg.com/@csstools/normalize.css">
<link rel="stylesheet" href="styles.css">Neem je :root en je body over uit labo 3. Je lettertype mag je hergebruiken, of je downloadt er een nieuw. Zelf hosten, uiteraard!
Zet daar box-sizing bovenop.
Weet voor je doet
Zorg dat je weet wat die selector doet en waarom dat nodig is!
css
*, *::before, *::after {
box-sizing: border-box;
}De container
Schrijf een .container class die drie dingen doet:
max-widthvan 90rem- links en rechts gecentreerd, ook op een breder scherm
- 1rem ruimte links en rechts, ook op een smaller scherm
Gebruik logical properties.
Zet de class daarna in je HTML
- binnen je
header - binnen je
main - en binnen je
footer.
Geef je header een achtergrondkleur en een tekstkleur, en je footer een donkere achtergrond.


Controlepunt 1
Maak je browservenster breder en smaller terwijl je labodocent kijkt. De achtergrondkleur van je header loopt door tot de schermrand, de inhoud blijft gecentreerd, en de tekst plakt nooit tegen de rand.
Probeer
Zet de .container class eens op de header zelf in plaats van erbinnen, en kijk wat er met de achtergrondkleur gebeurt.
📝 Voor je verslag: waarom zet je die class binnen je landmarks?
De nav
De lijst resetten
Een ul heeft browser defaults: padding, margin en list-style. Haal die alle drie weg voor de lijst in je nav.
Opgelet! Enkel voor de lijst in je nav.
De andere lijsten op je pagina houden hun bolletjes.
Je zal dus een combinator moeten gebruiken
Een groter klikbaar oppervlak
Je nav-links zijn nu maar zo groot als hun tekst. Dat is een erg klein oppervlak om op te klikken, en op een telefoon is het bijna onmogelijk.
Geef alle links in de nav padding:
- 1rem boven en onder
- 2rem links en rechts
Links en rechts werkt. Boven en onder niet!
Hoe komt dat? Met welke property op de a-tag los je het op? Zie het box model.


📝 Voor je verslag:
Waarom doet die verticale padding niets, en met welke property los je het op? Zie het box model.
💡 touch target
Maak altijd de link zélf groter met padding en pas eventuele achtergrondkleuren rechtstreeks op de link toe. Zo vergroot je de touch target.
Kleur en onderlijning
Links hebben ook defaults: blauw, paars als je ze bezocht hebt, en onderlijnd.
- zorg dat de links in je nav hun tekstkleur overerven van de header
- haal de onderlijning weg (none), enkel in de nav
Overal elders blijft de onderlijning staan
In 99% van de gevallen is een onderlijning een heel goed idee, want anders ziet je bezoeker niet wat klikbaar is. In een nav mag ze weg, omdat de plaats al zegt dat het links zijn.
Uitlijnen
Een nav-link (nav a) heeft nu 2rem padding links. De rest van je pagina heeft die niet. Nu staan links en tekst dus niet netjes onder elkaar.

Zet de linkermarge van de lijst (nav ul) op -2rem. De twee heffen elkaar op.

Hover en focus-visible
Geef je nav-links een lichtere achtergrondkleur zodra je er met de muis over gaat of er met de tab-toets op belandt. Schrijf dat in één regel, met een grouped selector.
css
nav a:hover,
nav a:focus-visible {
/* ... */
}Test met je tab-toets.


Controlepunt 2
Navigeer met de tab-toets door je hele pagina terwijl je labodocent kijkt. Op elk moment is zichtbaar waar je bent.
Probeer
Geef alle links op je pagina een eigen :focus-visible met een duidelijke outline, bijvoorbeeld outline: 4px dotted. Tab daarna nog eens door je pagina. Wat doet shift-tab?
Geavanceerde selectoren
Het tweede item in je nav
Geef het tweede item in je nav een andere achtergrondkleur en een andere tekstkleur, met :nth-child().

Probeer
Doe hetzelfde met :nth-child(odd) en :nth-child(even) op de lijstitems in je hoofdinhoud. Inspecteer met je browser devtools, staat :nth-child(odd) zoals jij ze geschreven hebt?
De laatste paragraaf in je footer
De laatste paragraaf in je footer heeft een ondermarge, en die geeft je een streep in de achtergrondkleur onderaan je pagina.

Zet de marge van het laatste element in je footer op 0, met een combinator en een pseudo-class.

De paragraaf na een titel
Zorg dat elke paragraaf die direct op een h2 volgt cursief wordt. De paragrafen verderop in de sectie blijven staan zoals ze zijn.

Links naar één bepaalde site
Geef elke link die mozilla in zijn href heeft een achtergrondkleur met een alfawaarde.
Zoek op MDN hoe je op een deel van een attribuutwaarde selecteert.

Herbruikbare classes
highlight
Maak een class .highlight die tekst vet en cursief maakt. Hang ze aan minstens twee span-elementen in je hoofdinhoud.

Probeer
Kijk waar .highlight nu in je HTML staat. Krijg je diezelfde opmaak ook met een element selector, bijvoorbeeld strong of em?
Wanneer kies je een class, en wanneer een semantisch element?
Een modifier
Maak een class .container--narrow met een max-width van 40rem, en hang ze naast.container aan het element in je main:
html
<div class="container container--narrow">Utility classes
Maak vier classes die elk één ding doen:
css
.m-1 { /* margin 1rem */ }
.m-2 { /* margin 2rem */ }
.p-1 { /* padding 1rem */ }
.p-2 { /* padding 2rem */ }Zet ze op een paar elementen in je hoofdinhoud, en stapel ze: class="m-1 p-2".
💡 Deze manier van werken heet utility classes, of functional CSS.
Dat komt later nog aan bod wanneer we spreken over CSS libraries en frameworks.
Inheritance en specificity
Zet een span met class highlight in je footer. Zorg dat .highlight zich daar anders gedraagt dan in je hoofdinhoud:
- niet vet
- niet cursief
- een tekstkleur met genoeg contrast tegen je donkere footer
De class in je HTML blijft highlight. Je schrijft alleen CSS bij.

Het box model
Margin collapsing
Geef je h2-elementen een margin-bottom van 3rem en je paragrafen een margin-top van 2rem.
Meet daarna in het Layout panel van je devtools hoeveel ruimte er tussen een h2 en de paragraaf eronder zit.
📝 Voor je verslag: hoeveel ruimte zit er tussen, en hoe komt dat?
Afmetingen die meeschalen
Geef je main een padding boven en onder die meeschaalt met het venster, met dvh en dvw. Vergroot en verklein daarna je browservenster.
Valideren en indienen
Valideren
- W3C Markup Validation Service: nul errors
- axe DevTools: geen meldingen, contrast inbegrepen
- Tab door je pagina: de focus is overal zichtbaar
Verslag
Schrijf je verslag op projecten/labo04/index.html, in de vaste opbouw: doelen, link naar je oplossing, omschrijving, gerelateerde links, de antwoorden op van elke vraag die met 📝 gemarkeerd staat...
Indienen
Alles staat online tegen zondag om 20u, op je eigen adres, en in je GitLab-project.
Als er iets misgaat
Mijn container doet niets. Staat de class op het element, en heeft dat element ook echt ruimte om smaller te worden? Meet het na in het Layout panel.
Mijn header heeft witte randen links en rechts. De .container staat op de header zelf in plaats van erbinnen.
Mijn nav-links overlappen de rest. Verticale padding op een inline element. Zie een groter klikbaar oppervlak.
Mijn tweede nav-link loopt tot tegen de schermrand. Dat komt van de negatieve marge bij uitlijnen.
Axe klaagt over contrast in mijn footer. Je tekstkleur erft van :root en je achtergrond is donker. Zet een eigen color op je footer.

