Modern Web İçin CSS Visual Viewport API'yi Anlamak

3 Kasım 2026 8 dk okuma Zeynep Acar

Yazar:

Web Tasarım ve Geliştirme

Profili gör

Bu sayfayı yapay zekâya sor

5 görüntülenme 7 dk okuma

CSS Visual Viewport API, web geliştiricilerinin mobil cihazlarda ekran üzerindeki yazılım klavyesini ve pinch-zoom davranışını izlemesine olanak tanıyan bir özellikler seti sağlar. window.visualViewport nesnesine erişerek, sayfanın kullanıcılara şu anda görünen alanını, layout viewport’tan ayrı olarak hassas bir şekilde ölçebilirsiniz. Bu ayrım, amaçlanan düzeni bozmadan kullanıcı etkileşimlerine yanıt veren arayüzler oluşturmak için gereklidir.

Visual Viewport API geliştiriciler için neden önemlidir?

Modern mobil web’de gezinme, bir sayfanın görünür alanında sık sık değişiklikler yapılmasını içerir. Kullanıcılar genellikle görsellere veya metne yaklaşır (zoom yapar) ve bir kullanıcı bir giriş alanına dokunduğunda mobil klavyeler ekranın önemli bir kısmını kaplamak için sıklıkla yukarı kayar. Geleneksel viewport meta etiketleri, kullanıcı yakınlaştırdığında veya klavye göründüğünde bile sabit kalan layout viewport’u tanımlar. Visual Viewport API, belgenin görünür kısmının gerçek boyutlarını ve uzaklıklarını herhangi bir zamanda bildirerek bu boşluğu doldurur. Bu araç olmadan, sabit konumlu (fixed-position) öğeleriniz bir giriş alanının arkasında kazara gizlenebilir veya klavye açıldığında ekran dışına itilebilir; bu da mobil cihazlarda form dolduran kullanıcılar için sinir bozucu bir deneyim yaratır.

Understanding the CSS Visual Viewport API for Modern Web — overview
Layout ve Visual viewport’lar arasındaki fark nedir?
ÖzellikLayout Viewport (Düzen Görünüm Alanı)Visual Viewport (Görsel Görünüm Alanı)
Birincil AmaçCSS yerleşim tabanıDinamik görünürlük
Yakınlaştırma (Zoom) EtkisiDeğişmezZoom ile değişir
Klavye EtkisiYeniden boyutlanmazGirişte yeniden boyutlanır

Bu iki farklı kavramı anlamak, kararlı mobil arayüzler oluşturmak için çok önemlidir. Layout viewport, CSS bloklarınızın oluşturulduğu (render edildiği) alandır. Genellikle viewport meta etiketi tarafından belirlenir ve kullanıcının belirli bir paragrafa ne kadar yakınlaştığından bağımsız olarak sabit kalır. Aksine, visual viewport kullanıcının gerçekte ne gördüğünü temsil eder. Bir kullanıcı %200 yakınlaştırma yaptığında, visual viewport etkili bir şekilde küçülerek layout viewport’un daha küçük bir dilimini temsil eder. Bu özellikleri izleyerek, kullanıcı form girdileriyle etkileşim kurarken bile yapışkan başlıklarınızın (sticky headers) veya yüzen eylem düğmelerinizin erişilebilir kalmasını sağlayabilirsiniz.

Klavye ve zoom değişikliklerini nasıl takip edersiniz?

Bu olayları takip etmek, window.visualViewport nesnesi tarafından sağlanan belirli özellikleri dinlemeyi içerir. Uygulama durumunuzda güncellemeleri tetiklemek için visualViewport nesnesindeki ‘resize’ ve ‘scroll’ olay dinleyicilerini bağlayabilirsiniz. Örneğin, bir kullanıcı bir metin alanına dokunduğunda, yazılım klavyesi ekranı kapladığı için ‘resize’ olayı tetiklenir. İçeriğiniz için ne kadar alan kaldığını görmek için visual viewport’un height özelliğini kontrol edebilirsiniz. Bu, kullanıcısı yazarken görünür kalması için bir giriş alanını kullanılabilir alanın merkezine otomatik olarak kaydırma gibi dinamik ayarlamalara olanak tanır.

  • Yazılım klavyesinin ne zaman açıldığını veya kapandığını tespit etmek için ‘resize’ olayını kullanın.
  • Mevcut kullanılabilir dikey alanı belirlemek için window.visualViewport.height değerini kontrol edin.
  • Kullanıcının düzene göre ne kadar aşağı kaydırdığını hesaplamak için window.visualViewport.offsetTop kullanın.
  • Öğelerin gizlenmesini önlemek için visual viewport değerlerine dayalı dönüşümler uygulayın.
Alien Road Visual Viewport API’yi Nasıl Uygular?

Alien Road olarak, müşteri sitelerimizin her koşulda kullanılabilir kalmasını sağlamak için mobil öncelikli (mobile-first) geliştirmenin son aşamalarında Visual Viewport API’yi kullanıyoruz. Tipik bir çalışmada, geliştiricilerimiz bir form etkin olduğunda visual viewport boyutlarını izleyen özel bir kanca (custom hook) uygular. Visual viewport’un yüksekliği önemli ölçüde düşerse, kapsayıcının odağını değiştiren bir düzen ayarı tetikleriz. Ayrıca, bir kullanıcı yakınlaştırdığında sabit başlıkların içeriği gizlemesini önlemek için pinch-zoom olaylarını izleriz. Bu sistematik yaklaşım, cihaz ayarlarından bağımsız olarak her kullanıcının markayla tutarlı bir etkileşim akışı sürdürmesini sağlar; öğelerin ekrandan kayması veya sanal klavyelerin arkasında gizlenmesi gibi yaygın sorunları önler.

Understanding the CSS Visual Viewport API for Modern Web — in practice
Kaçınılması Gereken Yaygın Tuzaklar Nelerdir?

En sık yapılan hatalardan biri, visual viewport’un her zaman pencere boyutlarıyla eşleşeceğini varsaymaktır. Geliştiriciler genellikle window.innerHeight’e güvenirler, ancak bu özellik her zaman sanal klavyenin neden olduğu küçülen alanı yansıtmaz. Bir diğer yaygın sorun, bileşen kaldırıldıktan sonra (unmounted) olay dinleyicilerini kaldırmamaktır. Tek sayfalı bir uygulamanız (SPA) varsa, bu dinleyiciler birikebilir ve zamanla performans düşüşüne yol açabilir. Site performansını yüksek tutmak için artık gerekmediğinde visualViewport nesnesindeki olay dinleyicilerinizi her zaman temizlediğinizden emin olun.

  • Mobil form düzenleri için yalnızca window.innerHeight’e güvenmeyin.
  • Web uygulamanızda bellek sızıntılarını (memory leaks) önlemek için olay dinleyicilerinizi her zaman temizleyin.
  • Formlarınızı çeşitli mobil cihaz modellerindeki farklı sanal klavyelerle test edin.
  • UI’ı (kullanıcı arayüzü) akıcı tutmak için yeniden boyutlandırma olay dinleyicisi içinde ağır hesaplamalardan kaçının.
Bunu Bir Sonraki Projenizde Nasıl Uygulayabilirsiniz?

Bu API’yi kullanmaya başlamak için, çoğu modern mobil tarayıcı yerel olarak içerse de tarayıcının destekleyip desteklemediğini kontrol ederek başlamalısınız. if (‘visualViewport’ in window) gibi basit bir koşullu ifade kullanarak özellik kontrolü gerçekleştirebilirsiniz. Onaylandıktan sonra, mobil cihazda sayfayla etkileşim kurarken genişlik ve yükseklik özelliklerini konsola yazdırarak başlayabilirsiniz. Kaydırma ve sıkıştırma (pinch) yaptıkça bu sayıların nasıl değiştiğini gözlemleyin. Buradan, statik düzen tanımı yerine kullanıcının ekranının gerçekliğine yanıt veren daha uyarlanabilir UI bileşenleri oluşturmak için bu değerleri CSS değişkenlerinize veya durum yönetimi sisteminize entegre edebilirsiniz.

Bu Hafta Nereden Başlamalısınız?

Bu hafta sitenizin iletişim veya potansiyel müşteri oluşturma (lead-generation) formlarını bir akıllı telefonda inceleyerek başlayın. Geliştirici konsolunu açın, formlarınıza gidin ve konsol çıktısını izlerken giriş alanlarıyla etkileşim kurun. Klavyenin herhangi bir kritik bilgiyi veya düğmeyi gizleyip gizlemediğini belirleyin. Eğer gizliyorsa, visual viewport yüksekliği değiştiğinde dolguyu (padding) veya kaydırma konumunu ayarlamak için küçük bir komut dosyası (script) yazın. Bu küçük güncellemeleri şimdi yaparak, gelecekteki erişilebilirlik sorunlarını önlersiniz ve modern web trafiğinin büyük bir kısmını oluşturan mobil ziyaretçiler için arayüzünüzü işlevsel tutarsınız.

Sıkça Sorulan Sorular

Visual Viewport API masaüstü tarayıcılarda çalışır mı?

Evet, API masaüstü tarayıcılarda mevcuttur, ancak davranışı mobilden önemli ölçüde farklıdır. Masaüstünde, belirli yakınlaştırma özellikleri veya gelişmiş erişilebilirlik araçları kullanmadığınız sürece, visual viewport genellikle layout viewport ile tam olarak eşleşir. Bu nedenle, kodunuzun farklı ortamlarda ve cihaz türlerinde doğru şekilde davranmasını sağlamak için her zaman bir özellik kontrolü eklemelisiniz.

Bu API tüm mobil tarayıcılar tarafından destekleniyor mu?

Visual Viewport API, Android için Chrome ve iOS’ta Safari dahil olmak üzere çoğu modern mobil tarayıcı tarafından desteklenmektedir. Birçok web standardında olduğu gibi, hedef kitlenizin tarayıcı payındaki desteği doğrulamalısınız. Mevcut kullanıcıların büyük çoğunluğu için API, karmaşık geçici çözümlere veya üçüncü taraf kitaplıklarına ihtiyaç duymadan dinamik viewport değişikliklerini yönetmek için güvenilir bir yol sağlar.

Bunu sabit konumlu (fixed) öğeleri düzeltmek için kullanabilir miyim?

Kesinlikle, bu API’nin birincil kullanım durumlarından biridir. Visual viewport’un uzaklığını (offset) ve boyutlarını izleyerek, yazılım klavyesi tarafından gizlenmelerini önlemek için sabit öğelerin konumunu dinamik olarak ayarlayabilirsiniz. Bu, kullanıcı bir forma aktif olarak yazı yazarken bile gezinme çubuklarının (navigation bars) veya eylem çağrısı düğmelerinin görünür kalmasını sağlar.

Site performansını etkiler mi?

Doğru kullanıldığında performans üzerindeki etkisi minimumdur. Buradaki anahtar, olay dinleyicisi içinde ağır DOM manipülasyonlarından veya karmaşık hesaplamalardan kaçınmaktır. Mantığı hafif tutar ve değerleri yalnızca basit stil güncellemeleri veya kaydırma ayarlamaları için kullanırsanız, modern cihazlarda herhangi bir fark edilir yavaşlama yaşamazsınız.

Okumaya Devam Edin: Web Tasarımı ve Geliştirme · Web Tasarımı

Paylaş