Ders 11 / 26
Görüntüleme Türleri
Blok, satır içi ve satır içi blok kutuların davranış farkları; dış ve iç görüntüleme türü ayrımı ve gizlemenin üç ayrı yolu.
İçindekiler
Önceki iki derste kutuların ölçüleri hesaplandı ama kutunun ne tür bir kutu olduğu
sorulmadı. Bir paragraf neden kendi satırını kaplar da içindeki vurgu ögesi metnin akışında
kalır? İkisine de width: 200px yazıldığında neden yalnızca biri değişir?
Fark display özelliğinden gelir. Bu ders üç temel türü — blok, satır içi ve satır içi blok
— dört ölçüt üzerinden karşılaştırır ve gizlemenin ayrı bir mesele olduğunu gösterir.
Üç Tür, Dört Ölçüt
// goruntuleme.mjs — display degerinin hangi ozellikleri etkilediğini cizelgeler const TURLER = { "block": { satirKaplar: true, widthUygulanir: true, dikeyBosluk: true, aralikDuyarli: false }, "inline": { satirKaplar: false, widthUygulanir: false, dikeyBosluk: false, aralikDuyarli: true }, "inline-block": { satirKaplar: false, widthUygulanir: true, dikeyBosluk: true, aralikDuyarli: true }, "none": { satirKaplar: false, widthUygulanir: false, dikeyBosluk: false, aralikDuyarli: false }, }; const basliklar = ["display", "kendi satiri", "width/height", "dikey margin", "bosluga duyarli"]; console.log(basliklar.map((b, i) => b.padEnd(i === 0 ? 14 : 16)).join("")); for (const [ad, o] of Object.entries(TURLER)) { const e = (v) => (v ? "evet" : "hayir").padEnd(16); console.log(ad.padEnd(14) + e(o.satirKaplar) + e(o.widthUygulanir) + e(o.dikeyBosluk) + e(o.aralikDuyarli)); } // satir ici kutularin yan yana dizilmesi: aradaki bosluk karakteri de bir kutudur console.log("\n--- satir ici dizilim (bosluk karakteri dahil) ---"); const parcalar = [ { tur: "inline-block", en: 80 }, { tur: "bosluk", en: 4 }, { tur: "inline-block", en: 80 }, { tur: "bosluk", en: 4 }, { tur: "inline-block", en: 80 }, ]; let x = 0; for (const p of parcalar) { console.log(`${String(x).padStart(4)} .. ${x + p.en} ${p.tur}`); x += p.en; } console.log(`toplam satir eni: ${x} (kutular: ${80 * 3}, bosluklar: ${x - 240})`);
display kendi satiri width/height dikey margin bosluga duyarli block evet evet evet hayir inline hayir hayir hayir evet inline-block hayir evet evet evet none hayir hayir hayir hayir --- satir ici dizilim (bosluk karakteri dahil) --- 0 .. 80 inline-block 80 .. 84 bosluk 84 .. 164 inline-block 164 .. 168 bosluk 168 .. 248 inline-block toplam satir eni: 248 (kutular: 240, bosluklar: 8)
Çizelge, önceki dersteki soruların yanıtını veriyor.
Blok kutu (block box) kapsayan kutunun satır içi eksenini baştan sona doldurur ve
kendinden sonrakini alt satıra iter. width ve height uygulanır; dört kenardaki dış
boşluk da uygulanır. Paragraf, başlık, bölüm ve liste bu türdendir.
Satır içi kutu (inline box) metnin akışında kalır ve yalnızca içeriği kadar yer kaplar.
width ve height bildirimlerinin hiçbir etkisi yoktur; kutunun ölçüsü içeriğinden
gelir. Dikey dış boşluk da yok sayılır. Vurgu, bağlantı, kısaltma ve genel amaçlı span
bu türdendir.
Bir uyarı gerekir: satır içi kutuda yatay iç boşluk ve kenarlık uygulanır ama çizilen alan satır yüksekliğini büyütmez. Bir bağlantıya dikey iç boşluk verildiğinde renkli alan büyür, satırlar arasındaki mesafe değişmez ve alanlar üst üste binebilir.
Satır içi blok kutu (inline-block box) ikisinin arasındadır: dışarıdan satır içi gibi
davranır — kendi satırını kaplamaz, komşularıyla yan yana durur — ama içeriden bir blok
kutudur; width, height ve dört kenar dış boşluğu uygulanır.
Satır İçi Dizilimde Boşluk Karakteri Sayılır
Çıktının ikinci bölümü sık karşılaşılan bir sorunu gösteriyor. Üç adet 80 birimlik satır içi blok kutu yan yana konduğunda toplam satır eni 240 değil 248 çıktı. Aradaki 8 birim, kaynak metinde kutuların arasındaki boşluk karakterlerinden gelir.
Sebep, satır içi düzenin metin düzeni olmasıdır. Kaynak metindeki satır sonları ve boşluklar birer boşluk karakterine indirgenir ve bu karakter de yer kaplar. Genişliği yazı tipine bağlıdır; buradaki 4 birim örnek bir değerdir.
Sonuç, üç kutuya width: 33.333% verildiğinde bir satıra sığmamalarıdır — boşluklar
eklenince toplam yüzde yüzü aşar. Bu, satır içi blok ile ızgara benzeri düzenler kurmanın
kırılgan yanıdır ve bir sonraki kurstaki düzen sistemlerinde ortadan kalkar; o modellerde
kutular arasındaki metin düğümleri yerleşime katılmaz.
Dış ve İç Görüntüleme Türü
display özelliği tek bir şey değil, iki şey birden söyler.
Dış görüntüleme türü (outer display type) kutunun kapsayıcısında nasıl davranacağını
belirler: block ya da inline.
İç görüntüleme türü (inner display type) kutunun çocuklarını nasıl dizeceğini
belirler: flow, flow-root, flex, grid, table.
İki değerli yazımda ikisi ayrı ayrı verilir:
.gezinme { display: block flex; }
Tek değerli eski yazımlar bu ikilinin kısaltmalarıdır: block sözcüğü block flow,
inline-block sözcüğü inline flow-root, flex sözcüğü block flex anlamına gelir. Bu
ayrım, inline-block türünün neden “içeriden blok, dışarıdan satır içi” diye tarif
edildiğini açıklar — sözcük gerçekten iki parçadan oluşur.
flow-root değeri ayrıca anılmalıdır: kutuyu, çocuklarının akışını kendi içinde tamamlayan
bağımsız bir kök yapar. Bunun ne işe yaradığını kayan öğeler dersinde göreceğiz.
Türü Değiştirmek Anlamı Değiştirmez
Bir ögenin görüntüleme türü tarayıcının varsayılan biçem dosyasından gelir ve bir bildirimle
değiştirilebilir. li { display: inline; } yazmak liste maddelerini yan yana dizer.
Değişen yalnızca yerleşimdir. Belgedeki anlam — bunun bir liste maddesi olduğu — yerinde kalır ve belge ağacını okuyan programlar onu görmeye devam eder. Bu, Web’in Temelleri ve HTML kursunda kurulan yapı–sunum ayrımının doğrudan sonucudur: bir başlığı satır içi yapmak onu başlık olmaktan çıkarmaz.
Tersi de doğrudur ve bir uyarı içerir: bir ögeyi görsel olarak başka bir şeye benzetmek onu
o şey yapmaz. Bir div ögesine düğme görünümü vermek, klavyeyle odaklanabilir ve
etkinleştirilebilir bir düğme üretmez. Görünüm biçemin, davranış ve anlam işaretlemenin
işidir.
Gizlemenin Üç Yolu
display: none çizelgede dördüncü satırdaydı ve bütün ölçütlerde “hayır” veriyordu. Bunun
sebebi, bu değerin kutu üretmemesidir. Öge belge ağacında durur ama yerleşime hiç
katılmaz.
Üç ayrı gizleme yolu vardır ve sonuçları farklıdır:
| Yazım | Kutu üretir mi | Yer kaplar mı | Yardımcı teknolojiye görünür mü |
|---|---|---|---|
display: none |
Hayır | Hayır | Hayır |
visibility: hidden |
Evet | Evet | Hayır |
opacity: 0 |
Evet | Evet | Evet |
Üçüncü satır dikkat ister: saydamlığı sıfırlanmış bir öge görünmez ama hâlâ oradadır —
odaklanabilir, tıklanabilir ve ekran okuyucuya okunur. Bir şeyi kullanıcıdan gizlemek için
opacity: 0 yazmak, onu erişilebilirlik ağacından kaldırmaz.
Dördüncü bir durum daha vardır: bir metni görsel olarak gizleyip yardımcı teknolojiye
bırakmak. Bu, display: none ile yapılamaz; ögeyi bir piksellik bir alana kırpan bir kural
grubuyla yapılır ve genellikle .gorsel-gizli gibi bir yardımcı sınıfla adlandırılır.
İstasyon Sayfasında Türler
/* istasyon.css — 10. adım: görüntüleme türleri */ .gezinme li { display: inline-block; margin-inline-end: 12px; } .olcum-cizelgesi caption { display: table-caption; text-align: start; } .durum-rozeti { display: inline-block; padding-block: 2px; padding-inline: 8px; border-radius: 4px; } .gorsel-gizli { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.durum-rozeti sınıfı satır içi blok olarak tanımlandı çünkü iki şeyi birden istiyor:
metnin akışında kalmak ve dikey iç boşluk alabilmek. Satır içi olsaydı iç boşluk çizilir ama
satır yüksekliğini büyütmezdi; blok olsaydı kendi satırına inerdi.
.gorsel-gizli sınıfı yukarıdaki dördüncü durumu gerçekleştirir: kutu üretilir, bir
piksellik bir alana kırpılır ve erişilebilirlik ağacında kalır. Ölçüm çizelgesinde birimleri
görsel olarak sütun başlığında bir kez yazıp her hücrede yardımcı teknolojiye tekrarlamak
için kullanılır.
Özet
- Blok kutu kapsayanının satır içi eksenini doldurur ve kendi satırını kaplar;
width,heightve dört kenar dış boşluğu uygulanır. - Satır içi kutu metnin akışında kalır;
width,heightve dikey dış boşluk uygulanmaz, yatay iç boşluk ve kenarlık çizilir ama satır yüksekliğini büyütmez. - Satır içi blok kutu dışarıdan satır içi, içeriden bloktur; yan yana dizilir ama ölçü ve boşluk bildirimlerini alır.
- Satır içi dizilimde kaynak metindeki boşluk karakterleri de yer kaplar; bu, yan yana dizilen kutuların toplamının beklenenden geniş çıkmasının sebebidir.
- Gizlemenin üç yolu farklı sonuç verir:
display: nonekutu üretmez,visibility: hiddenyer kaplar,opacity: 0ise erişilebilirlik ağacında kalır ve etkileşime açıktır.
Sonraki Adım
Bu ders kutuların türünü tanımladı ama nasıl dizildiklerini ayrıntısıyla anlatmadı. Blok kutular neden yukarıdan aşağı yığılır, satır içi kutular hangi kurala göre satırlara bölünür, iki blok kutu arasındaki dış boşluk neden ikisinin toplamı değildir? Sonraki ders normal akışın kurallarını tanımlar ve dış boşluk çökmesini sayıyla hesaplar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.