Smooth scrolling met CSS
Leerdoelen
In deze korte oefening:
- ga je centreren met CSS grid
- Maak je kennis met smooth-behaviour eigenschap
In deze korte oefening:
Met CSS kunnen we eenvoudig een vorm van smooth scrolling realiseren.
Dat kan zowel horizontaal als verticaal.
Hier het resultaat dat zonder JS gemaakt is: puur HTML en CSS.
We maken het navigatiemenu en een aantal secties in HTML.
De href-waarde van de link is een #, gevolgd door de id-naam van de sectie waarnaar gescrolled moet worden.
Het is gewoon een interne link binnen de zelfde pagina.
De sections hebben dus ieder een eigen id.
Als de sections ook een hoogte van 100vh
krijgen, kan dit al getest worden. Er is dan al scrolling als is deze nog niet smooth.
Dat laatste kan met een CSS-eigenschap aan de html-tag:
scroll-behaviour: smooth;
Hiermee is een verticale smooth scrolling al gerealiseerd!
Om het menu in beeld te houden, gaan we mindeze turorial hem links-midden plaatsen boven het main
element met de inhoud sections.
Het nav-element krijgt een position fixed. Als de hoogte gelijk wordt an de viewport, kun je hem met CSS Grid eenvoudig in het midden plaatsen:
display: grid,
en align-content: center;
Geef de nav een breedte zodat de linkjes er netjes in passen.
Geef de sections eerst een linkerpadding, die zo groot is dat er geen conflict ontstaat met de navigatie.
Ook de inhoud van de sections is -als deze makkelijk past- te centreren.
Met display: grid; align-content: center; justify-content: center;
staat alles mooi in het midden.
Elke sectie heeft een id, dus kun je elke een eigen achtergrond geven. De meeste achtergronden gedijen met een witte tekstkleur.
De list-eigenschappen zoals het het puntje, de inspringing moeten verwijderd worden.
Vervolgens kun je alles stijlen in het nav a
element.
Denk aan display-type block, padding, weghalen van onderstreping.
Zorg ook voor een hover-effect.
Sinds CSS grid is het snel en eenvoudig om de sections naast elkaar te plaatsen.
Ze hebben 1 parent: het main-element. Omdat er 5 sections zijn, geef je deze 500vw
aan breedte.
Met grid-template-columns: repeat(5, 1fr);
krijgt elke kolom 100vw
tot zijn beschikking. Het smooth scrollen werkt ook gelijk.
Je mag een hinderlijke verticale scrollbalk verwachten.
Als je de sections een hoogte van 100vh
geeft en ze hebben ook verticale padding, dan worden ze hoger dan 100vh
.
Geef ze dus box-sizoing: border-box;
zodat die hoogte-toename niet plaatsvindt.
Blijft er soms nog een klein stukje te hoge pagina over. Geef dan zowel de body- als het html-element een overflow-y: hidden;
en alles staat strak.
Soms is er meer inhoud. Dan is het onhandig als de section een display-type grid heeft.
Maak er dan een block-type van. De extra inhoud maak je beschikbaar door een overflow: auto
.
Een ander issue is dat je bij alledaagse situaties ook de gebruiker wil laten zien welke link in het menu actief is.
Daarvoor moeten we dan toch JavaScript gebruiken, wat daarna ook weer nieuwe perspectieven kan bieden.
<a href="http://validator.w3.org/check?uri=referer" target="_blank"> <img src="https://blanken5.home.xs4all.nl/afb/valid-html5-blue.png" alt="Valide HTML5"></a> <a href="http://jigsaw.w3.org/css-validator/check/referer" target="_blank"> <img src="http://jigsaw.w3.org/css-validator/images/vcss-blue.gif" alt="Valide CSS"> </a>