Menu

CSS Display: Block, Inline, Inline-Block, None ve Flex

display özelliği bir elementin düzene nasıl katıldığına karar verir. Ölçülmüş yan yana kutularla block, inline ve inline-block'u, display none ile visibility hidden farkını ve flex, grid, flow-root ile contents'in nereye oturduğunu öğren.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

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ı:

blockinlineinline-block
Yeni satırda başlarEvetHayırHayır
Varsayılan genişlikKapsayıcıyı doldururİçeriğe uyarİçeriğe uyar
width ve heightUygulanırYok sayılırUygulanır
Dikey marginUygulanırYok sayılırUygulanır
Dikey paddingİçeriği iterBoyanır ama satırları birbirinden ayırmazİçeriği iter
Tipik elementlerdiv, p, h1, ul, sectionspan, a, strong, embutton, 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: nonevisibility: hiddenopacity: 0
Yer kaplarHayırEvetEvet
TıklanabilirHayırHayırEvet
Ekran okuyucular okurHayırHayırEvet
Yumuşak canlandırılabilirHayırHayırEvet

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ğerNe yapar
flow-rootFloat'larını içinde tutan ve çocuk margin'lerinin dışarı sızmasını durduran bir blok; modern "clearfix"
contentsElementin 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-itemListe işaretli bir blok, li için varsayılan
table, table-row, table-cellTablo olmayan elementlerde tablo düzeni
inline-flex, inline-gridSatır içinde duran bir flex ya da grid kapsayıcı

Sık yapılan hatalar

  • Bir span ya da a elementine width veya height vermek. Satır içi elementler bunları yok sayar. inline-block ya da block kullan.
  • 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: none kullanmak. Onu onlardan da gizler.
  • Bir çocuğun display: none bir ebeveynin içinde görünmesini beklemek. Gizli bir ebeveynin içindeki hiçbir şey çizilmez.
  • hidden özniteliğini ezen bir display kuralı. CSS kuralı kazanır.
  • display'i canlandırmaya çalışmak. display: none ayarlamak elementi solma olmadan anında gizler; opacity'yi canlandır ve display'i (ya da visibility'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.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA