Norsk

Frigjør kraften i CSS viewport-enheter (vw, vh, vmin, vmax, vi, vb) for å skape responsive og skalerbare weblayouter som tilpasser seg sømløst til enhver enhet. Lær praktiske bruksområder, beste praksis og avanserte teknikker.

Mestre CSS Viewport-enheter: En omfattende guide til responsivt design

I den stadig utviklende verdenen av webutvikling er det avgjørende å lage responsive design som tilpasser seg sømløst til ulike skjermstørrelser. CSS Viewport-enheter (vw, vh, vmin, vmax, vi og vb) tilbyr en kraftig måte å oppnå dette på, og gir en fleksibel og skalerbar tilnærming til å dimensjonere elementer i forhold til viewporten. Denne omfattende guiden vil dykke dypt ned i detaljene rundt viewport-enheter, utforske deres funksjonalitet, praktiske bruksområder og beste praksis for implementering.

Forstå viewport-enheter

Viewport-enheter er relative lengdeenheter i CSS som er basert på størrelsen til nettleserens viewport. I motsetning til faste enheter som piksler (px), som forblir konstante uavhengig av skjermstørrelse, justerer viewport-enheter dynamisk verdiene sine basert på viewportens dimensjoner. Denne tilpasningsevnen gjør dem ideelle for å lage flytende og responsive layouter som ser bra ut på alle enheter, fra smarttelefoner til store stasjonære skjermer. Hovedfordelen er at design bygget med viewport-enheter skalerer harmonisk, og opprettholder proporsjoner og visuell appell på tvers av ulike skjermoppløsninger.

Kjerneenhetene for viewport: vw, vh, vmin, vmax

Logiske viewport-enheter: vi, vb

Nyere logiske viewport-enheter, vi og vb, er relative til henholdsvis *inline*- og *block*-dimensjonene til viewporten. Disse enhetene er følsomme for skrivemodus og tekstretning i dokumentet, noe som gjør dem spesielt nyttige for internasjonaliserte nettsteder. Dette muliggjør layouter som er iboende tilpasningsdyktige til ulike skriftsystemer.

Eksempel: La oss se på et nettsted designet for både engelsk (venstre-til-høyre) og arabisk (høyre-til-venstre) språk. Ved å bruke vi for padding eller margin på sidene av en container, vil den automatisk justere seg til riktig side basert på språkretningen, noe som sikrer konsistent avstand uavhengig av brukerens språkpreferanse.

Praktisk bruk av viewport-enheter

Viewport-enheter kan brukes i en rekke scenarioer for å lage responsive og visuelt tiltalende weblayouter. Her er noen vanlige bruksområder:

1. Seksjoner i full høyde

Å lage seksjoner i full høyde som spenner over hele viewporten er et vanlig designmønster. Viewport-enheter gjør dette utrolig enkelt:

.full-height-section {
 height: 100vh;
 width: 100vw; /* Sikrer at den også fyller hele bredden */
}

Denne kodebiten sikrer at .full-height-section-elementet alltid opptar hele viewportens høyde, uavhengig av skjermstørrelsen. width: 100vw; sikrer at elementet også fyller hele bredden, og skaper en seksjon som virkelig fyller hele viewporten.

2. Responsiv typografi

Viewport-enheter kan brukes til å lage responsiv typografi som skalerer proporsjonalt med viewportens størrelse. Dette sikrer at teksten forblir lesbar og visuelt tiltalende på alle enheter.

h1 {
 font-size: 8vw; /* Skriftstørrelsen skalerer med viewportens bredde */
}

p {
 font-size: 2vh; /* Skriftstørrelsen skalerer med viewportens høyde */
}

I dette eksemplet er font-size for h1-elementet satt til 8vw, noe som betyr at den vil være 8 % av viewportens bredde. Når viewportens bredde endres, vil skriftstørrelsen justeres tilsvarende. På samme måte er font-size for p-elementet satt til 2vh, og skalerer med viewportens høyde.

3. Bokser med sideforhold

Å opprettholde sideforhold for bilder og videoer kan være vanskelig, men viewport-enheter, kombinert med padding-top-trikset, gir en enkel løsning:

.aspect-ratio-box {
 width: 100%;
 position: relative;
}

.aspect-ratio-box::before {
 content: "";
 display: block;
 padding-top: 56.25%; /* 16:9 sideforhold (høyde/bredde * 100) */
}

.aspect-ratio-box > * {
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
}

Denne teknikken bruker et pseudo-element (::before) med en padding-top-verdi beregnet basert på ønsket sideforhold (i dette tilfellet 16:9). Innholdet i .aspect-ratio-box blir deretter absolutt posisjonert for å fylle den tilgjengelige plassen, og opprettholder sideforholdet uavhengig av skjermstørrelsen. Dette er ekstremt nyttig for å bygge inn videoer eller bilder som må opprettholde proporsjonene sine.

4. Lage flytende rutenettoppsett

Viewport-enheter kan brukes til å lage flytende rutenettoppsett der kolonner og rader justeres proporsjonalt med viewportens størrelse. Dette kan være spesielt nyttig for å lage dashbord og andre komplekse layouter.

.grid-container {
 display: grid;
 grid-template-columns: repeat(auto-fit, minmax(20vw, 1fr)); /* Hver kolonne er minst 20 % av viewportens bredde */
 grid-gap: 1vw;
}

.grid-item {
 padding: 1vw;
 background-color: #f0f0f0;
}

Her bruker grid-template-columns-egenskapen minmax(20vw, 1fr) for å sikre at hver kolonne er minst 20 % av viewportens bredde, men kan vokse for å fylle den tilgjengelige plassen. grid-gap er også satt med 1vw, noe som sikrer at avstanden mellom rutenettelementene skalerer proporsjonalt med viewportens størrelse.

5. Responsiv avstand og padding

Kontroll av avstand og padding med viewport-enheter gir en konsistent visuell harmoni på tvers av forskjellige enheter. Det sikrer at elementer ikke virker for trange eller for spredte, uavhengig av skjermstørrelse.

.container {
 padding: 5vw;
 margin-bottom: 3vh;
}

I dette eksemplet har .container-elementet en padding som er 5 % av viewportens bredde på alle sider og en bunnmarg som er 3 % av viewportens høyde.

6. Skalerbare UI-elementer

Knapper, inndatafelt og andre UI-elementer kan gjøres mer responsive ved å dimensjonere dem med viewport-enheter. Dette gjør at UI-komponenter kan opprettholde sine relative proporsjoner, noe som forbedrer brukeropplevelsen på forskjellige skjermer.

.button {
 font-size: 2.5vh;
 padding: 1vh 2vw;
 border-radius: 0.5vh;
}

.button-klassen er definert med en skriftstørrelse basert på viewportens høyde (2.5vh) og padding basert på både viewportens høyde og bredde. Dette sikrer at knappeteksten forblir lesbar og at knappestørrelsen justeres passende med forskjellige skjermdimensjoner.

Beste praksis for bruk av viewport-enheter

Selv om viewport-enheter tilbyr en kraftig måte å lage responsive design på, er det viktig å bruke dem med omhu og følge beste praksis for å unngå potensielle fallgruver:

1. Vurder minimums- og maksimumsverdier

Viewport-enheter kan noen ganger føre til ekstreme verdier på veldig små eller veldig store skjermer. For å forhindre dette, bør du vurdere å bruke CSS-funksjonene min(), max() og clamp() for å sette minimums- og maksimumsgrenser for verdiene til viewport-enheter.

h1 {
 font-size: clamp(2rem, 8vw, 5rem); /* Skriftstørrelsen er minst 2rem, maksimalt 5rem, og skalerer med viewportens bredde i mellom */
}

clamp()-funksjonen tar tre argumenter: en minimumsverdi, en foretrukket verdi og en maksimumsverdi. I dette eksemplet vil font-size være minst 2rem, maksimalt 5rem, og vil skalere proporsjonalt med viewportens bredde (8vw) mellom disse grensene. Dette forhindrer at teksten blir for liten på små skjermer eller for stor på store skjermer.

2. Kombiner med andre enheter

Viewport-enheter fungerer best når de kombineres med andre CSS-enheter, som em, rem og px. Dette lar deg lage et mer nyansert og fleksibelt design som tar hensyn til både viewportens størrelse og innholdskontekst.

p {
 font-size: calc(1rem + 0.5vw); /* Grunnskriftstørrelse på 1rem pluss en skaleringsfaktor */
 line-height: 1.6;
}

I dette eksemplet beregnes font-size ved hjelp av calc()-funksjonen, som legger til en grunnskriftstørrelse på 1rem til en skaleringsfaktor på 0.5vw. Dette sikrer at teksten alltid er lesbar, selv på små skjermer, samtidig som den skalerer proporsjonalt med viewportens størrelse.

3. Test på forskjellige enheter og nettlesere

Som med enhver webutviklingsteknikk, er det avgjørende å teste designene dine på en rekke enheter og nettlesere for å sikre nettleserkompatibilitet og optimal ytelse. Bruk nettleserens utviklerverktøy for å simulere forskjellige skjermstørrelser og oppløsninger, og test designene dine på faktiske fysiske enheter når det er mulig. Selv om støtten generelt er god, kan det eksistere små forskjeller mellom nettlesere.

4. Vurder tilgjengelighet

Når du bruker viewport-enheter for typografi, sørg for at teksten forblir lesbar og tilgjengelig for brukere med nedsatt funksjonsevne. Vær oppmerksom på fargekontrast, skriftstørrelse og linjehøyde for å sikre at teksten er lett å lese for alle brukere. Verktøy som WebAIMs kontrastkontroll kan være nyttige for å bestemme passende fargekontrastforhold. Unngå også å sette `font-size` eller andre størrelsesrelaterte egenskaper direkte på `html`-elementet med viewport-enheter, da dette kan forstyrre brukerens preferanser for tekststørrelse.

5. Bruk med CSS-variabler (Custom Properties)

Bruk av CSS-variabler (custom properties) med viewport-enheter forbedrer vedlikeholdbarheten og muliggjør enklere justeringer på tvers av stilarket ditt.

:root {
 --base-padding: 2vw;
}

.element {
 padding: var(--base-padding);
}

.another-element {
 margin-left: var(--base-padding);
}

I dette eksemplet er --base-padding-variabelen definert med en verdi på 2vw. Denne variabelen brukes deretter til å sette padding og margin for forskjellige elementer, slik at du enkelt kan justere avstanden på hele nettstedet ditt ved å endre verdien av variabelen på ett sted.

Avanserte teknikker og hensyn

1. Bruke JavaScript for dynamiske justeringer

I visse scenarioer kan det hende du må justere verdiene for viewport-enheter dynamisk basert på brukerinteraksjoner eller andre hendelser. JavaScript kan brukes til å få tilgang til viewportens dimensjoner og oppdatere CSS-variabler deretter.

// JavaScript
function updateViewportVariables() {
 const vh = window.innerHeight * 0.01;
 document.documentElement.style.setProperty('--vh', `${vh}px`);
}

window.addEventListener('resize', updateViewportVariables);
updateViewportVariables(); // Første kall

// CSS
.element {
 height: calc(var(--vh, 1vh) * 50); /* Fallback til 1vh hvis --vh ikke er definert */
}

Denne kodebiten bruker JavaScript til å beregne viewportens høyde og sette en CSS-variabel (--vh) tilsvarende. .element bruker deretter denne variabelen til å sette sin høyde, og sikrer at den alltid opptar 50 % av viewportens høyde. Fallbacken til `1vh` sikrer at elementet fortsatt har en rimelig høyde selv om CSS-variabelen ikke er riktig satt.

2. Håndtere synligheten av mobil-tastatur

På mobile enheter kan viewport-størrelsen endre seg når det virtuelle tastaturet vises. Dette kan forårsake problemer med layouter som er avhengige av viewport-enheter for seksjoner i full høyde. En tilnærming for å redusere dette er å bruke Large, Small og Dynamic Viewport-enheter, som lar utviklere spesifisere oppførsel for disse scenariene. Disse er tilgjengelige med lvh, svh og dvh-enheter. dvh-enheten justeres når det myke tastaturet vises. Merk at støtten kan være begrenset i noen eldre nettlesere.

.full-height-section {
 height: 100dvh;
}

3. Optimalisere for ytelse

Selv om viewport-enheter generelt har god ytelse, kan overdreven bruk av dem potensielt påvirke sidens gjengivelseshastighet. For å optimalisere ytelsen, unngå å bruke viewport-enheter for hvert eneste element på siden din. Fokuser i stedet på å bruke dem strategisk for viktige layoutkomponenter og typografi. Minimer også antall ganger du beregner verdiene for viewport-enheter på nytt i JavaScript.

Eksempler på tvers av land og kulturer

Det fine med viewport-enheter er at de bidrar til å skape en konsistent brukeropplevelse på tvers av ulike steder. La oss undersøke hvordan viewport-enheter kan brukes med kulturelle hensyn:

Konklusjon

CSS Viewport-enheter er et uunnværlig verktøy for å lage virkelig responsive og skalerbare webdesign som tilpasser seg sømløst til enhver enhet. Ved å forstå funksjonaliteten til vw, vh, vmin, vmax, vi og vb, og ved å følge beste praksis, kan du frigjøre det fulle potensialet til viewport-enheter og lage visuelt tiltalende og brukervennlige nettsteder som gir en konsistent opplevelse på tvers av alle plattformer. Omfavn disse enhetene for å bygge webopplevelser som er globalt tilgjengelige og estetisk tiltalende, uavhengig av brukerens enhet eller kulturelle bakgrunn.

Husk å teste grundig på tvers av forskjellige nettlesere og enheter, og å alltid prioritere tilgjengelighet for å sikre at designene dine er inkluderende og brukbare for alle.