How do I add a scrollbar to the Mobile Menu?

Styr Din Scrolls Grænser med CSS overscroll-behavior

03/05/2025

Rating: 4.25 (2970 votes)

Forestil dig dette: Du scroller ned gennem en lang indholdsblok på en hjemmeside, og når du når bunden, begynder hele siden bagved pludselig også at rulle. Eller måske oplever du den irriterende 'pull-to-refresh' effekt på mobilen, selvom du bare ville scrolle et lille stykke opad i et indlejret element. Disse scenarier er eksempler på uønsket scroll-adfærd, der kan forringe brugeroplevelsen markant. Heldigvis findes der en elegant løsning i CSS: overscroll-behavior-egenskaben.

Why do background images change sequentially when scrolling a page?
This ensures each background image covers the entire viewport and remains fixed during scroll. As the user scrolls down the page, each div with the class .bg-image takes up the full viewport height (100vh), causing the background images to change sequentially while the fixed text remains in place.

Denne kraftfulde CSS-egenskab giver dig fuld kontrol over, hvad der sker, når en bruger forsøger at scrolle forbi scroll-grænsen for et element. Den adresserer to primære problemstillinger: scroll-kædning og overscroll-feedback (også kendt som overscroll affordance). Ved at mestre overscroll-behavior kan du skabe mere intuitive og behagelige scroll-oplevelser for dine brugere, uanset om de navigerer på desktop eller mobile enheder.

Indholdsfortegnelse

Forstå Scroll-Kædning (Scroll Chaining)

Scroll-kædning er den standardadfærd, der opstår, når du scroller til slutningen af et scrollbart element, og den resterende scroll-bevægelse overføres til det nærmeste forældrelement, der også er scrollbart. Det er en kaskadeeffekt, hvor scroll-bevægelsen 'kædes' fra et element til et andet, indtil den finder et element, der stadig kan rulle, eller når browserens viewport.

Lad os tage et eksempel: Du har en dialogboks (modal) med en lang liste af indhold, der kan scrolles. Når du scroller til bunden af listen i dialogboksen, og du fortsætter med at scrolle nedad, vil browseren som standard begynde at scrolle hele siden bag dialogboksen. Dette kan være forvirrende og forstyrrende for brugeren, da fokus pludselig skifter fra modalen til baggrunden.

I mange tilfælde er denne adfærd uønsket. Brugeren forventer, at scroll-bevægelsen stopper, når de når enden af det aktuelle element, de interagerer med. overscroll-behavior giver dig muligheden for at bryde denne kæde og holde scroll-bevægelsen inden for det specifikke element.

Forstå Overscroll-Feedback (Overscroll Affordance)

Overscroll-feedback, eller overscroll affordance, refererer til den visuelle feedback, som browseren giver, når du forsøger at scrolle forbi et elements scroll-grænse. Denne effekt er særligt udbredt på mobile enheder og kan manifestere sig på flere måder:

  • "Pull-to-refresh": På mange mobile browsere vil et træk nedad fra toppen af en webside udløse en sideopdatering. Dette er en form for overscroll-feedback.
  • "Bounce"-effekt: Når du scroller til enden af en webside eller et scrollbart element, kan indholdet kortvarigt strække sig ud over sin grænse og derefter springe tilbage. Dette giver en visuel indikation af, at du har nået slutningen.

Mens overscroll-feedback kan være nyttig i visse sammenhænge (f.eks. pull-to-refresh i en nyhedsfeed), kan den også være irriterende eller forstyrrende i andre. Forestil dig en interaktiv webapplikation, hvor en 'bounce'-effekt ved scroll-grænsen føles malplaceret eller endda dækker vigtig information i et kort øjeblik. Med overscroll-behavior kan du vælge at undertrykke denne feedback og skabe en mere kontrolleret brugergrænseflade.

overscroll-behavior-Egenskaben i CSS

overscroll-behavior-egenskaben er en shorthand-egenskab, hvilket betyder, at den kan indstille værdier for både den horisontale (x-aksen) og den vertikale (y-aksen) scroll-adfærd samtidigt. Den kan tage én eller to værdier:

  • Én værdi: Hvis du angiver én værdi, vil den gælde for både x- og y-retningen. F.eks. overscroll-behavior: contain;
  • To værdier: Hvis du angiver to værdier, vil den første gælde for x-retningen, og den anden for y-retningen. F.eks. overscroll-behavior: auto none;

Alternativt kan du styre de individuelle retninger med de mere specifikke egenskaber:

  • overscroll-behavior-x: Styrer adfærd langs den horisontale akse.
  • overscroll-behavior-y: Styrer adfærd langs den vertikale akse.

Værdier for overscroll-behavior

Der er fire hovedværdier, du kan anvende:

  1. auto (Standardværdi): Dette er den standardadfærd, du kender. Den tillader både scroll-kædning og overscroll-feedback. Hvis du ikke angiver noget, vil dette være den aktive værdi.
  2. contain: Denne værdi forhindrer scroll-kædning til forældrelementer, men tillader stadig overscroll-feedback. Dette er ofte et fremragende kompromis, da det forhindrer uønsket scroll af baggrunden, samtidig med at det bevarer den visuelle indikation af, at en grænse er nået.
  3. none: Denne værdi er den mest restriktive. Den forhindrer både scroll-kædning og overscroll-feedback. Når du når grænsen for et element med overscroll-behavior: none;, stopper scroll-bevægelsen brat, uden at påvirke forældrelementer eller vise en 'bounce'-effekt.
  4. initial: Sætter egenskaben til dens standardværdi (auto).
  5. inherit: Arver værdien fra det nærmeste forældrelement.

Eksempler på Anvendelse

Deaktiver scroll-kædning for et specifikt element

Lad os sige, du har en div med ID'et #gulDiv, som indeholder meget indhold, der kan scrolles. Du vil gerne forhindre, at scroll-bevægelsen påvirker siden bagved, når brugeren når bunden eller toppen af denne div:

#gulDiv {
height: 300px;
overflow-y: scroll;
overscroll-behavior: contain;
}

Med overscroll-behavior: contain; vil scroll-kædningen blive forhindret, men browseren vil stadig vise den visuelle overscroll-feedback, hvilket ofte giver en mere poleret følelse.

Kontrol over både x- og y-retningen

Måske har du et element, hvor du vil tillade standardadfærd i x-retningen (horisontal scroll), men fuldstændig deaktivere alt i y-retningen (vertikal scroll):

#lyserodDiv {
width: 100%;
height: 200px;
overflow: scroll;
overscroll-behavior: auto none;
}

Her betyder auto for x-retningen, at horisontal scroll-kædning og feedback er tilladt. none for y-retningen betyder, at vertikal scroll-kædning og feedback er fuldstændig deaktiveret.

Helt deaktiver overscroll-adfærd

Hvis du har en single-page applikation eller et kiosk-system, hvor du absolut ikke ønsker nogen form for overscroll-adfærd, kan du anvende none:

body {
overscroll-behavior: none;
}

Dette vil forhindre enhver form for overscroll-kædning eller feedback på hele siden, inklusiv den irriterende 'pull-to-refresh' på mobile enheder.

Does Instagram's toolbar cover the bottom 44px when scrolling?
Here is a simple example where red is header, yellow is footer, blue is content. However, in iOS Safari (and some Android browsers I think too) when you scroll, there bottom 44px or so is covered by the toolbar. I read here and some others about workarounds, but no real "good" solution. However, is seems Instagram's website on iOS solved this:

Browserunderstøttelse

overscroll-behavior-egenskaben har generelt god browserunderstøttelse på tværs af moderne browsere som Chrome, Firefox, Safari og Edge. Det er dog altid en god idé at teste i de specifikke browsere, dine brugere anvender, især hvis du støder på uventet adfærd. Vær opmærksom på, at der historisk har været små forskelle i implementeringen, for eksempel at nogle ældre versioner af Microsoft Edge behandlede 'none' som 'contain'.

Sammenligning af overscroll-behavior-Værdier

For at give et klart overblik over de forskellige værdier og deres effekter, kan vi opstille en sammenligningstabel:

VærdiScroll-kædning tilladt?Overscroll-feedback tilladt?Beskrivelse
autoJaJaStandardadfærd. Tillader scroll-kædning og visuel overscroll-feedback (f.eks. 'bounce' på mobil).
containNejJaForhindrer scroll-kædning til forældrelementer, men tillader stadig overscroll-feedback. Godt kompromis.
noneNejNejForhindrer både scroll-kædning og overscroll-feedback. Scroll-bevægelsen stopper brat ved grænsen.
initialJaJaSætter egenskaben til dens standardværdi, som er auto.
inheritArver fra forældreArver fra forældreArver værdien fra det nærmeste forældrelement.

JavaScript-Syntaks

Du kan også manipulere overscroll-behavior-egenskaben via JavaScript, hvis du har brug for dynamisk kontrol baseret på brugerinteraktion eller applikationens tilstand:

const myElement = document.getElementById('mitScrollElement');
myElement.style.overscrollBehavior = 'none'; // Sætter overscroll-behavior til 'none'

Dette giver dig fleksibilitet til at tænde og slukke for overscroll-adfærd efter behov, hvilket kan være nyttigt i komplekse webapplikationer.

Ofte Stillede Spørgsmål (FAQ)

Hvad er standardadfærden for scrolling på en webside?

Standardadfærden er overscroll-behavior: auto. Det betyder, at både scroll-kædning og overscroll-feedback er tilladt, hvilket kan resultere i, at forældrelementer scroller, når et indlejret element når sin grænse, og at du oplever 'bounce'-effekter på scroll-grænser.

Hvordan kan jeg helt forhindre en side i at rulle, når et indre element når sin grænse?

For at forhindre scroll-kædning skal du anvende overscroll-behavior: contain; eller overscroll-behavior: none; på det element, hvis scroll-adfærd du ønsker at isolere. Hvis du vil forhindre det for hele siden, kan du anvende det på body eller html-elementet.

Kan jeg styre overscroll for x- og y-retningen uafhængigt?

Ja, det kan du. Du kan enten bruge den to-værdis syntax for overscroll-behavior, f.eks., overscroll-behavior: auto none; (første værdi for x-aksen, anden for y-aksen), eller du kan bruge de specifikke egenskaber: overscroll-behavior-x og overscroll-behavior-y.

Er overscroll-behavior det samme som 'smooth scrolling'?

Nej, overscroll-behavior og 'smooth scrolling' er to forskellige ting. overscroll-behavior handler om, hvad der sker, når du scroller forbi et elements grænse (scroll-kædning og feedback). 'Smooth scrolling' refererer til den visuelle effekt af scroll-bevægelsen i sig selv – om den er pludselig eller jævn. 'Smooth scrolling' opnås typisk med CSS-egenskaben scroll-behavior: smooth;.

Hvornår bør jeg bruge overscroll-behavior: contain frem for none?

Du bør bruge overscroll-behavior: contain;, når du ønsker at forhindre scroll-kædning, men stadig ønsker, at brugeren får visuel feedback (f.eks. en 'bounce'-effekt) om, at de har nået grænsen for scroll-området. Dette giver en blødere og ofte mere forventet brugeroplevelse. Brug overscroll-behavior: none;, når du ønsker en helt stram kontrol uden nogen form for visuel feedback eller kædning, hvilket kan være passende i meget specifikke applikationer, hvor hver eneste pixel og bevægelse skal være fuldstændig forudsigelig uden afvigelser.

Konklusion

overscroll-behavior-egenskaben er en lille, men utrolig effektiv CSS-egenskab, der kan have en stor indflydelse på brugeroplevelsen af din hjemmeside eller webapplikation. Ved at give dig kontrol over scroll-kædning og overscroll-feedback kan du eliminere almindelige scroll-frustrationer, skabe mere intuitive interaktioner og give dine brugere en mere poleret fornemmelse. Uanset om du designer for desktop, tablet eller mobil, er det at mestre denne egenskab et vigtigt skridt mod at levere en fejlfri og professionel brugeroplevelse.

Hvis du vil læse andre artikler, der ligner Styr Din Scrolls Grænser med CSS overscroll-behavior, kan du besøge kategorien Teknologi.

Go up