Przejdź do treści
Dostępność

Znacznik meta viewport

Opublikowano:

Znacznik meta viewport (<meta name="viewport">) to element w <head>, który mówi przeglądarce mobilnej, jaką szerokość i skalę ma mieć obszar układu strony. Standardowe ustawienie to width=device-width, initial-scale=1, czyli szerokość równa szerokości ekranu i brak początkowego powiększenia.

Bez tego znacznika przeglądarka na wąskim ekranie może wyrenderować stronę w wirtualnym oknie o szerokości np. 980 px i pomniejszyć ją do rozmiaru ekranu. Tekst robi się wtedy drobny, a media queries dla małych ekranów w ogóle się nie uruchamiają.

Zalecany znacznik

Dla strony responsywnej wystarczy jedna linia w <head>. MDN jako minimum podaje width=device-width. Dodanie initial-scale=1 nie szkodzi, a analiza Chrome „Optimize viewport for mobile” oczekuje ustawionej szerokości i initial-scale równego co najmniej 1.

Zalecane ustawienie
HTML
<meta name="viewport" content="width=device-width, initial-scale=1">

Dyrektywy meta viewport

W większości projektów nie potrzebujesz niczego poza width i initial-scale. Stała szerokość, np. width=320, może psuć układ na innych ekranach.

DyrektywaWartościDo czego służy
widthdevice-width albo 1–10000 pxSzerokość obszaru układu; od niej zależy jednostka vw
heightdevice-height albo 1–10000 pxWysokość obszaru układu; od niej zależy jednostka vh
initial-scale0.0–10.0Początkowe powiększenie przy wczytaniu strony
minimum-scale0.0–10.0Najmniejsze dozwolone powiększenie
maximum-scale0.0–10.0Największe dozwolone powiększenie; nie ustawiaj poniżej 2
user-scalableyes / no (domyślnie yes)Czy użytkownik może powiększać; nie ustawiaj no
interactive-widgetresizes-visual (domyślnie), resizes-content, overlays-contentJak elementy interfejsu, np. klawiatura ekranowa, zmieniają rozmiar obszaru widoku
viewport-fitauto, contain, coverCzy strona wypełnia cały ekran urządzenia; przy cover używaj zmiennych safe-area-inset

Nie blokuj powiększania

user-scalable=no albo maximum-scale poniżej 2 uniemożliwia powiększenie strony. Osoby słabowidzące nie przeczytają wtedy drobnego tekstu. WCAG 2.1 w kryterium 1.4.4 (poziom AA) wymaga, żeby tekst dało się powiększyć do 200% bez utraty treści ani funkcji.

Reguła W3C ACT „Meta viewport allows for zoom” i reguła axe meta-viewport (poziom wpływu: krytyczny) zgłaszają błąd dokładnie w tych dwóch przypadkach. MDN podaje, że iOS od wersji 10 domyślnie ignoruje te ustawienia, ale to nie zwalnia strony z wymagania: inne przeglądarki i ustawienia mogą je respektować.

Z zoomem wiąże się też kryterium 1.4.10 Reflow: treść ma być czytelna bez przewijania w dwóch kierunkach przy szerokości 320 px CSS, co odpowiada oknu o szerokości 1280 px powiększonemu do 400%.

Tak nie rób: blokada zoomu
HTML
<!-- Błąd WCAG 1.4.4: użytkownik nie powiększy strony -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

Meta viewport a mobile-first indexing

Google indeksuje i ocenia strony na podstawie ich wersji mobilnej, pobranej przez robota smartfonowego, i zaleca projekt responsywny. Google nie podaje jednak, że sam znacznik meta viewport jest czynnikiem rankingowym. Jego rola jest techniczna: bez niego strona responsywna nie wyświetli się poprawnie na telefonie.

Google wycofał narzędzie Mobile-Friendly Test, jego API i raport Mobile Usability w Search Console od 1 grudnia 2023 roku, wskazując Lighthouse jako jedno z narzędzi do oceny wersji mobilnej. Lighthouse 13 sprawdza viewport w ramach analizy „Optimize viewport for mobile”.

Viewport a szybkość reakcji

Chrome podaje, że bez zoptymalizowanego viewportu stuknięcia mogą być opóźnione nawet o 300 ms. Przeglądarka czeka wtedy, czy nie nastąpi drugie stuknięcie, które oznaczałoby powiększenie. Viewport z width=device-width i initial-scale=1 spełnia warunki tej analizy Chrome.

Źródła i dalsza lektura

Sprawdź dostępność swojej strony

Insight uruchamia automatyczne testy wybranych reguł dostępności opartych na WCAG i porządkuje wykryte problemy według priorytetu.