A dvh (Dynamic Viewport Height) egy modern CSS mértékegység, amely a böngésző
aktuálisan látható magasságához igazodik. Ez elsőre apróságnak tűnik, a gyakorlatban
viszont egy olyan hibát old meg, amivel szinte minden webfejlesztő találkozott már.
Ha valaha építettél teljes képernyős hero szekciót, és mobilon vagy levágta az alját a böngésző címsora, vagy megjelent egy zavaró görgetősáv — ez a cikk neked szól.
Ez az útmutató végigmegy az egészen: miért tört el a 100vh, mit jelent pontosan a
svh, lvh és dvh, kész receptek a leggyakoribb
elrendezésekhez, és azok a buktatók, amikbe éles projekten tényleg bele lehet futni.
Miért okozott gondot a 100vh?
A vh egység definíció szerint a viewport magasságának egy százaléka.
Asztali gépen ez teljesen egyértelmű: a böngészőablak tartalmi területe nem változik görgetés közben.
Mobilon viszont igen. A címsor és az alsó navigációs sáv lefelé görgetve összecsukódik,
felfelé görgetve újra megjelenik — a látható terület tehát folyamatosan mozog. A böngészőknek
dönteniük kellett, mit jelentsen ilyenkor a vh, és a legtöbben azt választották,
hogy rögzítik a legnagyobb lehetséges értéket: azt, amikor a böngésző felülete
teljesen összecsukódott.
Ennek két látható következménye lett:
- egy
height: 100vhszekció alja induláskor a képernyő alá lóg, - a „pontosan egy képernyő magas” dizájn mégis görgethetővé válik,
- a hero aljára tervezett gomb vagy scroll-jelzés kicsúszik a látótérből.
Évekig kerülő megoldásokkal éltünk: JavaScriptből mértük a valódi magasságot, és egy CSS
változóba írtuk (--vh), majd calc()-csal szoroztuk vissza.
Működött, de egy layout-alapproblémát oldott meg futásidejű kóddal.
A viewport egységek új családja
A CSS ma már nem egyetlen viewport-magasságot ismer, hanem hármat — mert mobilon valóban három különböző értelmes válasz létezik a kérdésre, hogy „mekkora a képernyő”.
svh(small viewport height) — a legkisebb látható magasság, vagyis amikor a böngésző minden felülete látszik.lvh(large viewport height) — a legnagyobb látható magasság, amikor a címsor és a navigáció összecsukódott. Ez az, amit a legtöbb böngészővh-ként ad vissza.dvh(dynamic viewport height) — a pillanatnyi érték, ami görgetés közben követi a böngésző felületének mozgását.
A három érték sorrendje mindig ugyanaz: svh ≤ dvh ≤ lvh.
A 100dvh tehát nem egy fix szám, hanem egy élő érték, ami e két szélső határ között
mozog: mindig annyi, amennyi hely éppen tényleg rendelkezésre áll.
Avhazt mondja meg, mekkora lehet a képernyő. Advhazt, mekkora most.
Jó tudni: asztali gépen és telepített (standalone) PWA-ban nincs összecsukódó böngészőfelület, így ott mind a három egység ugyanazt az értéket adja. A különbség csak ott jelenik meg, ahol tényleg mozog valami — vagyis mobil böngészőben.
Gyorsreferencia: melyiket mikor?
Ha csak egy dolgot viszel el ebből a cikkből, ez a táblázat legyen az. A többi szakasz lényegében ezt bontja ki.
| Egység | Mit ad vissza | Változik görgetéskor? | Mire használd |
|---|---|---|---|
vh |
a régi viselkedés; mobilon jellemzően a nagy viewport | nem | új kódban legfeljebb fallbackként |
svh |
a legkisebb látható magasság | nem | ahol garantáltan el kell férni: app-váz, alsó sáv, scroll-snap |
lvh |
a legnagyobb látható magasság | nem | ritkán: háttérrétegek, ahol a kilógás szándékos |
dvh |
a pillanatnyi látható magasság | igen | hero szekció, teljes képernyős overlay, modál |
Ökölszabálynak jó: dizájnhoz dvh, garanciához svh.
Ha valaminek mindig látszania kell, ne a dinamikus értékre bízd.
A leggyakoribb eset: a hero szekció
Az alapvető használat pontosan olyan egyszerű, amilyennek látszik:
.hero {
min-height: 100dvh;
}
Két apró, de fontos részlet van ebben a három sorban. Az egyik a min-height a
height helyett: így ha a tartalom mégis magasabb lenne egy képernyőnél, nem vágódik
le, hanem szépen kifut. A másik, hogy a dvh már a fallback nélkül is helyes
eredményt ad ott, ahol támogatott.
Ha régebbi böngészőket is ki kell szolgálnod, a fallback egyetlen extra sor. A CSS a legutolsó
értelmezhető szabályt alkalmazza, így a dvh-t nem ismerő böngésző egyszerűen
átugorja a második deklarációt:
.hero {
min-height: 100vh; /* régebbi böngészők */
min-height: 100dvh; /* mindenki más */
}
Nem kell hozzá @supports, nem kell hozzá JavaScript, és nem kell hozzá build lépés.
Hero fix fejléc alatt
A gyakorlatban a hero ritkán kezdődik a képernyő tetején — jellemzően van fölötte egy fix
navigáció. A viewport egységek nyugodtan használhatók calc()-on belül, így a
fejléc magassága egyszerűen levonható:
:root {
--header-h: 4rem;
}
.hero {
min-height: calc(100vh - var(--header-h));
min-height: calc(100dvh - var(--header-h));
display: grid;
place-content: center;
}
A fejléc magasságát érdemes CSS változóban tartani: így ugyanaz az érték használható a
scroll-margin-top-hoz, a mobilmenü pozicionálásához és a hero számításához is.
Receptek valós elrendezésekhez
A viewport egységeknél ritkán az a kérdés, hogy „mit jelent a dvh” — sokkal
inkább az, hogy ebben a konkrét elrendezésben melyik a jó. Négy visszatérő eset,
kész kóddal.
1. App-váz: fejléc, görgethető törzs, alsó sáv
Ez a klasszikus mobilapp-szerű felület: fent egy fejléc, lent egy navigációs sáv, közte
görgethető tartalom. Itt nem dvh kell, hanem svh.
.app {
height: 100svh; /* soha nem ígér több helyet a valóságosnál */
display: grid;
grid-template-rows: auto 1fr auto;
}
.app__main {
min-height: 0; /* enélkül a grid-sor nem tud zsugorodni */
overflow-y: auto;
}
Két dolog történik itt. Egyrészt a min-height: 0: grid és flex elrendezésben egy
elem alapból nem zsugorodik a tartalma alá, így enélkül a görgethető sáv kilökné az alsó
navigációt a képernyőről. Ez a leggyakoribb oka annak, ha „elméletileg jó” az elrendezés,
mégis kilóg.
Másrészt a svh: mivel itt nem a dokumentum görget, hanem egy belső elem, a böngésző
felülete jellemzően ki sem csukódik. A svh az egyetlen érték, ami ilyenkor
garantáltan igaz marad.
2. Teljes képernyős szekciók scroll-snappel
Slide-szerű, egész képernyős szekciók, amik pattannak a helyükre. Itt is svh a
helyes választás — méghozzá elvi okból:
.slides {
height: 100svh;
overflow-y: auto;
scroll-snap-type: y mandatory;
}
.slides > section {
height: 100svh;
scroll-snap-align: start;
}
Ha a snap-pontok magassága görgetés közben változna, a böngésző a saját számításai ellen
dolgozna: minden görgetés elmozdítaná a célpontot, amit épp el akar érni. Az eredmény ugráló,
„visszarántós” görgetés. A svh fix érték, tehát minden slide biztosan elfér, és a
snap kiszámítható marad.
3. Alulról felcsúszó lap (bottom sheet)
Itt viszont a dvh az igazi: egy fix pozíciójú overlay-nek pont az a dolga, hogy a
pillanatnyilag látható területhez igazodjon.
.sheet {
position: fixed;
inset-inline: 0;
bottom: 0;
max-height: 85dvh; /* marad egy sáv a háttérből */
overflow-y: auto;
padding-bottom: env(safe-area-inset-bottom, 0px);
}
A max-height a lényeg: a lap annyi helyet foglal, amennyit a tartalma kíván, de
soha nem nő a képernyő 85%-a fölé. Rövid tartalomnál alacsony marad, hosszúnál görgethetővé
válik — külön szabály nélkül.
4. Oldalsó menü (drawer)
És egy recept, amiben a legjobb megoldás az, hogy nincs benne viewport egység:
.drawer {
position: fixed;
top: 0;
bottom: 0; /* nem kell magasságegység */
inset-inline-start: 0;
width: min(20rem, 80vw);
overflow-y: auto;
}
A top: 0; bottom: 0 páros ugyanazt éri el, mint a height: 100dvh,
csak a böngészőnek nem kell hozzá egy mozgó egységet újraszámolnia. Erről bővebben a következő
szakaszban.
dvh vagy 100%? Mikor nem viewport egység kell
A viewport egységek annyira kézre esnek, hogy könnyű túlhasználni őket. Pedig a legtöbb „töltse ki a helyet” feladathoz egyáltalán nem a képernyő mérete kell.
Fix overlay: inset: 0 jobb, mint 100dvh
Egy teljes képernyős modál háttérrétegnél a height: 100dvh működik ugyan, de
feleslegesen köti az elemet egy mozgó értékhez:
/* Működik, de fölösleges */
.overlay {
position: fixed;
top: 0;
inset-inline: 0;
height: 100dvh;
}
/* Jobb */
.overlay {
position: fixed;
inset: 0;
}
A második verzió a tartalmazó blokkhoz igazodik, nem egy egységhez — nincs benne számolás, nincs mit újraértékelni görgetés közben, és nem tud „egy pixellel mellé” menni.
Százalék: a szülőhöz igazodik, nem a képernyőhöz
A height: 100% a szülőelem magasságának a százaléka, és csak akkor
működik, ha megszakítatlan magasságlánc vezet fel egészen a html elemig. Ezért
élt évekig a jól ismert kezdősor:
html, body {
height: 100%;
}
Ha ez a lánc megvan, a beágyazott elemeknél a 100% gyakran a helyesebb
választás: a szülőjét tölti ki, nem a képernyőt. Egy kártyán belüli kép például akkor is
helyesen viselkedik, ha a kártya fél képernyő magas.
Döntési szabály: viewport egységet csak akkor használj, ha az elemnek
tényleg a képernyőhöz kell viszonyulnia. Ha a szülőjéhez, akkor százalék, flex vagy
grid a helyes eszköz — komponensen belül pedig a container query egységek
(cqh, cqi).
A virtuális billentyűzet
Ez az a pont, ahol a legtöbb félreértés keletkezik, ezért érdemes pontosan érteni: a felugró
mobilbillentyűzet alapértelmezés szerint nem változtatja meg a
dvh értékét.
A böngésző ilyenkor a vizuális viewportot csökkenti — vagyis azt, amit épp látsz —,
de a layout viewportot, amihez a CSS egységek igazodnak, változatlanul hagyja.
Ennek a következménye a klasszikus hiba: egy 100dvh magas app-váz alsó gombja
eltűnik a billentyűzet mögött, amikor a felhasználó egy mezőbe kattint.
A meta tag megoldás
A viewport meta tag interactive-widget beállításával megmondható a böngészőnek,
hogy a billentyűzet a layout viewportot is zsugorítsa. Ekkor a dinamikus viewport egységek is
követni fogják:
<meta name="viewport"
content="width=device-width, initial-scale=1, interactive-widget=resizes-content">
Három érték létezik:
resizes-visual— az alapértelmezés: csak a vizuális viewport zsugorodik,resizes-content— a layout viewport is zsugorodik, tehát advhis követ,overlays-content— a billentyűzet egyszerűen ráúszik, semmi nem változik.
Ez a beállítás az egész oldalra vonatkozik, tehát nem valami, amit egy komponens miatt érdemes bekapcsolni — akkor van értelme, ha az oldal jellemzően űrlap- vagy chat-szerű felület. A támogatottsága böngészőnként eltér, ezért kezeld progresszív fejlesztésként: működjön az oldal nélküle is.
Ha pontos érték kell: Visual Viewport API
Ahol tényleg a billentyűzet fölé kell pozicionálni valamit — chat beviteli mező, mobil űrlapnavigáció —, ott a Visual Viewport API adja a pontos számot:
const vv = window.visualViewport;
if (vv) {
const sync = () => {
document.documentElement.style
.setProperty('--vvh', `${vv.height}px`);
};
vv.addEventListener('resize', sync);
vv.addEventListener('scroll', sync);
sync();
}
Igen, ez visszahozza a JavaScriptet — de most már csak erre az egy, tényleg speciális esetre,
nem minden teljes képernyős szekcióhoz. Ez a különbség a régi --vh hackhez képest:
ott a szabály volt JavaScriptes, itt a kivétel.
Biztonságos zónák: env(safe-area-inset-*)
A 100dvh megmondja, mekkora a látható terület — de nem azt, hogy annak mekkora
része használható. A kivágás (notch), a lekerekített sarkok és az alsó
gesztussáv mind a látható területbe esnek, mégsem érdemes tartalmat tenni alájuk.
Ehhez két dolog kell. Először a meta tagben engedélyezni a teljes képernyős kirajzolást:
<meta name="viewport"
content="width=device-width, initial-scale=1, viewport-fit=cover">
Utána a env() függvénnyel lehet elkerülni a veszélyes zónákat:
.hero {
min-height: 100dvh;
padding-block-end: calc(2rem + env(safe-area-inset-bottom, 0px));
}
.bottom-bar {
position: fixed;
inset-inline: 0;
bottom: 0;
padding-bottom: env(safe-area-inset-bottom, 0px);
}
A második paraméter (0px) a fallback: enélkül a env() ismeretlen
változónévvel érvénytelenné tenné az egész deklarációt olyan böngészőkben, amelyek nem
ismerik. Mindig írd ki.
Gyakori félreértés: a viewport-fit=cover nélkül a
safe-area-inset-* értékek nullák. Ha kiteszed a env()-eket, de nem
látsz semmi változást, valószínűleg ez hiányzik.
Amire érdemes figyelni
A dvh ereje egyben a korlátja is: az értéke tényleg változik görgetés közben,
és a böngészőnek emiatt újra kell számolnia az elrendezést.
Ne animálj vele
Ha egy dvh-ban megadott magasság CSS átmenettel van ellátva, a böngésző felületének
minden mozdulata elindít egy animációt. Az eredmény ugráló, akadozó layout. A méretváltozást
itt hagyd azonnalinak.
/* Ez ugrálni fog mobilon */
.hero {
min-height: 100dvh;
transition: min-height 0.3s ease;
}
Vigyázz a tartalom eltolódásával
Ha egy hosszú oldal közepén van egy 100dvh magas blokk, akkor görgetés közben
a magassága — és vele az utána következő tartalom pozíciója — elmozdul. Teljes képernyős
szekciókat ezért érdemes az oldal elejére tenni, vagy svh-t használni középen.
Media query-ben inkább ne
Egy töréspont feltétele legyen stabil. Ha görgetés közben mozgó értéktől függ, a media query
oda-vissza billeghet, és olyan hibákat okoz, amiket utólag nagyon nehéz reprodukálni.
Media query-be svh vagy lvh való, a dvh maradjon az
elrendezésben.
A frissítés nem feltétlenül képkockapontos
A specifikáció megengedi a böngészőknek, hogy a dinamikus viewport méretét ritkábban
frissítsék, mint ahogy a felület ténylegesen mozog. Ez tudatos döntés: így nem kell minden
képkockában újraszámolni az egész elrendezést. A gyakorlatban ez azt jelenti, hogy a
dvh-ra elrendezésként lehet támaszkodni, de nem szabad rá olyat építeni,
ami képkockapontos követést vár. Ahhoz a Visual Viewport API kell.
Iframe-ben a saját viewport számít
Egy iframe-en belül a viewport egységek az iframe méretéhez viszonyulnak, nem a befoglaló
oldaléhoz. Beágyazott widgetnél ezért a 100dvh szinte biztosan nem azt jelenti,
amit vársz — ott a százalék vagy a container query egységek a jó eszközök.
Nem csak magasság
Ugyanez a logika végigmegy az összes viewport egységen, nem csak a magasságon. Mindegyik
megkapta a s, l és d előtagot:
dvw— dinamikus viewport szélesség,dvminésdvmax— a kettő közül a kisebb, illetve a nagyobb,dviésdvb— inline és block irányú méret, írásirány-függetlenül.
A gyakorlatban a dvh az, amiért a család létrejött — a szélesség mobilon jóval
ritkábban változik menet közben. A dvi és dvb akkor jön jól, ha az
oldal több írásirányt is kiszolgál: függőleges írásmódban a „block irány” a vízszintes, és a
logikai egységek ezt maguktól követik.
Amit a dvw nem old meg: a klasszikus 100vw
vízszintes túlcsordulást asztali gépen. Ha egy 100vw széles elem az oldalt
vízszintesen görgethetővé teszi, a dvw ugyanúgy fog viselkedni. Arra az esetre
a width: 100% a megoldás.
Migráció a JavaScriptes --vh hackről
Ha a projekted régebbi, jó eséllyel megvan még benne ez a kód — évekig ez volt a bevett megoldás:
// Régi megoldás — ez törölhető
const setVh = () => {
document.documentElement.style
.setProperty('--vh', `${window.innerHeight * 0.01}px`);
};
setVh();
window.addEventListener('resize', setVh);
.hero {
height: calc(var(--vh, 1vh) * 100);
}
Az egész helyére ennyi kerül:
.hero {
min-height: 100vh;
min-height: 100dvh;
}
A csere lépésről lépésre:
- keresd meg a kódbázisban a
--vh,innerHeightésresizemintákat, - a
calc(var(--vh) * 100)értékeket cseréld100dvh-ra — vagy100svh-ra ott, ahol garantált férőhely kell, - töröld a JavaScriptet és a
resizeeseményfigyelőt, - nézd át, hol maradt
heightolyan helyen, aholmin-heighta helyes, - ellenőrizd valódi eszközön (lásd a következő szakaszt).
Pontosítás a 2. ponthoz: a régi hack betöltéskor mérte az
innerHeight-ot, amikor a böngészőfelület még látszik — vagyis valójában a
kis viewportot rögzítette. Ha 1:1 azonos viselkedést szeretnél, a pontos megfelelő
a svh. A dvh ennél jobb, mert menet közben is követ; csak akkor
válaszd tudatosan a svh-t, ha a fix magasságra épült valami.
A csere nem csak kódsorokat spórol: a natív egység már az első festésnél helyes, míg a JavaScriptes változat mindig megvillant egy rossz magassággal, mielőtt lefutott.
Hogyan teszteld?
Ez a szakasz azért fontos, mert a dvh-val kapcsolatos hibák nagy része
nem reprodukálható asztali böngészőben — beleértve a DevTools
eszközszimulátorát is.
A mobilnézet-emuláció nem csukja össze a címsort, mert nincs is neki. Emiatt ott a
svh, az lvh és a dvh mind ugyanazt az értéket adja,
és pont az a jelenség marad láthatatlan, amit ki akarsz szűrni. Valódi eszköz kell hozzá:
Androidon chrome://inspect, iOS-en a Safari Web Inspector.
Mérőléc a három egységhez
A leggyorsabb módszer, hogy tényleg lásd, mit ad vissza a három egység az adott eszközön: illessz be ideiglenesen ennyit.
// Ideiglenes mérőléc — élesbe ne menjen ki
const probe = (unit) => {
const d = document.createElement('div');
d.style.cssText = `position:fixed;visibility:hidden;height:100${unit}`;
document.body.append(d);
return d;
};
const p = { svh: probe('svh'), lvh: probe('lvh'), dvh: probe('dvh') };
const out = document.createElement('div');
out.style.cssText =
'position:fixed;z-index:9999;top:0;left:0;padding:.4rem;' +
'background:#000;color:#0f0;font:12px monospace';
document.body.append(out);
(function tick() {
out.textContent =
`svh ${p.svh.offsetHeight} · ` +
`lvh ${p.lvh.offsetHeight} · ` +
`dvh ${p.dvh.offsetHeight}`;
requestAnimationFrame(tick);
})();
Görgess le és fel: a svh és az lvh értéke fix marad, a
dvh pedig végigmegy a kettő között. Ha mind a három ugyanaz, akkor vagy asztali
böngészőben vagy, vagy telepített PWA-ban — ott nincs mit követni.
(Az offsetHeight egész pixelre kerekít, tehát 1 pixel eltérés normális.)
Tesztelési ellenőrzőlista
- iOS Safari: görgess le teljesen, majd vissza fel — nem vágódik le semmi?
- Android Chrome: ugyanez, plusz a lenti gesztussáv környéke,
- fókuszálj egy beviteli mezőre — a billentyűzet mögé kerül valami fontos?
- fordítsd el az eszközt fekvő módba — fekvőben a képernyő alacsony, egy
100dvhhero könnyen használhatatlanul zsúfolt lesz, - ha PWA-ként telepíthető az oldal, nézd meg standalone módban is,
- kapcsold be a „csökkentett mozgás” beállítást, ha animáció is van a szekcióban.
Böngészőtámogatás
A dinamikus viewport egységeket a Safari 15.4, a Chrome 108, az Edge 108 és a Firefox 101 óta
minden nagy böngésző támogatja. 2026-ban ez gyakorlatilag a teljes aktív felhasználói bázist
lefedi, a fenti kétsoros vh fallback pedig a maradékot is rendezi.
Ha ennél többre van szükség — például egy egész elrendezés máshogy épül fel a két esetben —,
a @supports is használható:
@supports (height: 100dvh) {
.app {
height: 100svh;
}
}
A gyakorlatban erre ritkán van szükség: a két deklarációs fallback rövidebb, olvashatóbb, és
ugyanazt éri el. A @supports akkor indokolt, ha a régi és az új változat
szerkezetében tér el.
Ha eddig JavaScriptes --vh megoldást használtál, ezt nyugodtan kitörölheted:
a natív egység pontosabb, gyorsabb, és nem villan meg az első festés előtt.
Ellenőrzőlista
Mielőtt élesítesz egy teljes képernyős elrendezést, fusd át ezt a listát:
min-heightszerepelheighthelyett, ahol a tartalom nőhet,- a
dvh-s sor fölött ott avhfallback, - ahol garantáltan el kell férni (app-váz, alsó sáv),
svhvan, - scroll-snapnél
svhvan, nemdvh, - fix overlaynél
inset: 0van magasságegység helyett, - nincs
transitionvagy animációdvh-ban megadott méreten, - media query-ben nincs
dvh, - grid vagy flex görgethető sávján ott a
min-height: 0, viewport-fit=coveresetén ki vannak téve asafe-area-insetpaddingok,- a billentyűzetes eset át van gondolva (
interactive-widgetvagy Visual Viewport API), - a régi JavaScriptes
--vhhack törölve lett, - valódi mobil eszközön is le lett tesztelve, nem csak emulátorban.
Gyakori kérdések
Mi a különbség a vh és a dvh között?
A vh a viewport magasságát méri, de mobil böngészőkben nem követi a címsor és a
navigációs elemek mozgását — a legtöbb böngésző a legnagyobb lehetséges magasságot rögzíti benne.
A dvh dinamikusan alkalmazkodik a ténylegesen látható területhez, így görgetés
közben is pontos marad.
Mikor érdemes dvh-t használni?
Teljes képernyős hero szekcióknál, landing page-eknél, mobil webalkalmazásoknál és minden olyan
esetben, amikor az elemnek a látható képernyőmagasságot kell kitöltenie. Fix pozíciójú elemeknél
(alsó sáv, sticky CTA) viszont gyakran a svh a biztonságosabb, mert az soha nem
ígér több helyet, mint amennyi tényleg van.
Támogatják a modern böngészők a dvh-t?
Igen. A Chrome, az Edge, a Firefox és a Safari újabb verziói mind támogatják a dvh
egységet. Régebbi böngészőkhöz elég egy egyszerű vh fallback: előbb a
vh-s szabályt írjuk ki, alá a dvh-sat.
Miért ugrál az elrendezés, ha dvh-t használok?
Mert a dvh értéke tényleg változik görgetés közben, és minden változás új
elrendezés-számítást indít. Ha az érintett elemen transition van a magasságon,
az ugrálás látványossá válik. A megoldás kettős: ne animáld a dvh-ban megadott
méretet, és hosszú oldal közepén inkább svh-t használj, hogy az utána következő
tartalom ne mozduljon el.
A dvh figyelembe veszi a mobil billentyűzetet?
Alapértelmezés szerint nem. A felugró billentyűzet a vizuális viewportot csökkenti, a layout
viewportot nem, így a dvh értéke változatlan marad. Ha azt szeretnéd, hogy a
billentyűzet is beleszámítson, a viewport meta tagre tedd ki az
interactive-widget=resizes-content beállítást, vagy mérj a Visual Viewport
API-val.
Mi a különbség a 100dvh és a height: 100% között?
A 100dvh mindig a képernyő látható magasságához viszonyít, a
height: 100% pedig a szülőelem magasságához — utóbbihoz megszakítatlan
magasságlánc kell egészen a html elemig. Ha az elem a szülőjét akarja kitölteni,
a százalék a helyes eszköz; viewport egységet csak akkor használj, ha tényleg a képernyőhöz
kell igazodni.
Használhatok dvh-t media query-ben?
Jobb, ha nem. Egy töréspont feltétele legyen stabil: ha görgetés közben mozgó értéktől függ,
a media query oda-vissza billeghet, és ez nehezen debugolható hibákhoz vezet. Media
query-ben használj svh-t vagy lvh-t, a dvh-t pedig
hagyd meg az elrendezésnek.
Le kell cserélnem minden vh-t dvh-ra?
Nem. A vh-t ott érdemes lecserélni, ahol az elemnek a látható képernyőt kell
kitöltenie — jellemzően teljes képernyős szekcióknál. Ahol a vh csak egy arányos
méret forrása (például egy dekoratív elem magassága), ott a csere nem hoz semmit. Ahol pedig
garantált férőhely kell, ott a dvh helyett a svh a helyes választás.