Display: inline ve display: inline-block arasındaki fark nedir?


607

Arasındaki fark tam olarak nedir inlineinline-blockCSS ve değerleridisplay ?

Yanıtlar:


1351

Görsel bir cevap

<span>İçinde bir element düşünün <div>. Eğer verirsen<span>Elemana 100 piksel yükseklik ve kırmızı kenarlık

ekran: satır içi

ekran: satır içi

display: inline-block

display: inline-block

Ekran bloğu

resim açıklamasını buraya girin

Kod: http://jsfiddle.net/Mta2b/

Olan elemanlar display:inline-blockgibi display:inlineelemanlar, ancak bir olabilir genişlik ve yükseklik . Bu, satır içi blok öğesini metin veya diğer öğeler içinde akarken blok olarak kullanabileceğiniz anlamına gelir.

Desteklenen stillerin özet olarak farkı:

  • inline : Sadece margin-left, margin-right, padding-left,padding-right
  • içi blok : margin, padding, height,width

6
Büyük sezgi. Tek fark, satır içi öğelerin height özelliğinin ayarlanamamasıdır?
user2316667

7
@ user2316667 ve genişlik
Oscar Calderon

2
@ user2316667 ve @OscarCalderon: Ayrıca, satır içi öğeler dikey kenar boşluklarını ve dolguları önemsemez ve sonraki öğe aynı satıra yerleştirilir (bundan sonra satır sonu olmaz). olarak benzeri blok elemanlarının p, divbir bütün genişliği hattı (bir satır sonu kuvvet), fakat saygı genişlik / yükseklik ve dikey / yatay doldurma / kenar olsun. Satır içi blok öğeleri blokla aynı davranışa sahiptir, ancak tüm satır
kesmeleri yoktur

1
dolgu üst ve dolgu sağ da satır içi öğenin görüntü efektini etkiler ve biraz karışıklığa neden olur.
tomwang1013

2
@ manuman94 Hayır, bu demek değil. Tüm farklı ekran tipleri için kullanım durumları vardır.
splattne

126

display: inline;, bir cümlede kullanılacak bir görüntüleme modudur. Örneğin, bir paragrafınız varsa ve yaptığınız tek bir kelimeyi vurgulamak istiyorsanız:

<p>
    Pellentesque habitant morbi <em>tristique</em> senectus
    et netus et malesuada fames ac turpis egestas.
</p>

<em>Türünde bir display: inline;bu etiketi her zaman cümle içinde kullanıldığı için, varsayılan olarak. <p>Türünde bir display: block;bir cümle, ne de bir cümlede, bu cümle bir blok var ikisi de değil, çünkü varsayılan olarak.

Olan bir öğe a veya a veya dikey display: inline; olamaz . Olan bir unsur olabilir bir var , ve . Bir eklemek isterseniz için eleman, sen bu maddeyi ayarlamak gerekir . Şimdi birheightwidthmargindisplay: block; widthheightmargin
height<em>display: inline-block;height öğeye ve diğer tüm blok stillerine ( blockparçası inline-block) , ancak bir cümleye ( inlineparçası inline-block) yerleştirilir.


11
Mükemmel cevap! tl; dr - Satır içi öğelerin boyutunu değiştirmek isterseniz, satır içi bloğu görüntüleme türü olarak kullanıyor olabilirsiniz .
errorprone

7
Küçük düzeltme: satır içi öğeler olabilir yatay marjı (sağ, sol) kalmadı değil dikey marjı (üst, alt)
whyleee

1
İyi cevap çünkü displaydeğerlerden birini seçerken neler yapabileceğimiz / yapamayacağımızdan bahsettiniz .
ha9u63ar

14

Yanıtlarda belirtilmeyen bir şey, satır içi öğenin satırlar arasında kırılabileceği, satır içi blok ise (ve açıkça engelleyemediği)! Bu nedenle satır içi öğeler, içindeki metin ve blokların cümlelerini biçimlendirmek için yararlı olabilir, ancak doldurulmadıkları için satır yüksekliğini kullanabilirsiniz .

<div style="width: 350px">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  <div style="display: inline; background: #F00; color: #FFF">
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<hr/>
<div style="width: 350px">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  <div style="display: inline-block; background: #F00; color: #FFF">
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

resim açıklamasını buraya girin


6

Yukarıdaki tüm yanıtlar orijinal soru hakkında önemli bilgilere katkıda bulunur. Ancak yanlış görünen bir genelleme var.

Bu mümkündür grubu genişliği ve en az bir adet içi elemanının (ı düsünebilirz) yüksekliği göre -<img> öğeye .

Her ikisi de burada ve bu yinelenen cevapta bunun mümkün olmadığını, ancak geçerli bir genel kural gibi görünmediğini kabul etti.

Misal:

img {
  width: 200px;
  height: 200px;
  border: 1px solid red;
}
<img src="#" />

imgVardır display: inline, ancak onun widthve heightbaşarıyla kuruldu.


2
Aslında img-tag, varsayılan görüntüleme değeri olarak display-inline'a sahiptir. Bu yüzden genişlik ve yüksekliği ayarlamak mümkündür.
Alex

img bir satır içi öğedir -> developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements ... Yani temelde söylediklerimin aynısını söylüyorsunuz ve aşağıya çekiyor musunuz ??
alexandros84

7
Hayır, değilim. img-tags, temel olarak içeriğin bir satır içi blok elemanı gibi davranacağı şekilde değiştirildiği anlamına gelen "değiştirilmiş öğeler" dir. Ve evet gerçek varsayılan özellik (tarayıcı tarafından hesaplanan özelliği satır içi). Ancak bunun tek nedeni, satır içi bloğun CSS2'ye kadar tanıtılmaması ve bunun için, içeriğiyle değiştirildiği için "satır içi blok öğesi gibi davranan bir satır içi eleman" olmasıdır. yani öğeye yükseklik / genişlik ayarlamıyorsunuz, onu içeriğine ayarlıyorsunuz - Wierd, evet. Biliyorum. drafts.csswg.org/css2/conform.html#replaced-element
Alex

Söyledikleriniz aslında ilginç. Araştırmak ve yeniden düzenlemek için bana biraz zaman tanıyın ve belki de aşağı ve geri oyu geri alın ..! Günün sonunda dürüstçe bu tartışmanın tüm tartışmanın tamamlanmasına katkıda bulunduğunu hissediyorum.
alexandros84

1

splattne'nin cevabı muhtemelen her şeyin çoğunu kapsıyordu, bu yüzden aynı şeyi tekrarlamam, ama: inlineve CSS özelliği inline-blockile farklı davranıyorlar direction.

Bir sonraki snippet'te one two(sırasıyla), LTR düzenlerinde olduğu gibi işlendiğini görürsünüz . Buradaki tarayıcının İngilizce kısmı LTR metni olarak otomatik olarak algıladığını ve soldan sağa oluşturduğundan şüpheleniyorum.

body {
  text-align: right;
  direction: rtl;
}

h2 {
  display: block; /* just being explicit */
}

span {
  display: inline;
}
<h2>
  هذا عنوان طويل
  <span>one</span>
  <span>two</span>
</h2>

Devam edip seti Ancak, displayhiç inline-block, tarayıcı saygı görünen directionböylece mülkiyet ve sırayla sağdan sola doğru Elemanları kılmak two oneoluşturulur.

body {
  text-align: right;
  direction: rtl;
}

h2 {
  display: block; /* just being explicit */
}

span {
  display: inline-block;
}
<h2>
  هذا عنوان طويل
  <span>one</span>
  <span>two</span>
</h2>

Bunun başka tuhaflıkları olup olmadığını bilmiyorum, sadece Chrome'da bunu ampirik olarak buldum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.