display ne yapar
Her elementin nasıl yerleşeceğine karar veren bir display değeri vardır. İlk karşılaştığın üçü block, inline ve inline-block'tur. İşte aynı width, height, padding ve margin değerlerine sahip üç özdeş kutu; yalnızca display farklı:
block | inline | inline-block | |
|---|---|---|---|
| Yeni satırda başlar | Evet | Hayır | Hayır |
| Varsayılan genişlik | Kapsayıcıyı doldurur | İçeriğe uyar | İçeriğe uyar |
width ve height | Uygulanır | Yok sayılır | Uygulanır |
| Dikey margin | Uygulanır | Yok sayılır | Uygulanır |
| Dikey padding | İçeriği iter | Boyanır ama satırları birbirinden ayırmaz | İçeriği iter |
| Tipik elementler | div, p, h1, ul, section | span, a, strong, em | button, input, img (değiştirilen elementler böyle davranır) |
Önizlemede block kutu 120px genişliğinde kendi satırında duruyor. Inline olan genişliği ve yüksekliği yok sayıyor ve yalnızca kelimesini sarıyor; dikey padding'i ve kenarlığı satırı hiç uzatmadan satırın üstünden ve altından taşıyor. Inline-block kutu metin satırında kalıyor ama tam boyutunu koruyor.
display: block
Bir blok element kullanılabilir genişliğin tamamını alır ve ardından gelen her şeyi yeni bir satıra iter. Bir linki bloğa çevirmek, bütün bir satırı tıklanabilir yapmanın yoludur:
.menu a {
display: block; /* the full row is the link */
padding: 10px 16px;
}
Bir bloğun genişliği ayarlanabilir ve div ortalama sayfasının gösterdiği gibi genişliği olduğunda margin: 0 auto onu ortalar.
display: inline-block
inline-block orta yoldur: bir kelime gibi satırda akar ama boyutlandırılabilir. Metnin içindeki rozetler, butonlar ve ikonlar için kullanışlıdır:
Yan yana duran birkaç inline-block kutu, HTML'deki boşluktan dolayı aralarında küçük bir boşluk alır. Kutu satırları için ebeveyne verilen display: flex daha iyi bir araçtır.
display: none ve visibility: hidden
İkisi de bir elementi görünmez yapar. Fark, yerini koruyup korumamasıdır:
display: none | visibility: hidden | opacity: 0 | |
|---|---|---|---|
| Yer kaplar | Hayır | Evet | Evet |
| Tıklanabilir | Hayır | Hayır | Evet |
| Ekran okuyucular okur | Hayır | Hayır | Evet |
| Yumuşak canlandırılabilir | Hayır | Hayır | Evet |
HTML hidden özniteliği, tarayıcının stil dosyası üzerinden display: none ile aynı şeyi yapar; bu da elemente display ayarlayan herhangi bir CSS kuralının (örneğin .card { display: flex; }) onu ezeceği ve elementin yeniden görüneceği anlamına gelir. Bu seni zorlarsa [hidden] { display: none !important; } ekle.
Bir şeyi görsel olarak gizleyip ekran okuyucular için tutmak istiyorsan (örneğin bir ikon butonunun etiketi), display: none yerine bir "visually hidden" class'ı kullan.
display: flex ve display: grid
Bu ikisi bir elementi çocukları için bir düzen kapsayıcısına dönüştürür:
display: flexçocukları hizalama ve boşluk kontrolüyle tek bir satıra ya da sütuna dizer. Bkz. flexbox.display: gridçocukları aynı anda satırlara ve sütunlara yerleştirir.
Kapsayıcının kendisi blok olarak kalır. inline-flex ve inline-grid çocuklar için aynısını yapar ama kapsayıcıyı inline-block gibi satır içinde akıtır.
Diğer değerler
| Değer | Ne yapar |
|---|---|
flow-root | Float'larını içinde tutan ve çocuk margin'lerinin dışarı sızmasını durduran bir blok; modern "clearfix" |
contents | Elementin kendi kutusu kaybolur ve çocukları ebeveyninin çocukları gibi davranır. Butonlarda, listelerde ve tablolarda kaçın: bazı tarayıcılar elementin anlamını ekran okuyuculardan düşürür |
list-item | Liste işaretli bir blok, li için varsayılan |
table, table-row, table-cell | Tablo olmayan elementlerde tablo düzeni |
inline-flex, inline-grid | Satır içinde duran bir flex ya da grid kapsayıcı |
Sık yapılan hatalar
- Bir
spanya daaelementinewidthveyaheightvermek. Satır içi elementler bunları yok sayar.inline-blockya dablockkullan. - Satır içi bir elementte dikey margin. Bu da yok sayılır. Çözüm aynı.
- Ekran okuyuculara yönelik metni gizlemek için
display: nonekullanmak. Onu onlardan da gizler. - Bir çocuğun
display: nonebir ebeveynin içinde görünmesini beklemek. Gizli bir ebeveynin içindeki hiçbir şey çizilmez. hiddenözniteliğini ezen birdisplaykuralı. CSS kuralı kazanır.display'i canlandırmaya çalışmak.display: noneayarlamak elementi solma olmadan anında gizler;opacity'yi canlandır vedisplay'i (ya davisibility'yi) sonda değiştir.
Sıkça Sorulan Sorular
block, inline ve inline-block arasındaki fark nedir?
block bir element yeni bir satırda başlar ve kullanılabilir genişliği doldurur. inline bir element metnin içinde akar ve width, height ile dikey margin'leri yok sayar. inline-block inline gibi metnin içinde akar ama bir blok gibi genişlik, yükseklik, padding ve margin kabul eder.
display: none ne işe yarar?
Elementi sayfadan tamamen kaldırır: yer kaplamaz, çizilmez ve ekran okuyuculardan gizlenir. Çocukları da onunla birlikte gizlenir ve kendi display değerleriyle gösterilemez.
display: none ile visibility: hidden arasındaki fark nedir?
display: none elementi ve kapladığı yeri kaldırır. visibility: hidden ise onu görünmez yapar ama düzendeki yerini korur, böylece hiçbir şey kaymaz.
div varsayılan olarak block mu inline mı?
Block. div, p, başlıklar, ul, section ve form varsayılan olarak block'tur; span, a, strong, em, img, input ve button ise inline ya da inline-block'tur.
inline-block elementlerin arasında neden boşluk var?
HTML'deki etiketler arasındaki boşluk, tıpkı kelimeler arasındaki gibi bir boşluk karakteri olarak çizilir. Bunun yerine ebeveyne gap ile birlikte display: flex ver ya da boşluğu kaldır.