Что такое «незаменяемые встроенные блоки»? - PullRequest
0 голосов
/ 09 мая 2018

Фон

Каскадные таблицы стилей Уровень 2 Редакция 1 (CSS 2.1) Спецификация , глава 9 Модель визуального форматирования , указывает, что:

Не все блочные контейнеры-контейнеры являются блоками уровня блока: незаменяемые встроенные блоки и незаменяемые ячейки таблицы являются блочными контейнерами, но не блоками уровня блока.

Вопрос

Незаменяемые встроенные блоки нигде в главе 9/10 не упоминаются. Может ли кто-нибудь помочь мне понять, какие элементы представляют эти блоки?

Дополнительные примечания

  • Они не относятся к незаменяемым встроенным элементам , которые являются наиболее распространенным видом встроенных элементов
  • Они также не относятся к элементам с display:inline-block, поскольку они представляют собой боксы встроенного уровня

EDIT

  • Из приведенной выше цитаты можно сделать вывод, что незаменяемые встроенные блоки являются блок-контейнерами .
  • Мы также знаем, что:

    Элементы встроенного уровня - это те элементы исходного документа, которые не формировать новые блоки контента; контент распределяется по строкам (например, выделенные фрагменты текста в абзаце, встроенные изображения, так далее.). Следующие значения свойства display отображают элемент inline-level: 'inline', 'inline-table' и 'inline-block'. Элементы встроенного уровня генерируют блоки встроенного уровня, которые представляют собой блоки которые участвуют во встроенном контексте форматирования.

  • Если незаменяемые встроенные блоки являются блок-контейнерами , а элементы с display:inline-block являются встроенными блоками (т.е. не блоки уровня блока и, следовательно, не блоки контейнера блока ), тогда логично выпадает, что незаменяемые встроенные блоки не могут быть результатом элементов с display:inline-block.

  • Другими словами, встроенные блоки не происходят из элементов с display:inline-block.

Другие примечания (я)

  • Я доволен концепцией заменен против незамещен , просто пытаюсь понять, что спецификация подразумевает встроенным блоком в первой цитате выше , когда единственные определения относятся к inline-block <- Обратите внимание на дефис. </li>

1 Ответ

0 голосов
/ 09 мая 2018

Термины встроенный блок и встроенный блок относятся к одной и той же вещи (блок контейнера встроенного уровня, блок контейнера) и полностью взаимозаменяемы. Элемент с display: inline-block действительно генерирует блок встроенного блока или блок встроенного блока (с дефисом или без него). Дефис есть только там, поэтому CSS может определить inline-block как одно значение ключевого слова.

Форма без дефисов встречается несколько раз в разделе 9 CSS2, но нигде в этой спецификации не встречается (однажды она появляется в css-display-3, в предложении, почти дословно снятом с CSS2, так что не в счет). Я не знаю, почему это так, но не предполагается, что не-дефисная форма относится к чему-то отличному от дефис-формы. Фактически, сам раздел 9 использует обе формы взаимозаменяемо - см. раздел 9.2.4 для примера используемой формы переноса:

встроенный блок
Это значение заставляет элемент генерировать контейнерный блок встроенного уровня. Внутренняя часть встроенного блока отформатирована как блок блока, а сам элемент отформатирован как атомарный блок встроенного уровня.

Хотя я понимаю, почему читатели могут запутаться. К счастью, остальная часть спецификации CSS2 и большинство спецификаций CSS3 (которые я изучал в любом случае) согласуются в использовании дефисной формы.

Кроме того, наличие или отсутствие слова «box» не меняет значение «inline-block». Как правило, спецификация опускает это, потому что это излишне многословно; все в структуре форматирования, которая не является текстовым прогоном, в любом случае является коробкой, и «inline-block» как существительное довольно красиво скатывается с языка.


Если незаменяемые встроенные блоки являются блок-контейнерами , а элементы с display:inline-block являются встроенными блоками (т.е. не блок одноуровневые блоки и, следовательно, не блокировать контейнеры контейнера ), тогда логично выпадает, что незаменяемые встроенные блоки не могут быть результатом элементов с display:inline-block.

Я думаю, здесь есть какое-то недопонимание. Приведенная выше цитата перечисляет встроенные блоки как пример блока контейнера блока, который не является блок-уровнем; цель этой цитаты состоит в том, чтобы донести до читателя, что не все контейнеры блоков являются блоками уровня блока, и не все блоки уровня блока являются контейнерами блоков - действительно, что эти две концепции различны и не должны смешиваться. Из моего ответа на этот связанный вопрос :

Единственная разница между блочным блоком и встроенным блоком состоит в том, что первый - на уровне блока, а второй - на уровне строки. Отсюда отображаются значения display: block и display: inline-block соответственно. Поскольку оба являются блочными контейнерами, нет разницы в том, как их содержимое отформатировано.

Поэтому, опять же, display: inline-block действительно заставляет элемент генерировать встроенный блок (кроме случаев, когда другие части макета заставляют его отформатировать как уровень блока, или blockified , что вообще отдельная тема). Будет ли этот встроенный блок заменен или не заменен, зависит от элемента; например, элемент <img> с display: inline-block генерирует замещенный встроенный блок, тогда как элемент <div> с display: inline-block генерирует незаменяемый встроенный блок.

Замененный inline-блок не может фактически сформировать контейнерный блок, потому что его содержимое отображается вне правил форматирования CSS. Вот почему в спецификации различаются незаменяемые inline-блоки как контейнерные блоки. Там действительно не больше, чем это.

...