İletişim

Viewport (Görüntü Alanı) Nedir?

Kısa tanım

Viewport (görüntü alanı), tarayıcı penceresinde web sayfasının o anda görülebilen dikdörtgen bölümüdür. Masaüstünde pencere boyutuna, mobilde ise ekran genişliğine ve yakınlaştırma düzeyine bağlıdır. CSS yerleşimi ve vw/vh gibi birimler bu alana göre hesaplanır. Mobil cihazlarda sayfanın ekran genişliğine göre çizilmesi için HTML'in head bölümünde meta viewport etiketi kullanılır.

Diğer adları: görüntü alanı, meta viewport, viewport meta etiketi, layout viewport, visual viewport

Viewport meta etiketiyle sayfanın cihaz genişliğine oturduğunu, etiket yoksa 980 piksellik küçültülmüş sayfa gösterildiğini anlatan diyagram

Layout viewport ve visual viewport

Tarayıcıda aslında iki ayrı görüntü alanı vardır. Layout viewport, CSS'in yerleşimi hesaplarken temel aldığı alandır; position: fixed öğeler, yüzdelik genişlikler ve vw/vh birimleri buna göre çözülür. Visual viewport ise kullanıcının o an gerçekten gördüğü kısımdır. Mobilde iki parmakla yakınlaştırdığınızda ya da ekran klavyesi açıldığında visual viewport küçülür, layout viewport ise genellikle yerinde kalır. Masaüstünde yakınlaştırma yapılmadığı sürece ikisi neredeyse örtüşür.

Bu ayrım JavaScript tarafında da görünür: document.documentElement.clientWidth layout viewport'un genişliğini verirken window.visualViewport API'si görünen alanın boyutunu, kaydırma konumunu ve yakınlaştırma oranını raporlar. Ekran klavyesi açıldığında sabit konumlu bir alt çubuğu doğru yerde tutmak gibi işler bu API ile çözülür.

Meta viewport etiketi neden gerekli?

İlk akıllı telefon tarayıcıları, masaüstü için yapılmış sayfaları bozmamak adına layout viewport'u ekrandan çok daha geniş kabul edip (iOS Safari'de varsayılan 980 piksel) sayfayı küçülterek gösterdi. Bu davranış bugün de geçerlidir: head içinde viewport etiketi yoksa mobil için yazılmış media query'ler beklendiği gibi devreye girmez ve metinler okunamayacak kadar küçük görünür. Yerleşik kullanım şudur:

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

width=device-width layout viewport'u cihazın CSS piksel cinsinden genişliğine eşitler; initial-scale=1 sayfanın yakınlaştırma uygulanmadan açılmasını sağlar. Responsive tasarım mobilde bu etiket olmadan çalışmaz. Google, mobile-first dizine eklemede sayfanın mobil sürümünü esas aldığı için eksik bir etiket, sitenin Google'a ve kullanıcılara nasıl göründüğünü doğrudan etkiler.

Sık yapılan hatalar

  • Yakınlaştırmayı kapatmak: user-scalable=no veya maximum-scale=1 eklemek, az gören kullanıcıların metni büyütmesini engeller. Bu, WCAG'nin metnin yeniden boyutlandırılabilmesi beklentisiyle çelişir; bazı mobil tarayıcılar bu değerleri zaten yok sayar.
  • Sabit genişlik vermek: width=1024 gibi bir değer her cihaza aynı genişliği dayatır ve küçük ekranlarda yatay kaydırmaya yol açar.
  • Etiketi birden fazla kez eklemek: tema ve eklentiler kendi etiketlerini eklediğinde beklenmedik değerler devreye girebilir. Sayfada tek bir viewport etiketi olmalıdır.
  • Tam ekran bölümlerde 100vh kullanmak: mobil tarayıcılarda adres çubuğu gizlenip göründükçe görünen yükseklik değişir. vh çoğu zaman araç çubukları gizliyken oluşan en büyük yüksekliğe göre hesaplandığından içeriğin alt kısmı ekranın dışında kalabilir.

Yeni yükseklik birimleri: svh, lvh, dvh

Son sorunu çözmek için CSS'e yeni viewport birimleri eklendi ve bugün tüm büyük tarayıcılarda destekleniyor:

BirimNeyi esas alır?Tipik kullanım
svhTarayıcı arayüzü tamamen açıkken kalan en küçük yükseklikHiçbir durumda taşmaması gereken giriş alanları
lvhArayüz gizlendiğinde oluşan en büyük yükseklikArka plan görselleri
dvhO anki gerçek yükseklik; arayüz değiştikçe güncellenirTam ekran paneller, modal pencereler

dvh kaydırma sırasında sürekli yeniden hesaplanabildiği için büyük düzen bloklarında göze batan sıçramalara ve gereksiz yerleşim hesaplarına neden olabilir. Çoğu durumda svh daha öngörülebilir bir varsayılandır; dvh gerçekten ekranı birebir doldurması gereken öğelere bırakılmalıdır.

Nasıl kontrol edilir?

En hızlı yol, sayfa kaynağında name="viewport" aramaktır. Tarayıcı geliştirici araçlarındaki cihaz simülasyonu etiketin etkisini farklı genişliklerde gösterir; Lighthouse da eksik ya da yakınlaştırmayı engelleyen etiketleri raporlar. Doruva'nın SEO Analiz Aracı da etiketin varlığını, cihaz genişliğini izleyip izlemediğini ve yakınlaştırmanın kapatılıp kapatılmadığını kontrol eder. Kavramların ayrıntılı açıklaması için MDN'in viewport kavramları sayfası iyi bir başvuru kaynağıdır.

İlgili terimler

← Sözlüğe dön