İçeriğe geç

CSS · 6/8

Mobil uyumlu tasarım (media query)

Mobil öncelikli bir yerleşimi ekran genişliğine göre geliştirmek.

Önerilen çalışma: 25–45 dakika; örnekleri kendin uygula. Süre kişiye göre değişir.

Bu sayfada · 9 başlık

Başlamadan önce

Önceki dersteki örneği çalıştırmış olman ve dosya/çıktı ayrımını biliyor olman yararlı.

Öğrenme sırası: konuyu oku → çıktıyı tahmin et → örneği değiştir → alıştırmayı çöz → cevabını gerekçelendir.

CSS · Mobil uyumlu tasarım (media query) — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.

Videoyla adım adım izle

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Mobil uyumlu tasarım (media query)

Mobil öncelikli bir yerleşimi ekran genişliğine göre geliştirmek.

Kavramı kur

Mobil uyumluluk bir cihaz adı listesi değildir. İçeriğin farklı genişliklerde okunabilmesi ve kullanılabilmesidir. Önce dar ekran için tek sütunlu, rahat bir düzen kur. Daha geniş alan oluştuğunda gerekli yerleri çok sütuna çıkar. Bu yaklaşım temel içeriğin küçük ekranda unutulmasını önler.

Neden böyle çalışıyor?

Media query belirli bir koşul sağlandığında CSS kurallarını etkinleştirir. min-width genişlik eşik değerine ulaştığında; max-width ise belirli genişliğe kadar devreye girer. Eşiklerini telefon marka/modeline değil, içeriğin sıkıştığı noktaya göre seç. Düzenin iki eşik arasında da çalışması gerekir.

Çalışma sırası

Testi yalnızca tarayıcıdaki tek bir hazır telefon ölçüsünde yapma. Pencereyi yavaşça daralt, uzun başlık ekle ve yakınlaştır. Görsellerin kendi kapsayıcısından taşmadığını, düğmelerin tıklanabilir kaldığını ve sıranın değişirken anlamın kaybolmadığını gözlemle.

İkinci örnek · 1

Temel kurallar dar ekran için tek sütun kurar. Kodun tamamı yazılı derste bulunur.

Kod

<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
*{box-sizing:border-box}.liste{display:grid;gap:16px}
@media(min-width:700px){.liste{grid-template-columns:repeat(2,minmax(0,1fr))}}
.kart{padding:20px;background:#eef2ff}
</style>
<div class="liste"><div class="kart">İlk ders</div><div class="kart">İkinci ders</div></div>

Beklenen sonucu oku

Viewport meta satırı HTML belgesinde ayrıca bulunmalıdır.

Beklenen çıktı: 700px altında tek, daha genişte iki sütun.

Bir değeri sen değiştir

Önce yalnızca tek sütunlu sürümü kur. Alan yeterli olduğunda iki sütuna geçiren min-width koşulu ekle.

Hata nereden gelir?

Viewport eklemek tek başına sabit genişlikli düzeni düzeltmez; esnek ölçüler de gerekir.

Kendi çözümünü kur

320px, 700px ve 1000px genişliklerde, ardından yakınlaştırmayla dene. Eşik değeri pencerenin CSS pikseli cinsinden genişliğini kontrol eder; fiziksel piksel sayısını değil.

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

<style>.kartlar{display:grid;gap:12px}@media(min-width:600px){.kartlar{grid-template-columns:1fr 1fr}}.kartlar div{padding:16px;background:#e2e8f0}</style>
<div class="kartlar"><div>A</div><div>B</div></div>

Kendini kontrol et

Mobil öncelikli tasarımda temel CSS hangi görünümü kurar? Yanıt: Dar ekran için çalışan temel görünümü; geniş ekran düzeni koşullarla eklenir.

Beklenen çıktı: 600px genişliğe kadar tek, sonrasında iki sütun.

Konu anlatımı

Mobil uyumluluk bir cihaz adı listesi değildir. İçeriğin farklı genişliklerde okunabilmesi ve kullanılabilmesidir. Önce dar ekran için tek sütunlu, rahat bir düzen kur. Daha geniş alan oluştuğunda gerekli yerleri çok sütuna çıkar. Bu yaklaşım temel içeriğin küçük ekranda unutulmasını önler.

Media query belirli bir koşul sağlandığında CSS kurallarını etkinleştirir. min-width genişlik eşik değerine ulaştığında; max-width ise belirli genişliğe kadar devreye girer. Eşiklerini telefon marka/modeline değil, içeriğin sıkıştığı noktaya göre seç. Düzenin iki eşik arasında da çalışması gerekir.

Testi yalnızca tarayıcıdaki tek bir hazır telefon ölçüsünde yapma. Pencereyi yavaşça daralt, uzun başlık ekle ve yakınlaştır. Görsellerin kendi kapsayıcısından taşmadığını, düğmelerin tıklanabilir kaldığını ve sıranın değişirken anlamın kaybolmadığını gözlemle.

İlk örneği oku ve dene

6

Mobil uyumlu tasarım (media query)

@media kuralları sadece belirli ekran boyutlarında çalışır. Böylece aynı sayfa telefonda farklı, bilgisayarda farklı görünebilir. Bu siteyi telefondan açınca menünün değişmesinin sebebi de budur.

CSS
<style>
  .kart {
    padding: 20px;
    background-color: #dcfce7;
  }
  /* Ekran 600 piksel veya daha darsa (telefon) */
  @media (max-width: 600px) {
    .kart {
      background-color: #fee2e2;
      font-size: 14px;
    }
  }
</style>

<div class="kart">Ekran daralınca rengim değişir!</div>

▶ Sonuç

Geniş ekranda yeşil zeminli bir kutu görünür; ekran 600 piksel veya daha darsa kutu kırmızımsı olur ve yazı küçülür.

Adım adım neden böyle çalışıyor?

  1. Temel kurallar dar ekran için tek sütun kurar.
  2. min-width:700px daha geniş alan için ek düzeni açar.
  3. minmax(0,1fr) ızgara öğelerinin içerik yüzünden gereksiz büyümesini azaltır.
  4. Viewport meta satırı HTML belgesinde ayrıca bulunmalıdır.
106

İkinci çözümlü örnek

Mobil öncelikli bir yerleşimi ekran genişliğine göre geliştirmek.

CSS
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
*{box-sizing:border-box}.liste{display:grid;gap:16px}
@media(min-width:700px){.liste{grid-template-columns:repeat(2,minmax(0,1fr))}}
.kart{padding:20px;background:#eef2ff}
</style>
<div class="liste"><div class="kart">İlk ders</div><div class="kart">İkinci ders</div></div>

▶ Sonuç

700px altında tek, daha genişte iki sütun.

Kolaydan zora sen dene

  1. Önce yalnızca tek sütunlu sürümü kur.
  2. Alan yeterli olduğunda iki sütuna geçiren min-width koşulu ekle.
  3. 320px, 700px ve 1000px genişliklerde, ardından yakınlaştırmayla dene.
İpucunu aç

Eşik değeri pencerenin CSS pikseli cinsinden genişliğini kontrol eder; fiziksel piksel sayısını değil.

Üç görevin açıklamalı çözümünü oku
  1. Temel düzen tek sütundur ve geniş ekran koşuluna bağımlı değildir.
  2. min-width koşulu alan yeterli olunca ek sütunu açar.
  3. Tek bir hazır telefon profiliyle yetinme; ara genişlik ve yakınlaştırmayı da dene.
Bir çözüm varyasyonu gör
206

Çözüm varyasyonu

Önce kendi görevlerini dene. Bu varyasyonda girdi ve sonuçları karşılaştır.

CSS
<style>.kartlar{display:grid;gap:12px}@media(min-width:600px){.kartlar{grid-template-columns:1fr 1fr}}.kartlar div{padding:16px;background:#e2e8f0}</style>
<div class="kartlar"><div>A</div><div>B</div></div>

▶ Sonuç

600px genişliğe kadar tek, sonrasında iki sütun.

Yaygın hata ve çözümü

  1. Viewport eklemek tek başına sabit genişlikli düzeni düzeltmez; esnek ölçüler de gerekir.
  2. Mobilde önemli içeriği display:none ile yok etmek yerine düzeni iyileştir.

Kendini değerlendir

Dar ekrana özel kural hangi yapıyla yazılır?

Ezberlemeden açıklayabiliyor musun?

Mobil öncelikli tasarımda temel CSS hangi görünümü kurar?

Açıklamalı yanıt

Dar ekran için çalışan temel görünümü; geniş ekran düzeni koşullarla eklenir.

Kendi çözümünde bir girdiyi değiştir. Çalıştırmadan önce beklenen sonucu yaz; gerçek sonuçla karşılaştır ve fark varsa hangi satırdan kaynaklandığını açıkla.

Kaynak ve çalışma ortamı

Örnekler küçük öğretim senaryolarıdır. Java/C#/PHP/Swift çalışma ortamını kendi cihazında ayrıca doğrula; yazılı sonuçlar beklenen davranışı açıklar.

Resmî dil belgeleri
Bu içerik işine yaradı mı?

Görüşünü aşağıdan işaretleyebilir ve varsa notunu bırakabilirsin.