В чем разница между display: inline и display: inline-block?

В чем именно разница между значениями inline и inline-block CSS display?


person Logesh Paul    schedule 23.01.2012    source источник


Ответы (6)


Визуальный ответ

Представьте себе элемент <span> внутри <div>. Если вы зададите элементу <span> высоту 100 пикселей и красную границу, например, он будет выглядеть так:

дисплей: встроенный

display: inline

display: inline-block

display: inline-block

display: block

введите описание изображения здесь

Код: http://jsfiddle.net/Mta2b/

Элементы с display:inline-block похожи на элементы display:inline, но могут иметь ширину и высоту. Это означает, что вы можете использовать элемент встроенного блока как блок, перемещая его в тексте или других элементах.

Краткое описание различий поддерживаемых стилей:

  • встроенный: только margin-left, margin-right, padding-left, padding-right
  • встроенный блок: margin, padding, height, width
person splattne    schedule 25.12.2012
comment
Отличная интуиция. Единственная разница в том, что атрибут высоты встроенных элементов не может быть установлен? - person user2316667; 19.06.2014
comment
@ user2316667 и ширина - person Oscar Calderon; 06.01.2016
comment
@ user2316667 и @OscarCalderon: также для встроенных элементов не важны вертикальные поля и отступы, и следующий элемент будет помещен в ту же строку (без разрыва строки после него). элементы блока, такие как p, div, получают линию всей ширины (принудительный разрыв строки), но учитывают ширину / высоту и все горизонтальные / вертикальные отступы / поля. Элементы встроенного блока имеют то же поведение, что и блок, но без полного разрыва строки (другие элементы могут быть размещены рядом с ними) - person S.Serpooshan; 04.01.2017
comment
padding-top и padding-right также влияют на эффект отображения встроенного элемента, вызывая некоторый беспорядок. - person tomwang1013; 09.08.2017
comment
Значит ли это, что мы всегда должны использовать свойства встроенного блока и управлять CSS? - person manuman94; 23.11.2017
comment
@ manuman94 Нет, это не значит. Существуют варианты использования для всех типов дисплеев. - person splattne; 23.11.2017
comment
Спасибо за ваш ответ. Просто кажется, что вы можете делать все, что хотите, с inline-block, но не с inline. - person manuman94; 23.11.2017
comment
Если вы используете inline, зачем вам также давать height (или width, я полагаю) этому элементу? Или вы просто сделаете это, если позже захотите сменить раскладку? (Я изучаю HTML / CSS, поэтому могу упустить какую-то более важную идею / точку об этом) - person BruceWayne; 01.02.2018
comment
@BruceWayne Я сделал это просто, чтобы объяснить, что происходит, когда вы используете эти свойства в сочетании с различными параметрами отображения. Вывод таков: inline игнорирует ширину и высоту, так что это одно из основных различий между inline и inline-block. - person splattne; 01.02.2018
comment
Кроме того, я думаю, что display:inline по умолчанию добавляет немного отступов, и display:inline-block точно соответствует содержанию - person Viraj; 29.01.2020
comment
display: inline, который используется по умолчанию для тега span. Это означает, что даже если вы не объявляете это явно, диапазон будет отображаться, как в первом визуале. - person U.Savas; 10.05.2020

display: inline; - это режим отображения для использования в предложении. Например, если у вас есть абзац и вы хотите выделить одно слово:

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

Элемент <em> по умолчанию имеет display: inline;, потому что этот тег всегда используется в предложении. Элемент <p> по умолчанию имеет display: block;, потому что это не предложение и не предложение, это блок предложений.

Элемент с display: inline; не может иметь height, width или вертикаль margin. Элемент с display: block; может иметь width, height и margin.
Если вы хотите добавить height к элементу <em>, вам необходимо установить для этого элемента значение display: inline-block;. Теперь вы можете добавить height к элементу и любому другому стилю блока (block часть inline-block), но это будет помещено в предложение (inline часть inline-block).

person Wouter J    schedule 23.01.2012
comment
Отличный ответ! tl; dr - если вы хотите изменить размер inline элементов, вы можете использовать inline-block в качестве типа отображения. - person errorprone; 01.08.2013
comment
Небольшая поправка: встроенные элементы могут иметь горизонтальное поле (справа, слева), но нет вертикального поля (сверху, снизу) - person whyleee; 07.02.2014
comment
Хороший ответ, потому что вы упомянули о том, что мы можем / не можем делать при выборе одного из значений display. - person ha9u63ar; 17.08.2015

Одна вещь, не упомянутая в ответах, - это встроенный элемент может разрываться между строками, в то время как встроенный блок не может (и, очевидно, блокировать)! Таким образом, встроенные элементы могут быть полезны для стилизации предложений текста и блоков внутри них, но, поскольку они не могут быть дополнены, вы можете вместо этого использовать line-height.

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

введите описание изображения здесь

person Ali    schedule 12.07.2017

Все ответы выше содержат важную информацию по исходному вопросу. Однако есть обобщение, которое кажется неверным.

Можно установить ширину и высоту по крайней мере для одного встроенного элемента (который я могу придумать) - _ 1_ element.

Оба приняли ответы здесь и на этом дубликате заявите, что это невозможно, но это не похоже на действующее общее правило.

Пример:

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

img имеет display: inline, но его width и height были успешно установлены.

person alexandros84    schedule 14.07.2017
comment
На самом деле img-tag имеет display-inline в качестве отображаемого значения по умолчанию. Вот почему можно установить ширину и высоту. - person Alex; 15.08.2017
comment
img - это встроенный элемент - ›developer.mozilla.org/en- US / docs / Web / HTML / Inline_elements ... То есть вы в основном говорите примерно то же самое, что и я, и голосуете против ?? - person alexandros84; 16.08.2017
comment
Нет я не. img-теги - это заменяемые элементы, что в основном означает, что контент заменяется, поэтому он ведет себя как элемент встроенного блока. И да, фактическое свойство по умолчанию (вычисленное браузером свойство встроено). Но единственная причина этого заключается в том, что встроенный блок не был введен до CSS2, и это встроенный элемент, который ведет себя как элемент встроенного блока, потому что он заменяется его содержимым. то есть вы не устанавливаете высоту / ширину для элемента, вы устанавливаете его для его содержимого - Wierd, да. Я знаю. drafts.csswg.org/css2/conform.html#replaced-element - person Alex; 17.08.2017
comment
То, что вы говорите, действительно интересно. Дайте мне немного времени на изучение и повторное редактирование и, возможно, вместо этого верните голоса против и за ...! В конце концов, я уже честно чувствую, что это обсуждение способствует полноте всей дискуссии. - person alexandros84; 17.08.2017

ответ splattne, вероятно, охватывает большую часть всего, поэтому я не буду повторять одно и то же, но: inline и inline-block ведут себя по-разному с direction CSS свойство.

В следующем фрагменте вы видите, что one two (по порядку) отображается, как и в макетах LTR. Я подозреваю, что браузер здесь автоматически определил английскую часть как текст LTR и отобразил ее слева направо.

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

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

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

Однако, если я продолжу и установлю display в inline-block, браузер, похоже, будет соблюдать свойство direction и отображать элементы справа налево по порядку, так что отображается two one.

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

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

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

Я не знаю, есть ли в этом какие-то другие причуды, я обнаружил об этом только эмпирически в Chrome.

person OverCoder    schedule 09.12.2019

Блок - Элемент take complete width.All properties height , width, margin , padding work

Встроенный элемент take height and width according to the content. Height , width , margin bottom and margin top do not work .Padding and left and right margin work. Example span and anchor.

Встроенный блок - 1. Element don't take complete width, that is why it has *inline* in its name. All properties including height , width, margin top and margin bottom work on it. Which also work in block level element.That's why it has *block* in its name.

person Ritik Kamboj    schedule 30.12.2020