Svenska

Bemästra CSS scroll-behavior för smidig och tillgänglig navigering. Lär dig implementeringstekniker, webbläsarkompatibilitet och avancerade anpassningsalternativ för en sömlös användarupplevelse.

CSS Scroll Behavior: En komplett guide till mjuk skrollning

I dagens landskap för webbutveckling är användarupplevelsen (UX) A och O. En till synes liten detalj som kan ha en betydande inverkan på UX är hur mjuk skrollningen är. Inga fler plötsliga hopp mellan sektioner! CSS-egenskapen scroll-behavior erbjuder ett enkelt men kraftfullt sätt att implementera mjuk skrollning, vilket förbättrar webbplatsens tillgänglighet och den övergripande användarnöjdheten. Denna guide ger en omfattande genomgång av scroll-behavior, och täcker allt från grundläggande implementering till avancerad anpassning och överväganden kring webbläsarkompatibilitet för en verkligt global publik.

Vad är CSS Scroll Behavior?

Egenskapen scroll-behavior i CSS låter dig specificera skrollningsbeteendet för en skrollningsbar ruta. Som standard är skrollning omedelbar, vilket resulterar i abrupta hopp när man navigerar mellan olika delar av en sida. scroll-behavior: smooth; ändrar detta och ger en mjuk, animerad övergång när skrollning utlöses, oavsett om det sker genom att klicka på en ankarlänk, använda piltangenterna eller programmatiskt initiera en skrollning.

Grundläggande implementering av scroll-behavior: smooth;

Det enklaste sättet att aktivera mjuk skrollning är att tillämpa egenskapen scroll-behavior: smooth;html- eller body-elementet. Detta gör all skrollning inom visningsområdet mjuk.

Tillämpa på html-elementet:

Detta är generellt den föredragna metoden eftersom den påverkar hela sidans skrollningsbeteende.

html {
  scroll-behavior: smooth;
}

Tillämpa på body-elementet:

Denna metod fungerar också men är mindre vanlig eftersom den endast påverkar innehållet inom body.

body {
  scroll-behavior: smooth;
}

Exempel: Föreställ dig en enkel webbsida med flera sektioner identifierade med rubriker. När en användare klickar på en navigeringslänk som pekar mot en av dessa sektioner, istället för att omedelbart hoppa till den sektionen, kommer sidan att skrolla mjukt dit.

Mjuk skrollning med ankarlänkar

Ankarlänkar (även kända som fragmentidentifierare) är ett vanligt sätt att navigera inom en webbsida. De används vanligtvis i innehållsförteckningar eller på ensidiga webbplatser. Med scroll-behavior: smooth; utlöser ett klick på en ankarlänk en mjuk skrollningsanimation.

HTML-struktur för ankarlänkar:



Sektion 1

Innehåll för sektion 1...

Sektion 2

Innehåll för sektion 2...

Sektion 3

Innehåll för sektion 3...

Med CSS-regeln html { scroll-behavior: smooth; } på plats kommer ett klick på någon av länkarna i navigationen att resultera i en mjuk skrollningsanimation till motsvarande sektion.

Rikta in sig på specifika skrollningsbara element

Du kan också tillämpa scroll-behavior: smooth; på specifika skrollningsbara element, såsom div-element med overflow: auto; eller overflow: scroll;. Detta gör att du kan aktivera mjuk skrollning inom en viss behållare utan att påverka resten av sidan.

Exempel: Mjuk skrollning i en div:

Massor av innehåll här...

Mer innehåll...

Ännu mer innehåll...

.scrollable-container {
  width: 300px;
  height: 200px;
  overflow: scroll;
  scroll-behavior: smooth;
}

I detta exempel kommer endast innehållet inom .scrollable-container att skrolla mjukt.

Programmatisk mjuk skrollning med JavaScript

Medan scroll-behavior: smooth; hanterar skrollning som utlöses av användarinteraktion (som att klicka på ankarlänkar), kan du behöva initiera skrollning programmatiskt med JavaScript. Metoderna scrollTo() och scrollBy(), när de kombineras med alternativet behavior: 'smooth', erbjuder ett sätt att uppnå detta.

Använda scrollTo():

Metoden scrollTo() skrollar fönstret till en specifik koordinat.

window.scrollTo({
  top: 500,
  left: 0,
  behavior: 'smooth'
});

Denna kod kommer mjukt att skrolla fönstret till en vertikal förskjutning på 500 pixlar från toppen.

Använda scrollBy():

Metoden scrollBy() skrollar fönstret med ett angivet avstånd.

window.scrollBy({
  top: 100,
  left: 0,
  behavior: 'smooth'
});

Denna kod kommer mjukt att skrolla fönstret nedåt med 100 pixlar.

Exempel: Mjuk skrollning till ett element vid knapptryck:



Sektion 3

Innehåll för sektion 3...

const scrollButton = document.getElementById('scrollButton');
const section3 = document.getElementById('section3');

scrollButton.addEventListener('click', () => {
  section3.scrollIntoView({
    behavior: 'smooth'
  });
});

När knappen klickas kommer sidan mjukt att skrolla till elementet "Sektion 3" med hjälp av scrollIntoView(). Denna metod är ofta att föredra eftersom den beräknar den exakta positionen för målelementet, oavsett dynamiska innehållsändringar.

Anpassa skrollningshastighet och easing

Medan scroll-behavior: smooth; ger en standardmässig mjuk skrollningsanimation, kan du inte direkt styra hastigheten eller easing (förändringstakten för animationen över tid) med enbart CSS. Anpassning kräver JavaScript.

Viktig anmärkning: Överdrivet långa eller komplexa animationer kan vara skadliga för UX och kan potentiellt orsaka åksjuka eller hindra användarinteraktion. Sträva efter subtila och effektiva animationer.

JavaScript-baserad anpassning:

För att anpassa skrollningshastigheten och easing behöver du använda JavaScript för att skapa en anpassad animation. Detta innebär vanligtvis att använda bibliotek som GSAP (GreenSock Animation Platform) eller implementera din egen animationslogik med requestAnimationFrame.

Exempel med requestAnimationFrame:

function smoothScroll(target, duration) {
  const start = window.pageYOffset;
  const targetPosition = target.getBoundingClientRect().top;
  const startTime = performance.now();

  function animation(currentTime) {
    const timeElapsed = currentTime - startTime;
    const run = ease(timeElapsed, start, targetPosition, duration);
    window.scrollTo(0, run);
    if (timeElapsed < duration) {
      requestAnimationFrame(animation);
    }
  }

  // Easing-funktion (t.ex. easeInOutQuad)
  function ease(t, b, c, d) {
    t /= d/2;
    if (t < 1) return c/2*t*t + b;
    t--;
    return -c/2 * (t*(t-2) - 1) + b;
  }

  requestAnimationFrame(animation);
}

// Exempelanvändning:
const targetElement = document.getElementById('section3');
const scrollDuration = 1000; // millisekunder
smoothScroll(targetElement, scrollDuration);

Denna kod definierar en smoothScroll-funktion som tar ett målelement och en varaktighet som indata. Den använder requestAnimationFrame för att skapa en mjuk animation och inkluderar en easing-funktion (easeInOutQuad i detta exempel) för att kontrollera animationens takt. Du kan hitta många olika easing-funktioner online för att uppnå olika animationseffekter.

Tillgänglighetsaspekter

Även om mjuk skrollning kan förbättra UX, är det avgörande att ta hänsyn till tillgänglighet. Vissa användare kan finna mjuk skrollning distraherande eller till och med desorienterande. Att erbjuda ett sätt att inaktivera mjuk skrollning är viktigt för inkludering.

Implementera en användarpreferens:

Det bästa tillvägagångssättet är att respektera användarens operativsysteminställningar för reducerad rörelse. Mediefrågor som prefers-reduced-motion låter dig upptäcka om användaren har begärt reducerad rörelse i sina systeminställningar.

Använda prefers-reduced-motion:

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto !important; /* Åsidosätt mjuk skrollning */
  }
}

Denna kod inaktiverar mjuk skrollning om användaren har aktiverat inställningen "reducera rörelse" i sitt operativsystem. Flaggan !important används för att säkerställa att denna regel åsidosätter alla andra scroll-behavior-deklarationer.

Erbjuda en manuell omkopplare:

Du kan också erbjuda en manuell omkopplare (t.ex. en kryssruta) som låter användare aktivera eller inaktivera mjuk skrollning. Detta ger användarna mer direkt kontroll över sin upplevelse.


const smoothScrollToggle = document.getElementById('smoothScrollToggle');

smoothScrollToggle.addEventListener('change', () => {
  if (smoothScrollToggle.checked) {
    document.documentElement.style.scrollBehavior = 'smooth';
  } else {
    document.documentElement.style.scrollBehavior = 'auto';
  }
});

Denna kod lägger till en kryssruta som låter användare slå på eller av mjuk skrollning. Kom ihåg att spara denna användarpreferens (t.ex. med local storage) så att den kommer ihåg mellan sessioner.

Webbläsarkompatibilitet

scroll-behavior har bra stöd i webbläsare, men det är viktigt att vara medveten om äldre webbläsare som kanske inte stöder det. Här är en sammanfattning av webbläsarkompatibilitet:

Erbjuda en fallback för äldre webbläsare:

För webbläsare som inte stöder scroll-behavior kan du använda en JavaScript-polyfill. En polyfill är en kodsnutt som tillhandahåller funktionaliteten hos en nyare funktion i äldre webbläsare.

Exempel: Använda en polyfill:

Det finns flera JavaScript-bibliotek tillgängliga som erbjuder polyfills för mjuk skrollning. Ett alternativ är att använda ett bibliotek som "smoothscroll-polyfill".



Denna kod inkluderar biblioteket "smoothscroll-polyfill" och initierar det. Detta kommer att ge mjuk skrollningsfunktionalitet i äldre webbläsare som inte har inbyggt stöd för scroll-behavior.

Villkorlig laddning: Överväg att ladda polyfillen villkorligt med hjälp av en skriptladdare eller funktionsdetektering för att undvika onödig belastning i moderna webbläsare.

Bästa praxis för mjuk skrollning

Här är några bästa praxis att tänka på när du implementerar mjuk skrollning:

Vanliga problem och lösningar

Här är några vanliga problem du kan stöta på när du implementerar mjuk skrollning och deras lösningar:

Avancerade tekniker och överväganden

Utöver grunderna finns det flera avancerade tekniker och överväganden för att förbättra din implementering av mjuk skrollning.

Använda scroll-margin och scroll-padding:

Dessa CSS-egenskaper ger finare kontroll över skrollfästningsbeteendet och hjälper till att undvika att innehåll skyms av fasta sidhuvuden eller sidfötter.

Exempel:

section {
  scroll-margin-top: 20px; /* Lägger till en 20px marginal ovanför varje sektion vid skrollning */
}

html {
  scroll-padding-top: 60px; /* Lägger till 60px utfyllnad högst upp i visningsområdet vid skrollning */
}

Kombinera med Intersection Observer API:

Intersection Observer API låter dig upptäcka när ett element kommer in i eller lämnar visningsområdet. Du kan använda detta API för att utlösa mjuk skrollningsanimationer baserat på elementens synlighet.

Exempel:

const sections = document.querySelectorAll('section');

const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      // Gör något när sektionen är synlig
      console.log('Sektion ' + entry.target.id + ' är synlig');
    } else {
      // Gör något när sektionen inte är synlig
      console.log('Sektion ' + entry.target.id + ' är inte synlig');
    }
  });
}, {
  threshold: 0.5 // Utlös när 50% av elementet är synligt
});

sections.forEach(section => {
  observer.observe(section);
});

Denna kod använder Intersection Observer API för att upptäcka när varje sektion kommer in i eller lämnar visningsområdet. Du kan sedan använda denna information för att utlösa anpassade mjuka skrollningsanimationer eller andra visuella effekter.

Globala perspektiv på skrollningsbeteende

Även om den tekniska implementeringen av mjuk skrollning är konsekvent globalt, kan kulturella och kontextuella överväganden påverka dess upplevda användbarhet.

Slutsats

scroll-behavior: smooth; är en värdefull CSS-egenskap som avsevärt kan förbättra användarupplevelsen på din webbplats. Genom att förstå dess grundläggande implementering, anpassningsalternativ, tillgänglighetsaspekter och webbläsarkompatibilitet kan du skapa en sömlös och trevlig surfupplevelse för användare över hela världen. Kom ihåg att prioritera tillgänglighet, optimera prestanda och testa noggrant för att säkerställa att din implementering av mjuk skrollning uppfyller behoven hos alla dina användare. Genom att följa riktlinjerna och bästa praxis som beskrivs i denna guide kan du bemästra mjuk skrollning och skapa en webbplats som är både visuellt tilltalande och användarvänlig för en global publik.

CSS Scroll Behavior: En komplett guide till mjuk skrollning | MLOG