Web tasarımı

Duyarlı tasarım nedir

Duyarlı tasarım; mobil ve masaüstü için ayrı sürümler yerine, tek bir sayfanın, tek bir adresin ve tek bir içeriğin yerleşimini ekran genişliğine göre değiştirmesi demektir. Yerleşimin değiştiği genişlikler bir cihaz listesinden gelmez; kendi yerleşiminizin kırıldığı yerlerden gelir.

  • Ders 5 / 12
  • Başlangıç
  • Ücretsiz, kayıt yok

Tek bir yerleşim ve çalışması gereken genişlikler

Sütun ekran genişliğidir. Aşağıdaki üç işaret bu sitenin kendi üç gerçek bandıdır.

1200 0
320 pikselWCAG'in, içeriğin yatay kaydırma olmadan çalışması gerektiğini söylediği taban genişlik
  • 640 pikselin altıBu sitenin en çok kullanılan sınırı. Her şey tek sütuna iner.
  • 641 ile 1100 piksel arasıTablet ve küçük dizüstü. Başlık hâlâ mobil çubuk.
  • 1101 piksel ve üzeriMasaüstü başlık ve mega menü devreye girer.

320 bir hedef değil tabandır ve 1200 bir standart değil, bu sitenin içerik sütunu tavanıdır. Sizin sayınız kendi yerleşiminizin kırıldığı yerden gelir.

Son kontrol: Bu dersteki bilgiler ve araç adları bu tarihte kaynaklarıyla yeniden doğrulanır.

Duyarlı tam olarak ne demek?

Duyarlı tasarım, her genişlikte kendini yeniden düzenleyen tek bir HTML dosyası, tek bir adres ve tek bir içerik demektir. Dizüstünde yan yana üç sütun, telefonda aynı üçü alt alta. Hiçbir şey çıkarılmaz ve ikinci bir adres üretilmez.

Tek yol bu değildi. Yıllarca iki yol daha yaygındı: mobil alt alan adında ayrı bir site ve sunucudan cihaza göre farklı HTML sunmak. İkisi de hâlâ çalışır ve ikisi de iki kat iştir, çünkü her değişikliğin iki yerde yapılması gerekir. Google'ın kendi mobil öncelikli dizine ekleme belgesi, duyarlı tasarımda içeriğin ve meta verilerin mobil ile masaüstü sürümde aynı olduğunu söyler; diğer iki kurulumu ise ayrıca belgeler.

Pratikte bunu tek bir satır açar. O satır olmadan mobil tarayıcı sayfayı yaklaşık 980 piksel genişliğinde sanal bir tuval üzerine yerleştirip küçültür; okumak için iki parmakla büyüttüğünüz sayfa tam olarak budur:

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

Bu sitede o satır temanın header.php dosyasının on dördüncü satırında duruyor. Kaç medya sorgusu yazdığınız önemli değil; bu satır yoksa hiçbiri beklediğiniz gibi davranmaz.

Neden en dar durumdan başlanır?

Çünkü darlık sizi önceliklendirmeye zorlar. Tek bir dar sütunda fazlalık olan her şey kendini ele verir: dekoratif afiş, kimsenin okumadığı kenar sütunu, bir zamanlar bir gerekçeyle yan yana durup artık durmayan üç düğme. Masaüstünden başlarsanız bu kararları hiç almazsınız, sadece sonradan CSS ile gizlersiniz.

Kodda iki yolunuz var. Temel durumu dar yazıp geniş genişlikleri min-width ile eklersiniz ya da temel durumu masaüstü yazıp max-width ile geri çekilirsiniz. Yeni bir genel site için birincisini seçin: mobil tarayıcı fazladan kural işlemez ve CSS'iniz eklenen her kırılma noktasıyla birikmez. Yalnızca masaüstü için yapılmış eski bir siteyi yenilerken ikincisi daha dürüsttür; var olanı yokmuş gibi gösteremezsiniz.

Bir yanlış anlamayı da burada bitirelim: mobil öncelik bir yazma sırasıdır, mobilde daha az içerik yayınlama izni değil. Google açıkça mobil sürümün içeriğinin masaüstü sürüme denk olması gerektiğini, az ise tamamlanmasını söyler. Tasarım farklı olabilir; içerik olamaz.

Dardan mı genişten mi başlamalı? İkisi de gerçek seçim

Fark yetenekte değil; başlangıç noktasında ve sitenizin yeni mi eski mi olduğundadır.

Dardan başlayın, min-width ile

  • Temel durum medya sorgusuz ve tek sütundur
  • Mobil tarayıcı fazladan kural işlemez
  • İçerik önceliği en baştan netleşir
  • Yeni bir proje için doğru seçim

Genişten başlayın, max-width ile

  • Temel durum, elinizdeki masaüstü yerleşimidir
  • Eski bir siteyi duyarlı yapmak için daha az zahmetli
  • Her kırılma noktası bir geçersiz kılma katmanı ekler
  • Sorgular biriktikçe izini sürmek zorlaşır

İkisini tek dosyada karıştırmak, CSS'in elinizden kaçtığı yerdir. Birini seçin ve proje boyunca ondan şaşmayın.

Kırılma noktası sayısı nereden gelir?

Bir cihaz listesinden değil, kendi yerleşiminizden. Bu, dersin en önemli cümlesi ve çoğu eğitim tersini söylüyor: her yerde tekrarlanan 768, 992 ve 1200 sayıları bir çatının varsayılanıdır ve sitenizle ilgisi yoktur.

Kendi sayılarınızı bulma yolu sıkıcı ve güvenilirdir. Sayfayı açın ve pencereyi kademe kademe daraltın. Bir başlığın kötü sardığı, bir sütunun ezildiği ya da bir şeyin yandan taştığı genişlik sizin kırılma noktanızdır. Sayıyı not edin ve devam edin. Normal bir sayfa on değil, üç dört sayı üretir.

Canlı örnek bu site. Temanın main.css dosyasında 43 medya sorgusu bloğu var ve bunlar birlikte 17 ayrı genişlik sınırı oluşturuyor: 430, 580, 600, 640, 700, 720, 780, 820, 860, 880, 900, 920, 980, 1100, 1259, 1299 ve 1359. Hiçbiri 768 ya da 992 değil. Blok sayısı sınır sayısından fazla, çünkü bazı sınırlar iki kez yazılmış: biri max-width ile, biri bir piksel yukarıda min-width ile: 640 ve 641, 1100 ve 1101. Her sayının kendi hikâyesi var: 1100 altında camsı masaüstü başlığı yerini mobil çubuğa bırakır, 780 altında ise üç ve daha çok sütunlu her içerik tablosu alt alta kartlara dönüşür, çünkü üç sütunlu bir tablo telefonda okunmaz.

Öğrenmesi uzun süren bir nokta: kırılma noktası sayfaya değil bileşene aittir. Dar bir sütunun içinde duran bir kart pencerenin genişliğinde kırılmaz; kendi kapsayıcısının genişliğinde kırılır. @container CSS'e bu yüzden eklendi ve aynı kart tek bir sayfanın iki ayrı yerine konduğunda birinde doğru, diğerinde yanlış olabilir.

Göreli birimler, kapsayıcılar ve yerini önceden ayıran görseller

Medya sorgusu ilk değil son araçtır. Baştan göreli birimlerle yazılmış bir yerleşim, çoğu genişliği tek bir sorgu olmadan geçer. Genişlikleri yüzdeyle ya da ızgarada fr ile verin, yazı boyutunu rem ile ayarlayın ve gerçekten işe yaradığı yerde clamp() kullanın ki tek bir değer iki sınır arasında yumuşak hareket etsin. px, bir kenarlık ya da küçük bir boşluk için yerindedir; bir bloğun genişliği için genelde değil.

Ekranı değil kapsayıcıyı sınırlayın. Bu sitede --wrap adında 1200 piksele ayarlı bir değişken var ve içerik sütunu monitör ne kadar büyük olursa olsun onu aşmaz. Sebep zevk değil: bir metin satırı fazla uzayınca göz, sonraki satırın başına dönerken yerini kaybeder.

Sağdan sola burada devreye girer ve bu bir ayrıntıdan fazlasıdır. margin-left yerine margin-inline-start yazın; aynı tek CSS dosyası Farsça ve Arapçaya da İngilizce ve Türkçeye de hizmet eder, tarayıcı yönü html etiketindeki dir değerinden alır. Bu iddia bu sitede sayılabilir: main.css genelinde yetmiş mantıksal özellik bildirimi ve margin-left, margin-right, padding-left ya da padding-right için sıfır kullanım var.

Ve görseller. Her img, CSS onu yeniden boyutlandırsa bile width ve height ister. Tarayıcı bu ikisinin oranından, dosya gelmeden önce yeri açık tutar; böylece altındaki metin yüklenirken zıplamaz. Yanlarına srcset ve sizes koyun ki telefon masaüstü sürümünü değil küçük sürümü indirsin. Bu sitenin blog yazılarında her görsel ikisini de taşıyor ve öne çıkan görsel iki genişlik sunuyor: 720 ve 1200 piksel.

Neyi kontrol etmeli ve duyarlılık ne değildir

Duyarlılık kontrol listesiyayından önce

Bunları kontrol edin

  • viewport etiketi head içinde var
  • 320 pikselde yatay kaydırma yok
  • Yüzde dört yüz yakınlaştırmada içerik hâlâ okunuyor
  • Her görselde width ve height var
  • Düğmeler ve simgeler en az 24 çarpı 24 piksel
  • Masaüstündeki içeriğin aynısı mobilde de var

Bunlar duyarlılık değildir

  • Mobilde sayfanın yarısını display none ile gizlemek
  • Yeniden yerleştirmek yerine tüm sayfayı yakınlaştırmayla küçültmek
  • Ayrı bir mobil alt alan adı kurmak
  • Bir çatının kırılma noktalarını test etmeden kopyalamak

Bu liste gerçek bir telefondaki testin yerini tutmaz. Tarayıcı simülatörü ne bir parmağı ne de yavaş bir bağlantıyı taklit eder.

Duyarlı demeden önce üç kontrol

Birincisi, 320 piksel. WCAG standardındaki Reflow ölçütü, içeriğin 320 CSS pikseline denk bir genişlikte iki yönlü kaydırma gerektirmeden kullanılabilir olmasını söyler. Çoğu kişi bu sayının eski telefonlarla ilgili olduğunu sanır, ama belgenin kendi vurgusu başka yerdedir: 320 CSS piksel, yüzde dört yüz yakınlaştırmadaki 1280 piksellik bir ekrana denktir. Yani ölçüt aslında sayfayı büyütmek zorunda olan, gözü iyi görmeyen biriyle ilgilidir; telefonla değil.

İkincisi, dokunulması gereken şeyin boyutu. Aynı standarttaki başka bir ölçüt, işaretçi hedeflerinin çevresinde yeterli boşluk yoksa en az 24 çarpı 24 CSS piksel olmasını söyler. Altbilgide sıkışmış simgeler ve bir tablonun içindeki silme düğmeleri, bunun genelde çuvalladığı iki yerdir.

Üçüncüsü, içerik. Telefonda gördüğünüz sürüm, masaüstü sürümün söylediğini söylüyor mu? Bir blok mobilde display: none ile gizlenmişse o blok Google için de fiilen sönükleşmiştir, çünkü dizine ekleme mobil sürümden yapılır.

Ve W3C'nin kendi belirttiği bir istisna: doğası gereği iki boyutlu içerik, örneğin büyük bir veri tablosu ya da bir harita, ölçütün dışındadır. Böyle bir şeyin çözümü onu 320 piksele tıkıştırmak değil; sayfanın geri kalanı kaymazken o tek şeyin kendi kapsayıcısı içinde kaymasına izin vermektir.

Yapay zekayla hızlı yol

Dil modelleri medya sorgularını saniyeler içinde yazar. Yapamadıkları şey, <em>sizin</em> yerleşiminizin nerede kırıldığını bilmektir; bilemedikleri için de eğitimlerin tekrarladığı sayılara uzanırlar. Yani hızlı yol, modelden kırılma noktası istemek değil; onları kendiniz ölçüp modele yalnızca CSS'i yazdırmaktır. Burada hızlı ve ucuz bir model yeter, çünkü bir sayı listesini birkaç kurala çevirmek mekanik iştir; güncel tercihimiz <a class="text-link" href="/tr/ai/">yapay zeka bölümünde</a>.

  1. Sayfayı açın ve pencereyi kademe kademe daraltın. Bir şeyin gerçekten bozulduğu her genişliği tek cümleyle not edin: ne bozuldu ve nasıl. Üç dört genişlik normaldir.
  2. Tüm dosyayı değil, yalnızca o bileşenin CSS'ini alın. Model beş bin satırdansa elli satırla daha iyi çalışır ve çıktıyı siz de daha kolay okursunuz.
  3. Aşağıdaki tarifi kendi genişlikleriniz ve açıklamalarınızla doldurun ve çalıştırın.
  4. CSS'i koyun ve yeniden daraltın. Yeni bir kırılma çıkarsa listeye ekleyip tarifi tekrar çalıştırın; çıktının üstüne elle başka bir sorgu eklemeyin.
  5. Son ikisini kendiniz kontrol edin: 320 piksel ve gerçek bir telefondaki düğme boyutu. Bu ikisini hiçbir model sizin yerinize yapmaz.

Kopyalamaya hazır şablon

Bu, {bileşen adı} bileşeninin CSS'i:

{CSS'i buraya yapıştırın}

Yerleşim şu genişliklerde kırılıyor:
- {genişlik}px: {ne bozuluyor}
- {genişlik}px: {ne bozuluyor}

Yalnızca bu kırılmaları düzelten en küçük medya sorgusu kümesini yaz.
Kurallar:
1) min-width kullan. Medya sorgusuz temel durum, dar durum olmalı.
2) margin-left ve padding-right yerine margin-inline-start ve padding-inline-end kullan.
3) Sana verdiğim sayılar dışında sabit px genişliği kullanma.
4) Yukarıdaki listemde olmayan hiçbir kırılma noktası ekleme.
5) Her sorgunun üstüne, tam olarak neden o sayı olduğunu söyleyen tek satırlık bir yorum yaz.
Yalnızca CSS çıkar.

Çıktıya güvenmeden önce: Model sayfanızı görmez; yalnızca yapıştırdığınızı görür. Sayıları yanlış ölçtüyseniz çıktı o yanlışı derli toplu biçimde uygular. İki şey de erişiminin dışındadır: 320 piksel testi ve gerçek bir telefonda düğmeye parmakla dokunmak. O ikisi sizin işiniz.

Bu işte yapay zeka

Duyarlı işlerde yapay zeka kuralı yazmakta iyi, sayıyı seçmekte kötüdür. Konumumuz bu: CSS'i o yazsın, kırılma noktasını asla o seçmesin. Gerçekten zaman kazandıran üç kullanım: sabit bir yerleşimi göreli bir ızgaraya çevirmek, bir kuralın belirli bir genişlikte neden etkisiz kaldığını açıklamak ve eski bir dosyayı sağdan sola için mantıksal özelliklere yeniden yazmak.

Gerçekten işe yarayan araçlar

  • Claude Uzun bir CSS dosyasını mantıksal özelliklere yeniden yazmakta ve satır satır açıklamakta iyi. İran, Anthropic'in desteklenen ülkeler listelerinin hiçbirinde yok; bunu Anthropic'in kendi sayfasında okuduk.
  • Gemini Tek bir kural hakkındaki kısa sorular ve bir yerleşimin ızgara sürümünü almak için yeterli; Farsçayı da iyi anlar. Google'ın kendi sayfası Gemini web uygulamasının 230'dan fazla ülke ve bölgede çalıştığını söylüyor ve İran o listede yok.
  • ChatGPT En yaygın seçim ve bu işler için kabul edilebilir. Erişimi ya da fiyatı hakkında burada bir iddiada bulunmuyoruz: OpenAI'nin desteklenen ülkeler sayfası sunucumuza 403 dönüyor ve arkasında bir şey olmayan iddia yazmayız.

Nerede geri teper

Buradaki asıl risk sayıdır. Modeller on yıllık eğitim içeriği ve çatı varsayılanları üzerinde eğitildi; kendi kullanımımızda defalarca gördük ki bir genişlik vermediğinizde 768 ve 992'ye uzanıyorlar. Oysa bu sayılar bu sitenin main.css dosyasının tamamında bir kez bile geçmiyor. Sonuç, simülatörde iyi görünen ve gerçek kullanıcının genişliğinde kırılan bir sitedir. İkinci risk daha incedir: bir model ölçmediği şeye hüküm veremez. Metinden kontrast oranı hesaplamaz ve reflow testi çalıştırmaz; W3C'nin kendi Easy Checks rehberi de otomatik incelemenin insan incelemesinin yerini tutmadığını söyler. Yani sayıları kendiniz ölçün, kuralı modelden isteyin. Her aracın İran'dan nasıl ödenebileceği için satın alma rehberine bakın.

Kaynaklar: W3C: Understanding SC 1.4.10 Reflow W3C WAI: Easy Checks Anthropic: supported countries Google: where Gemini Apps are available

Bu tavsiyenin sınırı

Duyarlı yerleşim ile iyi bir mobil deneyim aynı şey değildir. Her genişlikte doğru oturan bir sayfa, yavaş bir bağlantıda üç saniye boş kalıyorsa ya da düğmelerine başparmakla basılamıyorsa yine de kötüdür; o konu site hızı yolunun konusudur. İkincisi, doğası gereği iki boyutlu içerik, örneğin büyük bir veri tablosu, 320 piksele katlanmaz ve standardın kendisi onu istisna tutar. Üçüncüsü, hazır bir tema kullanıyorsanız bu kararların çoğu zaten alınmıştır; işiniz yeniden kurmak değil, kontrol etmektir.

Kendi işimizden

Kırılma noktasının sizin yerleşiminize ait olduğu kuralı tam da bu sitede sayılabilir. Bu dersin denetlendiği gün rgb.ir temasının main.css dosyasında 43 medya sorgusu bloğu vardı ve bunlar aralarında 17 ayrı genişlik sınırı oluşturuyordu; en küçüğü 430, en büyüğü 1359. Hiçbiri 768 ya da 992 değil; yani hiçbiri bir cihaz listesinden veya bir çatı varsayılanından gelmedi. 1200 sayısı o dosyada geçiyor, ama kırılma noktası olarak değil: --wrap değişkeninin değeri, yani içerik sütunu genişliğinin tavanı. Aynı yerde sayılabilecek bir sayı daha: dosyanın tamamında yetmiş mantıksal özellik bildirimi ve margin-left ya da padding-right için sıfır kullanım var; sebebi basit, o tek dosyanın hem sağdan sola Farsça ve Arapçayı hem de İngilizce ve Türkçeyi sürmesi gerekiyor. Bunların hepsi aynı dosya üzerinde tek bir grep ile yeniden sayılabilir.

Gerçek devam soruları

Duyarlı ile mobil uyumlu farklı mı?

Evet. Duyarlı bir uygulama biçimidir: yerleşimi değişen tek bir sayfa. Mobil uyumlu ise bir sonuçtur: telefonda kullanılabilen bir sayfa. Bir site duyarlı olup yine de mobilde kötü olabilir; örneğin yavaş olduğu ya da düğmeleri minik olduğu için.

Kaç kırılma noktası gerekir?

Yerleşiminizin kırıldığı yerler kadar, daha fazla değil. Normal bir sayfa üç dörtle biter. Ona ulaştıysanız bu genelde temel yerleşimin sabit birimlerle yazıldığını ve onu sorgularla yamadığınızı gösterir.

Duyarlı bir site daha iyi sıralanır mı?

Duyarlı olmak tek başına bir sıralama primi değildir. Önemli olan, Google'ın mobil sürümden dizine eklemesidir; yani mobilde olmayan şey Google için fiilen yoktur. Duyarlılık bu denkliğe ulaşmanın en yaygın yoludur, tek yolu değil.