29/12/2022
I dagens digitale verden, hvor mobiltelefoner og tablets er vores primære adgangspunkter til internettet, er det afgørende, at websites og webapplikationer tilpasser sig den måde, brugerne interagerer med dem på. En af de mest fundamentale tilpasninger er evnen til at reagere på ændringer i skærmorienteringen. Forestil dig en bruger, der roterer sin telefon fra lodret (portræt) til vandret (landskab) for bedre at se et billede eller en video; dit website bør øjeblikkeligt justere layoutet for at give den bedst mulige brugeroplevelse. Denne artikel dykker ned i, hvordan du kan registrere og håndtere disse orienteringsskift ved hjælp af både CSS og JavaScript, og sikrer, at dit indhold altid præsenteres optimalt.

Hvad er Skærmorientering, og Hvorfor er det Vigtigt?
Skærmorientering refererer til den måde, en mobil enheds skærm er justeret på – enten i portræt (højere end bred) eller landskab (bredere end høj). For udviklere er det essentielt at forstå forskellen mellem skærmorientering og enheds-orientering. Selvom de ofte forveksles, er skærmorientering den faktiske visning af browserens vindue eller viewport, mens enheds-orientering er den fysiske orientering af selve enheden. En enhed har sensorer (som et gyroskop eller accelerometer) til at detektere sin egen fysiske orientering, men for webapplikationer er det primært skærmens orientering, der er relevant, da det er den, der påvirker layoutet.
At kunne justere dit website baseret på skærmorientering er en hjørnesten i responsivt design. Et veludført responsivt design sikrer, at dit indhold er læsbart, navigationsvenligt og æstetisk tiltalende, uanset enhedens størrelse og orientering. Uden denne tilpasning risikerer du, at brugere skal scrolle horisontalt, zoome ind og ud, eller opleve ødelagte layouts, hvilket fører til frustration og i sidste ende, at de forlader dit site.
Registrering af Orientering med CSS Media Queries
En af de mest elegante og effektive måder at tilpasse dit layout på baggrund af skærmorientering er ved brug af CSS media queries. Denne metode giver dig mulighed for at anvende specifikke stilarter, når browserens viewport matcher bestemte betingelser, herunder orientering.
@media (orientation: portrait) og @media (orientation: landscape)
CSS tilbyder en specifik medieegenskab kaldet orientation, der kan bruges til at detektere, om viewporten er i portræt- eller landskabstilstand. Reglen er simpel: hvis viewportens højde er større end eller lig med dens bredde, er orienteringen portrait; ellers er den landscape.
Her er et grundlæggende eksempel på, hvordan du kan bruge dette i din CSS:
/* Stilarter, der gælder for portræt-tilstand */ @media screen and (orientation: portrait) { body { background-color: lightblue; flex-direction: column; /* Eksempel: Ændrer flex-retningen */ } .hero-image { max-width: 100%; height: auto; } } /* Stilarter, der gælder for landskab-tilstand */ @media screen and (orientation: landscape) { body { background-color: lightgreen; flex-direction: row; /* Eksempel: Ændrer flex-retningen */ } .hero-image { max-width: 80%; /* Mindre i landskab for at give plads til andet indhold */ height: auto; } } I eksemplet ovenfor ændrer vi baggrundsfarven og flex-retningen på body-elementet afhængigt af orienteringen. Dette er særligt nyttigt for at omarrangere indhold, justere billedstørrelser eller ændre navigationsmenuer. For eksempel, i portræt kan en navigationsmenu folde ud vertikalt, mens den i landskab kan vises horisontalt.
Vigtigt at Bemærke: Virtuelle Tastaturer
En kritisk detalje ved brugen af orientation medieegenskaben er, at den baserer sig på browserens viewport og ikke den fysiske enheds orientering. Dette har en vigtig konsekvens, især på mobile enheder: Når et virtuelt tastatur (f.eks. på en smartphone) dukker op, kan det reducere viewportens højde betydeligt. Hvis viewportens bredde pludselig bliver større end dens reducerede højde, vil browseren skifte til at anvende landscape-stilarterne, selvom enheden fysisk stadig holdes i portræt. Dette er en almindelig faldgrube, der kan føre til uventede layoutændringer, og som udviklere skal være opmærksomme på, når de designer interaktive felter som formularer.
Fordelen ved CSS media queries er, at de er deklarative, performante og håndteres direkte af browseren, hvilket ofte resulterer i glattere overgange og bedre ydeevne sammenlignet med JavaScript-baserede løsninger til ren layoutjustering.
JavaScript-Metoder til Registrering af Orientering
Mens CSS er fremragende til visuelle layoutjusteringer, er JavaScript nødvendigt, hvis du har brug for at udføre programmatiske handlinger, når orienteringen ændres – f.eks. at opdatere data, udløse animationer eller ændre funktionalitet. Der findes flere metoder til dette:
1. orientationchange-begivenheden
Den mest direkte JavaScript-metode er orientationchange-begivenheden, som udløses på window-objektet, når enhedens orientering ændres. Dette er den mest intuitive API for mobile enheder.

window.addEventListener("orientationchange", function() { // Denne kode køres, når orienteringen ændres const currentOrientation = screen.orientation.angle; // Moderne API // Eller den ældre window.orientation // const currentOrientation = window.orientation; if (currentOrientation === 0) { console.log("Portræt-tilstand (0 grader)"); // Udfør portræt-specifik logik her } else if (currentOrientation === 90 || currentOrientation === -270) { console.log("Landskab-tilstand (90 grader, venstre)"); // Udfør landskab-specifik logik her } else if (currentOrientation === -90 || currentOrientation === 270) { console.log("Landskab-tilstand (-90 grader, højre)"); // Udfør landskab-specifik logik her } else if (currentOrientation === 180) { console.log("Portræt-tilstand (180 grader, hovedet ned)"); // Udfør portræt-specifik logik her } // Du kan også bruge screen.orientation.type (f.eks. "portrait-primary", "landscape-secondary") console.log("Ny orienteringstype:", screen.orientation.type); }); window.orientation er en ældre, men stadig udbredt egenskab, der returnerer vinkler (0 for portræt, 90 for landskab til venstre, -90 for landskab til højre, og 180 for omvendt portræt). Den mere moderne og anbefalede metode er screen.orientation.angle og screen.orientation.type, som giver mere detaljerede oplysninger.
2. resize-begivenheden
Nogle ældre eller mindre almindelige enheder understøtter muligvis ikke orientationchange-begivenheden, men de udløser næsten altid resize-begivenheden på window-objektet, når viewportens dimensioner ændres. Du kan bruge denne begivenhed i kombination med window.innerWidth og window.innerHeight for at udlede orienteringen.
window.addEventListener("resize", function() { // Denne kode køres, når vinduesstørrelsen ændres const width = window.innerWidth; const height = window.innerHeight; if (width > height) { console.log("Landskab-tilstand (udledt via størrelse)"); // Udfør landskab-specifik logik her } else { console.log("Portræt-tilstand (udledt via størrelse)"); // Udfør portræt-specifik logik her } }); Denne metode er mindre specifik end orientationchange, da den udløses ved enhver størrelsesændring (f.eks. resizing af browservinduet på en desktop), men den fungerer som en solid fallback for at bestemme, om bredden er større end højden.
3. Screen Sizing Egenskaber (innerWidth, outerWidth osv.)
Udover at lytte til resize-begivenheden kan du altid manuelt tjekke skærmstørrelsesegenskaberne for at bestemme den aktuelle orientering. De vigtigste egenskaber er:
window.innerWidth,window.innerHeight: Repræsenterer viewportens "virtuelle" pixel dimensioner (det synlige område af websiden).window.outerWidth,window.outerHeight: Repræsenterer browserens samlede vinduesdimensioner i faktiske skærmpixels, inklusive browserens UI (f.eks. faner, adressebar).screen.width,screen.height: Repræsenterer den fysiske skærms fulde resolution. Disse ændrer sig ikke med orienteringen, men de kan give en indikation af den maksimale tilgængelige plads.
For orienteringsdetektion er window.innerWidth og window.innerHeight mest relevante, da de direkte afspejler det område, dit indhold optager. Du kan bruge en simpel sammenligning:
if (window.innerWidth > window.innerHeight) { console.log("Aktuelt i landskab-tilstand."); } else { console.log("Aktuelt i portræt-tilstand."); } 4. window.matchMedia API
window.matchMedia er en moderne og kraftfuld JavaScript API, der giver dig mulighed for at "spørge" om medieforespørgsler i realtid og lytte til ændringer. Det er en elegant måde at kombinere fleksibiliteten ved JavaScript med logikken fra CSS media queries.
// Opret en MediaQueryList-objekt for portræt-orientering const portraitMediaQuery = window.matchMedia("(orientation: portrait)"); // Tjek den aktuelle tilstand if (portraitMediaQuery.matches) { console.log("Aktuelt i portræt-tilstand via matchMedia."); // Udfør portræt-specifik JS-logik } else { console.log("Aktuelt i landskab-tilstand via matchMedia."); // Udfør landskab-specifik JS-logik } // Lyt til ændringer i orienteringen portraitMediaQuery.addListener(function(mql) { if (mql.matches) { console.log("Skiftede til portræt-tilstand."); // Udfør logik ved skift til portræt } else { console.log("Skiftede til landskab-tilstand."); // Udfør logik ved skift til landskab } }); matchMedia er ofte den foretrukne JavaScript-metode, da den er performant, understøtter alle CSS media query-funktioner og giver en ren API til at håndtere tilstande og ændringer. Den er især god, når du ønsker at synkronisere JavaScript-logik med dine CSS media query-breakpunkter.
Praktiske Anvendelser og Bedste Praksis
At kunne registrere orienteringsændringer åbner op for en række optimeringer:
- Layoutjusteringer: Som nævnt er dette det primære brugsområde. Omlægning af elementer, ændring af grid-systemer eller skjuling/visning af specifikke komponenter.
- Billedoptimering: Indlæsning af forskellige billedstørrelser eller beskæringer, der passer bedre til den aktuelle orientering, især for baggrundsbilleder eller hero-sektioner.
- Videoafspilning: Skifte til fuldskærmstilstand automatisk, når en video ses i landskab.
- Datavisualisering: Tilpasning af diagrammer og grafer, så de udnytter den tilgængelige plads bedst muligt i den givne orientering.
- Spil og Interaktive Applikationer: Justering af spillets UI eller kontrolskema.
Hvornår skal man bruge hvad?
Som tommelfingerregel:
- Brug CSS media queries til rene visuelle og layoutmæssige ændringer. Dette er den mest performante og vedligeholdelsesvenlige løsning for designjusteringer.
- Brug JavaScript (helst
matchMediaellerorientationchange) til at udløse logiske handlinger, dataopdateringer, eller til at synkronisere komplekse UI-komponenter, der ikke kan håndteres med ren CSS. Undgå at bruge JavaScript til at manipulere CSS-egenskaber, som kan håndteres direkte af media queries.
Ydeevneovervejelser: Vær opmærksom på ikke at tilføje for mange resize- eller orientationchange-eventlisteners, der udfører tunge beregninger. Disse begivenheder kan udløses hyppigt. Overvej at "debounce" eller "throttle" dine eventhandlere for at forhindre overdreven udførelse og sikre en glat brugeroplevelse.
Sammenligning af Metoder til Orienteringsregistrering
For at give et bedre overblik, er her en sammenlignende tabel over de diskuterede metoder:
| Metode | Fordele | Ulemper | Bedst til |
|---|---|---|---|
CSS Media Queries (@media (orientation:...)) |
|
| Visuelle layoutjusteringer, responsive designs |
JavaScript orientationchange Event |
|
| Programmatisk logik, der reagerer på orientering (mobil-specifik) |
JavaScript resize Event + Størrelsescheck |
|
| Generel vinduesstørrelsesjustering, fallback for orientering |
JavaScript window.matchMedia API |
|
| Synkronisering af JS-logik med CSS media queries, komplekse responsive UI-komponenter |
Ofte Stillede Spørgsmål (FAQ)
- Hvad er forskellen på skærmorientering og enheds-orientering?
- Skærmorientering handler om browserens vinduesdimensioner (viewportens bredde og højde) og hvordan indholdet vises. Enheds-orientering er den fysiske orientering af selve hardware-enheden, ofte detekteret af indbyggede sensorer. For webudvikling er skærmorientering primært relevant, da den direkte påvirker layoutet.
- Hvornår skal jeg bruge CSS media queries frem for JavaScript?
- Brug CSS media queries til alle visuelle og layoutmæssige ændringer. De er mere performante og deklarative. Brug JavaScript, når du har brug for at udløse programmatiske handlinger, foretage dataopdateringer, eller når du skal håndtere kompleks interaktion, der ikke kan løses med ren CSS.
- Kan jeg registrere orientering på desktop-browsere?
- Ja, CSS
@media (orientation: ...)og JavaScriptwindow.matchMedia("(orientation: ...)")fungerer også på desktop-browsere, når du ændrer størrelsen på browservinduet.orientationchange-begivenheden ogwindow.orientationer dog typisk kun tilgængelige på mobile enheder. - Hvad er 'viewport' i denne sammenhæng?
- Viewport er det synlige område af din webside i browseren. Det er viewportens dimensioner (bredde og højde), som CSS media queries og JavaScript
innerWidth/innerHeightrefererer til, når de bestemmer orienteringen. - Påvirker det virtuelle tastatur orienteringsregistrering?
- Ja, et virtuelt tastatur, der dukker op på en mobil enhed, kan reducere viewportens højde betydeligt. Dette kan få browseren til at tro, at orienteringen er skiftet til landskab (hvis bredden nu er større end den reducerede højde), selvom enheden fysisk stadig holdes i portræt. Dette er en vigtig faldgrube at være opmærksom på ved design af inputfelter.
Konklusion
Effektiv håndtering af skærmorientering er en uundværlig del af moderne webudvikling for mobile enheder. Ved at udnytte kraften i både CSS media queries til layoutjusteringer og JavaScript-metoder som orientationchange, resize og især matchMedia til programmatiske handlinger, kan du skabe robuste og dynamiske weboplevelser. Husk at vælge den rette metode til opgaven, være opmærksom på ydeevne og potentielle kanttilfælde som virtuelle tastaturer, og du vil være godt på vej til at levere et problemfrit og brugervenligt website til alle dine mobile brugere.
Hvis du vil læse andre artikler, der ligner Optimer Din Mobiloplevelse: Registrering af Skærmorientering, kan du besøge kategorien Mobiludvikling.
