Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Görsellere width ve height yazmanın tarayıcıya yer ayırması için neden kesinlikle gerekli olduğunun canlı örneği

devnix

Üye
Katılım
14 Mart 2026
Mesajlar
24
Merhaba arkadaşlar, bugün sizlerle başıma gelen ve performans optimizasyonu konusunda bana çok şey öğreten bir deneyimi paylaşmak istiyorum. Bir e-ticaret sitesi üzerinde çalışıyordum ve sayfa hız metrikleri (Core Web Vitals) beni deli ediyordu. Özellikle Cumulative Layout Shift (CLS) skorlarımız berbattı. Sayfa yüklenirken içerik aniden zıplıyor, butonlar kayıyordu. Kullanıcı deneyimi felaketti. Tüm optimizasyonları yaptığımı sanıyordum ama gözden kaçırdığım çok basit bir şey vardı: img etiketlerindeki width ve height özellikleri.

🔥 Sorunun Tam Olarak Nerede Olduğunu Anlamak

Sorunu anlamak için önce tarayıcının bir sayfayı nasıl oluşturduğuna bakalım. Tarayıcı, HTML'yi ayrıştırırken (parse) bir görsel etiketi (img) gördüğünde, hemen onun boyutlarını bilmez. Görselin yüklenmesini bekler, yüklendikten boyutlarını öğrenir ve ancak o zaman onun kaplayacağı alanı sayfaya yerleştirir. İşte bu bekleyiş ve sonradan yer açma işlemi, sayfanın diğer elementlerinin aniden kaymasına (layout shift) neden olur. Ben de tam olarak bunu yaşıyordum.

Aşağıdaki gibi bir kullanım, sorunun ta kendisiydi:

HTML:
<!-- BU KULLANIM, LAYOUT SHIFT'E DAVETİYE ÇIKARIR! -->
<img src="urun-gorseli.jpg" alt="Harika Ürün">

🎯 Çözüm: Basit Ama Etkili İki Özellik

Çözüm, HTML'in ilk günlerinden beri var olan width ve height özelliklerini kullanmaktı. Bu özellikleri kullandığınızda, tarayıcıya şunu söylersiniz: "Hey, bu görsel şu kadar genişlikte ve şu kadar yükseklikte olacak, sen yerini şimdiden ayarla." Böylece tarayıcı, görsel yüklenmeden önce gerekli alanı rezerve eder ve görsel yüklendiğinde hiçbir şey hareket etmez.

İşte doğru kullanım:

HTML:
<!-- BU KULLANIM, YERİ ÖNCEDEN AYIRIR VE SHIFT'I ENGELLER -->
<img src="urun-gorseli.jpg" alt="Harika Ürün" width="800" height="600">

Peki ya responsive (duyarlı) bir tasarım yapıyorsak? CSS ile genişliği yüzde olarak ayarlayacağız diye bu özellikleri atlamak yaygın bir hata. İşin sırrı, aspect ratio (en-boy oranı) bilgisini tarayıcıya vermekte. Width ve height değerlerini görselin gerçek oranlarına göre yazarsanız, CSS'te sadece `max-width: 100%; height: auto;` verdiğinizde tarayıcı yükseklik hesaplamasını bu orandan yapacak ve alanı doğru bir şekilde ayıracaktır.

📐 Gerçek Dünya Örneği ve CSS İş Birliği

Bir ürün kartı bileşeni düşünelim. Görsellerin genişliği container'a göre değişsin ama yükseklik oransal olarak kalsın istiyoruz.

HTML:
<div class="urun-karti">
    <!-- Görselin gerçek boyutu 1000x750 piksel (4:3 oran) -->
    <img src="urun.jpg" alt="Örnek Ürün" width="1000" height="750" class="urun-resmi">
    <h3>Harika Ürün</h3>
    <p>Bu ürünün açıklaması...</p>
</div>

CSS:
.urun-resmi {
    / Genişliği containera sığdır /
    max-width: 100%;
    / Yüksekliği, width/height oranına göre otomatik hesaplat /
    height: auto;
    / Görsel yüklenene kadar blur efekti (modern yaklaşım) /
    background-color: #f0f0f0;
}

Bu kombinasyonu uyguladıktan sonra, Lighthouse ve PageSpeed Insights raporlarımdaki CLS değerinin neredeyse sıfıra indiğini[/COLOR] gördüm. Sayfa artık yüklenirken zıplamıyor, kullanıcılar butona tıklarken sayfa aşağı kaymıyordu. Bu kadar basit bir değişiklik inanılmaz bir kullanıcı deneyimi iyileştirmesi sağladı.

Siz projelerinizde görsel boyutlarını belirlemeyi unutuyor musunuz? Ya da Next.js gibi modern framework'lerde `next/image` kullanırken bile bu konuya dikkat ediyor musunuz? Benim gibi CLS canavarıyla savaşan oldu mu aranızda? Yorumlarda deneyimlerinizi paylaşın!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri