12/07/2025
I en verden, hvor brugere tilgår websites fra et utal af enheder – fra store desktop-skærme til små smartphones – er responsivt design ikke længere en luksus, men en absolut nødvendighed. At kunne tilpasse dit websites layout og funktionalitet dynamisk baseret på brugerens skærmstørrelse er afgørende for en god brugeroplevelse. En af de mest fundamentale opgaver i denne proces er at kunne aflæse den aktuelle bredde af browserens vindue eller selve HTML-dokumentet. Denne information danner grundlaget for mange responsive adfærdsmønstre i JavaScript.

Denne artikel vil dykke ned i, hvordan du effektivt kan hente vinduesbredden ved hjælp af både jQuery og ren JavaScript (også kendt som Vanilla JS). Vi vil udforske de forskellige metoder, deres nuancer, og hvordan du bedst implementerer dem for at sikre, at dit website reagerer korrekt, ikke kun ved indlæsning, men også når brugeren ændrer vinduesstørrelsen dynamisk.
Forståelse af Vinduesbredde i Webudvikling
Før vi går i detaljer med koden, er det vigtigt at forstå, hvad vi præcis måler. Når vi taler om vinduesbredde i JavaScript-kontekst, refererer vi ofte til to primære begreber:
- Viewport-bredde: Dette er den synlige del af vinduet, hvor dit website vises. Det inkluderer ikke scrollbars, vinduesrammer eller browserens UI (brugergrænseflade). Dette er typisk det, du vil bruge til at bestemme layout og justere elementer.
- Dokumentbredde: Dette er den samlede bredde af HTML-dokumentets indhold, inklusive eventuelt indhold, der strækker sig ud over den synlige viewport (f.eks. hvis der er horisontal scrolling).
Valget mellem at måle viewport- eller dokumentbredde afhænger af dit specifikke behov. I de fleste responsive design-scenarier er det viewport-bredden, der er mest relevant, da den afspejler den plads, dit indhold reelt har til rådighed.
jQuery's Tilgang: Den Nemme Vej med `.width()`
jQuery har længe været en favorit blandt webudviklere for dens evne til at simplificere DOM-manipulation og hændelseshåndtering. Når det kommer til at hente bredden af vinduet eller dokumentet, tilbyder jQuery en meget intuitiv metode: `.width()`.
Metoden `.width()` er designet til at give dig den aktuelle beregnede bredde for det første element i et sæt matchende elementer. Det unikke ved denne metode, sammenlignet med at bruge `.css('width')`, er, at `.width()` returnerer en enhedsløs pixelværdi (f.eks. `960`), hvorimod `.css('width')` ville returnere en værdi med enheder intakt (f.eks. `960px`). Dette gør `.width()` ideel, når en elements bredde skal bruges i matematiske beregninger, da du ikke behøver at parse strengen for at fjerne 'px'.
Her er hvordan du bruger den til at få bredden af vinduet og dokumentet:
// Returnerer bredden af browserens viewport (den synlige del af vinduet)
$(window).width();
// Returnerer bredden af hele HTML-dokumentet
$(document).width(); Brugen af `$(window)` og `$(document)` som jQuery-selektorer giver dig direkte adgang til disse globale objekters bredde, hvilket er ekstremt praktisk for responsive justeringer.
Forskellen mellem `.width()` og `.css('width')`
Som nævnt er den primære forskel returværdien. `.width()` er beregnet til at returnere den rene numeriske bredde, mens `.css('width')` returnerer den CSS-værdi, som den er defineret i stylesheets eller inline. Dette kan også inkludere padding og border, afhængigt af elementets `box-sizing` model, hvilket gør `.width()` mere forudsigelig for de fleste breddeberegninger.
| Metode | Returværdi | Anvendelse |
|---|---|---|
$(element).width() | Tal (antal pixels) | Matematiske beregninger, ren bredde uden enhed. |
$(element).css('width') | Streng (f.eks. '400px', '50%', 'auto') | Inspektion af CSS-egenskaber, ofte med enheder. |
Vanilla JavaScript: Kontrol og Fleksibilitet
Selvom jQuery tilbyder stor bekvemmelighed, er det ofte muligt og nogle gange endda at foretrække at bruge ren JavaScript, især i moderne projekter hvor ydeevne og filstørrelse er afgørende. I Vanilla JS får du adgang til vinduesbredden via `window.innerWidth`.
window.innerWidth er en egenskab, der returnerer bredden af vinduets layout-viewport i pixels. Dette inkluderer bredden af den vertikale scrollbar, hvis den er til stede. Det er den mest direkte og ofte foretrukne måde at hente viewport-bredden på i ren JavaScript.
const windowWidth = window.innerWidth;
console.log(windowWidth); // Output: f.eks. 1200For dokumentets bredde i Vanilla JS er tingene lidt mere nuancerede, da der ikke er en enkelt direkte egenskab, der altid fungerer på tværs af browsere for den samlede dokumentbredde, der inkluderer scrolling. Dog kan du ofte bruge kombinationer af `document.documentElement.clientWidth` (bredden af HTML-elementet uden scrollbars), `document.body.scrollWidth` (bredden af alt indhold i body, inklusive det, der er uden for viewporten) og `document.documentElement.scrollWidth`.

// Bredden af viewporten, eksklusive scrollbars
const clientWidth = document.documentElement.clientWidth;
// Bredden af body-indholdet (inkluderer ofte scrollbart indhold)
const bodyScrollWidth = document.body.scrollWidth;
// Den samlede bredde af HTML-dokumentet (inkluderer ofte scrollbart indhold)
const htmlScrollWidth = document.documentElement.scrollWidth;
// For den mest pålidelige 'dokumentbredde' kan man ofte bruge den største af disse
const documentWidth = Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.documentElement.clientWidth
);
console.log(documentWidth);For de fleste responsive designformål vil `window.innerWidth` være din foretrukne løsning i Vanilla JS.
Håndtering af Dynamiske Skærmstørrelser: `resize` Eventet
Et almindeligt problem, som mange udviklere støder på, er, at JavaScript-kode, der afhænger af vinduesbredden, kun udføres én gang – når siden indlæses. Dette er fint, hvis skærmstørrelsen forbliver statisk, men i dagens verden foretager brugere ofte størrelsesændringer på deres browser-vinduer (især på desktops), eller roterer deres mobile enheder, hvilket ændrer viewportens bredde.
Hvis din kode kun kontrollerer bredden ved `load`-eventet (som i eksemplet `window.addEventListener("load", function () { if (window.innerWidth < 960) { doSomething(); } })`), vil `doSomething()`-funktionen ikke blive aktiveret, hvis brugeren ændrer vinduets størrelse efter indlæsning. Dette er et problem, især under udvikling, hvor du ofte tester responsivitet ved at ændre browserens vinduesstørrelse.
Løsningen er at lytte efter `resize`-eventet på `window`-objektet. Dette event udløses, hver gang vinduets størrelse ændres. Ved at tilføje en event listener til `resize`-eventet kan du sikre, at din kode reagerer dynamisk på ændringer i vinduesbredden.
window.addEventListener("resize", (e) => {
const windowWidth = window.innerWidth;
if (windowWidth > 960) {
// Gør noget, når vinduet er bredere end 960px
doSomethingLarger();
}
if (windowWidth < 960) {
// Gør noget, når vinduet er smallere end 960px
doSomethingSmaller();
}
// Eller kald en enkelt funktion, der håndterer begge tilstande
handleResponsiveLogic(windowWidth);
});Denne tilgang sikrer, at din `doSomething()` (eller tilsvarende) funktion udføres, når vinduet indlæses (hvis du kombinerer det med `load`), og hver gang vinduet ændrer størrelse. Dette er afgørende for en robust responsiv implementering i JavaScript.
Den Bedste Praksis: Kombinere `load` og `resize`
For at opnå den mest pålidelige og umiddelbare responsive adfærd er den bedste praksis at kombinere logikken fra både `load`-eventet og `resize`-eventet. Dette sikrer, at din responsive logik kører, så snart siden er klar, og igen hver gang vinduet ændrer størrelse. En god måde at gøre dette på er ved at indkapsle din responsive logik i en navngivet funktion og derefter kalde denne funktion ved begge events.
function handleWindowSize() {
const windowWidth = window.innerWidth; // Eller $(window).width() med jQuery
if (windowWidth < 960) {
console.log("Vinduet er smallere end 960px");
// doSomethingForSmallScreens();
} else {
console.log("Vinduet er bredere end eller lig med 960px");
// doSomethingForLargeScreens();
}
}
// Kør logikken når siden indlæses
window.addEventListener("load", handleWindowSize);
// Kør logikken hver gang vinduet ændrer størrelse
window.addEventListener("resize", handleWindowSize);Denne kombination sikrer, at din applikation altid reflekterer den korrekte vinduesstørrelse, uanset om brugeren loader siden på en bestemt skærmstørrelse eller ændrer størrelsen dynamisk.
Typiske Faldgruber og Løsninger
Mens `resize`-eventet er utroligt nyttigt, kommer det med en potentiel faldgrube: performance. `resize`-eventet kan udløses mange gange i sekundet, mens en bruger trækker i vindueskanten. Hvis din `handleWindowSize` funktion udfører tunge DOM-manipulationer eller komplekse beregninger, kan dette føre til en hakkende brugeroplevelse.
Løsningen på dette er at debounce eller throttle `resize`-eventet. Disse teknikker begrænser, hvor ofte din funktion kan kaldes:
- Debouncing: Udfører funktionen efter en kort pause i event-udløsningen. Det vil sige, at funktionen kun udføres, når brugeren er færdig med at ændre størrelse.
- Throttling: Udfører funktionen højst én gang inden for en given tidsperiode, uanset hvor mange gange eventet udløses.
Debouncing er ofte det foretrukne valg for `resize`-events, da du typisk kun har brug for den endelige vinduesstørrelse, når brugeren er færdig med at justere.

function debounce(func, delay) {
let timeout;
return function() {
const context = this;
const args = arguments;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), delay);
};
}
const debouncedHandleWindowSize = debounce(handleWindowSize, 250); // Vent 250ms
// Kør logikken når siden indlæses
window.addEventListener("load", handleWindowSize); // Kør straks ved load
// Kør logikken debounced ved resize
window.addEventListener("resize", debouncedHandleWindowSize);Ved at implementere en debounce-funktion sikrer du, at din responsive logik kører effektivt uden at overbelaste browseren under størrelsesændring.
Media Queries vs. JavaScript for Responsivitet
Det er vigtigt at bemærke, at JavaScript-baserede responsive justeringer ofte supplerer CSS media queries, snarere end at erstatte dem. Media queries er den primære og mest effektive måde at håndtere layout-ændringer på baseret på skærmstørrelse, da de er deklarative og håndteres af browseren på et lavere niveau.
- Brug CSS Media Queries til: Layoutændringer, skjul/vis elementer, ændring af skrifttypestørrelser, justering af billedstørrelser. Generelt alt, der primært handler om præsentation og styling.
- Brug JavaScript til: Dynamiske interaktioner, indlæsning af specifikt indhold baseret på skærmstørrelse, justering af funktionalitet, sporing af brugeradfærd, eller når CSS alene ikke kan opnå den ønskede effekt (f.eks. at beregne en elements position baseret på flere dynamiske faktorer).
For eksempel, hvis du havde brug for at oprette en 'slide down' navigationsknap, ville media queries kontrollere bredden af vinduet for at se, hvad enhedens størrelse er. Du kan derefter bruge JavaScript til at tilføje funktionaliteten til knappen (f.e. at toggles navigationen). Kombinationen af de to giver den mest robuste og vedligeholdelsesvenlige løsning.
| Egenskab/Metode | Formål | Returværdi | Bemærkninger |
|---|---|---|---|
window.innerWidth | Viewport bredde (inkl. scrollbar) | Tal (pixels) | Vanilla JS, anbefalet til viewport bredde. |
$(window).width() | Viewport bredde (uden scrollbar) | Tal (pixels) | jQuery, praktisk og enhedsløs. |
$(document).width() | HTML-dokumentets bredde | Tal (pixels) | jQuery, den samlede bredde af dokumentindholdet. |
document.documentElement.clientWidth | HTML-elements bredde (viewport uden scrollbar) | Tal (pixels) | Vanilla JS, nyttig for det synlige dokumentområde. |
.css('width') | Elementets CSS-definerede bredde | Streng (f.eks. '400px') | jQuery, returnerer CSS-værdi med enheder. |
Ofte Stillede Spørgsmål (FAQ)
Hvad er forskellen på `window.innerWidth` og `$(window).width()`?
Den primære forskel er, at `window.innerWidth` (Vanilla JS) inkluderer bredden af den vertikale scrollbar i sin beregning, hvorimod `$(window).width()` (jQuery) normalt ikke gør. For de fleste responsive formål er forskellen ofte minimal, men det er godt at være opmærksom på, hvis du har meget præcise layoutkrav.
Hvornår skal jeg bruge `$(document).width()`?
Du skal bruge `$(document).width()` når du har brug for den samlede bredde af hele HTML-dokumentets indhold, inklusive den del, der kan strække sig ud over den aktuelle viewport (f.eks. hvis der er horisontal scrolling). Dette er mindre almindeligt end at måle viewport-bredden, men nyttigt for at forstå den samlede 'skal' af dit indhold.
Er det en god idé at bruge `resize` eventet til alt responsivt design?
Nej. For layout og styling bør du primært stole på CSS media queries. JavaScript `resize` events bør reserveres til dynamiske adfærdsændringer, komplekse beregninger, eller når CSS alene ikke kan opnå den ønskede interaktion. Overforbrug af JavaScript til rene layoutjusteringer kan føre til performanceproblemer og et mindre vedligeholdelsesvenligt codebase.
Hvordan undgår jeg performanceproblemer med `resize` events?
Den bedste måde at undgå performanceproblemer på er at debounce eller throttle din event handler-funktion. Dette begrænser, hvor ofte funktionen udføres, når vinduet ændrer størrelse. Debouncing er ofte foretrukket for `resize` events, da det sikrer, at din funktion kun kører, når brugeren er færdig med at ændre størrelse, hvilket minimerer unødvendige gentagne beregninger eller DOM-manipulationer.
At kunne aflæse og reagere på vinduesbredden er en grundlæggende færdighed for enhver webudvikler, der arbejder med responsive designs. Ved at mestre de metoder, der er beskrevet her, uanset om du foretrækker jQuery's bekvemmelighed eller Vanilla JS's kontrol, kan du bygge mere robuste, fleksible og brugervenlige websites, der tilpasser sig smukt til ethvert miljø.
Hvis du vil læse andre artikler, der ligner Få Vinduesbredde: jQuery vs. Vanilla JS, kan du besøge kategorien Teknologi.
