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