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