What is the difference between screen orientation and Device Orientation?

Optimer Din Mobiloplevelse: Registrering af Skærmorientering

29/12/2022

Rating: 4.98 (3029 votes)

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.

How can I identify orientation by CSS media queries?
We can identify orientation by CSS media queries as well: If you'd like to get clever, you can code a periodical "watcher" with JavaScript to check the background color of a block and fire your own orientation change. The native window.matchMedia method allows for live media-querying.
Indholdsfortegnelse

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.

How can I identify orientation by CSS media queries?
We can identify orientation by CSS media queries as well: If you'd like to get clever, you can code a periodical "watcher" with JavaScript to check the background color of a block and fire your own orientation change. The native window.matchMedia method allows for live media-querying.
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 matchMedia eller orientationchange) 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:

MetodeFordeleUlemperBedst til
CSS Media Queries (@media (orientation:...))
  • Deklarativ og let at bruge
  • Fremragende ydeevne
  • Håndteres direkte af browseren
  • Ingen JavaScript nødvendig for layout
  • Kan ikke udføre logiske handlinger
  • Påvirkes af virtuelt tastatur
Visuelle layoutjusteringer, responsive designs
JavaScript orientationchange Event
  • Direkte API for orienteringsskift
  • Specifik for mobile enheder
  • Kan udløse JS-logik
  • Ikke understøttet af alle browsere/enheder
  • Kan udløses ved tastaturpop-up på nogle enheder
Programmatisk logik, der reagerer på orientering (mobil-specifik)
JavaScript resize Event + Størrelsescheck
  • Meget bred browserunderstøttelse
  • God fallback-løsning
  • Kan udløse JS-logik
  • Mindre specifik (udløses ved enhver størrelsesændring)
  • Kræver manuel logik til orienteringsudledning
  • Kan føre til overdreven udførelse uden "throttling"
Generel vinduesstørrelsesjustering, fallback for orientering
JavaScript window.matchMedia API
  • Moderne og fleksibel
  • Kombinerer CSS media query-logik med JS
  • Performant event-lytter
  • Kan lytte til enhver media query
  • Kræver JavaScript
  • Lidt mere kompleks opsætning end simpel event-lytter
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 JavaScript window.matchMedia("(orientation: ...)") fungerer også på desktop-browsere, når du ændrer størrelsen på browservinduet. orientationchange-begivenheden og window.orientation er 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/innerHeight refererer 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.

Go up