22/04/2023
I en verden, hvor mobiltelefonen er den primære enhed for mange til at tilgå internettet, er forståelsen af, hvordan indhold præsenteres på forskellige skærmstørrelser, afgørende. Dette bringer os til begrebet viewport – det synlige område af en webside på en given enhed. At mestre viewportens dynamik er nøglen til at skabe flydende og brugervenlige oplevelser, især på enheder som iPhones, hvor skærmstørrelse, opløsning og systemets brugerflade-elementer spiller en kompleks rolle.

Denne artikel vil udforske de forskellige typer viewports, hvordan de interagerer med CSS-enheder og medieforespørgsler, og specifikt dykke ned i de unikke udfordringer og overvejelser, der er forbundet med at designe for iPhones. Fra layout- og visuelle viewports til indlejrede kontekster som iframes og SVG'er, og de specifikke fradrag, der skal tages for iOS's systembjælker, vil vi give dig en dybdegående forståelse af, hvordan du optimerer dit webindhold til den mobile verden.
Hvad er en Viewport?
Grundlæggende er en viewport det område, hvor dit webindhold vises. På desktop-computere er dette typisk browserens vindue. På mobile enheder er det dog mere nuanceret. Vi skelner primært mellem to typer viewports: layout viewport og visuel viewport.
Layout Viewport: Tænk på layout viewporten som den store, usynlige lærred, hvor hele din webside er tegnet. Denne er ofte meget bredere end den faktiske skærmbredde på en mobil enhed for at give plads til desktop-optimerede sider uden, at de skal skaleres ned for meget. Det er denne viewport, som CSS-længdeenheder som vw og vh (viewport width og viewport height) samt medieforespørgsler typisk refererer til. Det er den bagvedliggende kontekst, hvor din side er "udlagt".
Visuel Viewport: Den visuelle viewport er den del af layout viewporten, som brugeren aktuelt kan se på skærmen. Denne kan ændre sig, når brugeren zoomer ind eller ud. Hvis du zoomer ind på en webside, forbliver layout viewporten den samme størrelse, men den visuelle viewport bliver mindre, da du nu kun ser en forstørret del af det samlede layout.
Udover disse hovedtyper kan du også støde på sub-viewports. Enhver under-viewport, der er helt eller delvist vist inden for layout viewporten, betragtes som en visuel viewport. Dette gælder for indlejrede browsing-kontekster som <iframe> og <svg> elementer, som vi vil udforske mere detaljeret senere.
| Viewport Type | Beskrivelse | Påvirker |
|---|---|---|
| Layout Viewport | Den samlede "tegneflade" for websiden, ofte større end skærmen. | vw, vh, medieforespørgsler |
| Visuel Viewport | Den del af websiden, der er synlig for brugeren (kan ændres ved zoom). | Brugerens aktuelle synsfelt |
| Sub-viewport | En indlejret kontekst som <iframe> eller <svg>, med egen viewport. | CSS inde i den indlejrede kontekst |
Viewport-enheder og Medieforespørgsler
Når vi taler om bredde- og højde-baserede medieforespørgsler i CSS, tænker vi ofte, at de er relative til browserens vinduesbredde og -højde. De er dog faktisk relative til viewporten – som er vinduet i hoveddokumentet, men den indbyggede størrelse af elementets forælder i en indlejret browsing-kontekst som objekter, iframes og SVG.
I CSS har vi også længdeenheder baseret på viewport-størrelsen. En vh-enhed er 1% af layout viewportens højde. Tilsvarende er vw-enheden 1% af layout viewportens bredde. Disse enheder er utrolig nyttige til at skabe responsivt design, da de skalerer dynamisk med viewportens størrelse.
Viewports i Iframes
Inden i et <iframe> er den visuelle viewport størrelsen af iframe'ens indre bredde og højde, snarere end forælderdokumentets. Du kan indstille enhver højde og bredde på en iframe, men hele dokumentet er muligvis ikke synligt. Dette skaber en uafhængig browsing-kontekst.
Hvis du bruger viewport-længdeenheder i din CSS inden for iframe-dokumentet, vil 1vh være 1% af iframe'ens højde, og 1vw vil være 1% af iframe-dokumentets bredde. Dette er en vigtig forskel, da det betyder, at indholdet i en iframe kan reagere forskelligt på zoom-niveauer eller ændringer i forældredokumentets størrelse, end hovedindholdet ville gøre.
Overvej dette eksempel:
iframe { width: 50vw; }Hvis iframe'en er indstillet til 50vw, vil den være 50% af bredden af forælderdokumentet. Hvis forælderdokumentets bredde er 1200px, vil iframe'en være 600px bred, hvor 1vw er 6px. Når der zoomes ind på forældredokumentet, og den effektive bredde af forældredokumentets viewport krymper til f.eks. 800px, vil iframe'en krympe til 400px, og 1vw inden i iframe'en vil nu være 4px. Dette viser, hvordan iframe'ens viewport er dynamisk og afhængig af dens forælderkontekst.
En bredde-baseret medieforespørgsel inden for iframe-dokumentet er også relativ til iframe'ens viewport:
@media screen and (width >= 500px) { p { color: red; } }Hvis ovenstående CSS er inkluderet i iframe'en, vil afsnittene blive røde, når brugeren har zoomet ind på forælderdokumentet, så iframe'ens viewport er 500px eller bredere, men denne stil anvendes ikke i den ikke-zoomede tilstand, hvis iframe'en er mindre end 500px.

Viewports i SVG
I et SVG-dokument (Scalable Vector Graphics) er viewporten det synlige område af SVG-billedet. Du kan indstille enhver højde og bredde på et <svg>-element, men hele billedet er muligvis ikke synligt. Det område, der er synligt, kaldes viewporten. Størrelsen af viewporten kan defineres ved hjælp af width og height attributterne på <svg>-elementet.
Eksempel:
<svg height="300" width="400"></svg>I dette eksempel har viewporten et aspektforhold på 3:4 og er som standard 400 gange 300 enheder, hvor en enhed generelt er en CSS-pixel. SVG har også et internt koordinatsystem defineret via viewBox-attributten, som ikke er relateret til denne viewport-diskussion.
Hvis du inkluderer en SVG-fil i din HTML, er SVG'ens viewport den initiale indeholdende blok, eller bredden og højden af SVG-containeren. Brug af @media-forespørgslen i din SVG's CSS er relativ til den container, ikke browseren.
@media screen and (400px <= width <= 500px) { /* CSS her */ }Dette betyder, at designere skal være opmærksomme på, at CSS, der anvendes inden for en SVG, reagerer på SVG'ens egen kontekst, ikke nødvendigvis browserens hovedvindue.
iPhone Viewports: En Dybdegående Analyse
Når det kommer til iPhones, er der en vigtig sondring at huske: skærmopløsning er ikke lig med browser viewport. Dette skyldes, at pixel-forholdet ofte er mere end 1:1, hvilket betyder, at en fysisk pixel på skærmen svarer til en brøkdel af en CSS-pixel. Dette giver skarpe billeder på "Retina"-skærme, men betyder også, at den "logiske" (CSS) viewport er mindre end den fysiske skærmopløsning.
For udviklere og designere, der stræber efter den perfekte mobiloplevelse, er det afgørende at forstå den synlige viewport, især den realistiske minimumsvisning, da iOS's system-UI-elementer (brugerflade-elementer) optager en betydelig del af skærmen.
De elementer, der typisk reducerer den synlige viewport (uden rulning), inkluderer:
- Systemets statuslinje (øverst): Typisk 20px
- URL-linjen (øverst eller nederst i Safari): Typisk 44px
- Mellemrum (mellem elementer): Typisk 10px
- Safari-ikonlinjen (nederst): Typisk 44px
Det er dog vigtigt at bemærke, at i nyere iOS-versioner minimeres URL-linjen (til kun 20px) ved rulning ned, og ikonlinjen forsvinder helt. Men for at sikre, at dit indhold passer optimalt, bør du fokusere på den minimale pasform, altså den mindst mulige synlige viewport, når alle UI-elementer er til stede.
Lad os tage et eksempel med en iPhone SE 2, som ofte bruges som reference for en "minimal fit" iPhone:
| Mål | Bredde (px) | Højde (px) | Bemærkninger |
|---|---|---|---|
| Skærmopløsning | 750 | 1334 | Fysiske pixels. Den faktiske mængde lysende punkter på skærmen. |
| Fuldskærms Viewport | 375 | 667 | CSS-pixels (Device-Independent Pixels). Dette er den logiske størrelse uden system-UI-elementer. |
| Realistisk Minimum Viewport (Portræt) | 375 | 549 | Inkluderer fradrag for systemets brugerflade-elementer. |
Beregningen for den realistiske minimum viewport i portrættilstand (iPhone SE 2) er som følger: Start med den fulde viewport-højde (667px), og træk derefter de faste UI-elementer fra: 667 - 20 (statuslinje) - 44 (URL-linje) - 10 (mellemrum) - 44 (Safari ikonlinje) = 549px. Dette 549px er den højde, du kan regne med er synlig, når en bruger først lander på din side, og alle Safari-bjælker er synlige.
Mange designere glemmer denne reduktion, hvilket ofte resulterer i, at modaler eller vigtige elementer (som f.eks. et "luk X"-ikon) ender uden for det synlige område, især på mindre iPhone-modeller eller når brugeren ikke har rullet for at skjule UI-elementerne. Derfor er det afgørende at teste dine designs på rigtige enheder eller præcise simulatorer, der tager højde for disse UI-elementer.
Optimering for Den Bedste Mobiloplevelse
At skabe en fremragende mobiloplevelse handler om mere end bare at gøre indholdet responsivt. Det handler om at forstå de nuancer, som de forskellige viewports introducerer. Her er nogle nøgleprincipper for optimering:
- Brug Meta Viewport Tag: Sørg altid for at inkludere
<meta name="viewport" content="width=device-width, initial-scale=1.0">i din HTML. Dette fortæller browseren, at den skal indstille layout viewportens bredde til enhedens bredde i CSS-pixels og forhindre initial skalering, hvilket er fundamentalt for responsivt design. - Test på Rigtige Enheder: Selvom simulatorer er nyttige, er der ingen erstatning for at teste på en række fysiske iPhones for at forstå den sande brugeroplevelse, især med de dynamiske UI-elementer.
- Prioriter Indhold: Placer det vigtigste indhold "above the fold" – altså inden for den realistiske minimum viewport. Dette sikrer, at brugere ser det mest relevante, selv med systembjælkerne til stede.
- Fleksible Enheder: Brug relative enheder som
%,em,rem,vwogvh, hvor det giver mening, for at sikre, at dit design skalerer korrekt på tværs af forskellige skærmstørrelser og zoom-niveauer. - Overvej Brugerflade-Fradrag: Når du designer faste elementer (f.eks. navigationsbjælker), husk de pixel-fradrag, der er nødvendige for iOS's system-UI. Brug sikre områder og miljøvariabler som
env(safe-area-inset-top), hvis du designer for fuldskærmsoplevelser.
Ofte Stillede Spørgsmål
- Hvad er forskellen på skærmopløsning og viewport?
- Skærmopløsning refererer til det faktiske antal fysiske pixels på en skærm (f.eks. 750x1334px for iPhone SE 2). Viewporten (specifikt den fuldskærms browser viewport) refererer til den logiske størrelse i CSS-pixels (f.eks. 375x667px for iPhone SE 2), som websiden "ser". Forskellen skyldes pixel-forholdet, hvor flere fysiske pixels bruges til at tegne en enkelt CSS-pixel for at opnå højere skarphed.
- Hvorfor krymper min iframe, når jeg zoomer ind på siden?
- En iframe har sin egen viewport, der er baseret på dens tildelte dimensioner i forælderdokumentet. Hvis du zoomer ind på forælderdokumentet, ændres den effektive bredde af forælderdokumentets viewport. Hvis din iframe er defineret med relative enheder (som
50vw), vil den automatisk skalere i forhold til den nye, mindre effektive bredde af forældervinduet, hvilket får iframe'en til at virke mindre. - Hvordan påvirker iOS-bjælker den synlige viewport?
- iOS-systemets brugerflade-elementer som statuslinjen, URL-linjen og Safari-ikonlinjen optager fysisk plads på skærmen. Selvom de kan minimere eller forsvinde ved rulning, reducerer de den "realistiske minimum viewport" – det område, hvor dit indhold er garanteret synligt, når siden først indlæses, og alle UI-elementer er til stede. Dette er afgørende at overveje for at undgå, at vigtigt indhold eller interaktive elementer bliver skjult.
- Hvilken iPhone-model skal jeg bruge som reference for minimum viewport?
- Det anbefales ofte at bruge en model som iPhone SE 2 (eller tilsvarende, f.eks. iPhone 6/7/8), der har en mindre skærmstørrelse i CSS-pixels (375x667px fuldskærms). Når du trækker de faste iOS-UI-elementer fra, får du en "realistisk minimum viewport" på f.eks. 375x549px i portrættilstand. Ved at designe og teste for denne mindste fællesnævner sikrer du, at dit indhold ser godt ud på de fleste iPhones.
- Hvad betyder
vwogvhenheder? vwstår for "viewport width" ogvhstår for "viewport height". Disse er længdeenheder i CSS, hvor1vwsvarer til 1% af layout viewportens bredde, og1vhsvarer til 1% af layout viewportens højde. De er yderst nyttige til at skabe designs, der skalerer dynamisk med viewportens størrelse, og er en grundpille i moderne responsivt webdesign.
At forstå og anvende principperne for viewports er fundamentalt for enhver, der arbejder med webudvikling og design i dagens mobile-først-verden. Ved at tage højde for layout og visuelle viewports, samt de specifikke overvejelser for iframes, SVG'er og ikke mindst iPhones' system-UI, kan du sikre, at dine brugere får en fejlfri og optimal oplevelse, uanset hvilken enhed de bruger.
Hvis du vil læse andre artikler, der ligner Viewport på Mobilenheder: iPhone og Skærmtilpasning, kan du besøge kategorien Mobil.
