Как ответили другие… div
- это «блочный элемент» (теперь переопределяется как Flow Content ), а span
- это «встроенный элемент» ( Phrasing Content ) , Да, вы можете изменить представление этих элементов по умолчанию, но есть разница между «потоком» и «блоком» и «выражением» и «встроенным».
Элемент, классифицированный как содержимое потока , может использоваться только в том случае, если ожидается содержание потока, а элемент, классифицируемый как содержание фразы , может использоваться, когда ожидается содержание фразы. Поскольку весь контент фразы является содержимым потока, элемент фразы также может использоваться везде, где ожидается содержание потока. Спецификации предоставляют более подробную информацию .
Все элементы фразы, такие как strong
и em
, могут только содержать другие элементы фразы: например, вы не можете поместить table
внутрь cite
. Большая часть содержимого потока, такого как div
и li
, может содержать все типы содержимого потока (а также контент фраз), но есть несколько исключений: p
, pre
и th
являются примерами нефразирующего содержимого потока («блочные элементы»), которые могут только содержать фразовое содержимое («встроенные элементы»). И, конечно, существуют обычные ограничения на элементы, такие как dl
и table
, которые могут содержать только определенные элементы.
Хотя и div
, и p
являются нефразирующим содержимым потока, div
может содержать другие дочерние элементы содержимого потока (включая дополнительные div
с и p
с). С другой стороны, p
может содержать только дочерние фразы. Это означает, что вы не можете поместить div
внутрь p
, даже если оба элемента не являются фразами потока.
Теперь вот кикер. Эти семантические спецификации не связаны с тем, как отображается элемент. Таким образом, если у вас есть div
внутри span
, вы получите ошибку проверки, даже если у вас есть span {display: block;}
и div {display: inline;}
в вашем CSS.