Почему <form> является блочным элементом?
Цель элемента <form>
, IMO, является семантической, а не презентационной - элемент должен определить область с элементами, которые могут быть отправлены на сервер.
Почему же тогда браузер (и, я полагаю, в спецификации) задает display: block в таблице стилей пользовательского агента? Конечно, если вы хотите, чтобы форма была блоком, вы можете просто обернуть ее в элемент div?
Обычно я просто помещаю форму {display: inline} в свой css, чтобы переопределить это. Тем не менее, мне интересно, была ли хорошая причина для отображения <form>
в виде блока по умолчанию или если он был сохранен таким образом по причинам, связанным с наследием.
Ответы
Ответ 1
Я предполагаю, что это связано с тем, что <form>
будет очень часто содержать другие элементы уровня блока (div для структуры, или, хотя я сжимаюсь при мысли, таблицы, которые помогут упорядочить поля формы и т.д.). И наличие встроенного элемента, который содержит элементы блока, хотя это вполне возможно, семантически сомнительно.
Я полностью согласен с вашей точкой в отношении <form>
, не являющейся презентационной, но в то же время для меня имеет смысл, что это будет элемент блока, учитывая, как обычно используется этот тег.
Ответ 2
HTML 3.2 определяет элемент <FORM>
как элемент уровня блока. Текущее поведение браузеров в отношении этого элемента, безусловно, для обратной совместимости.
Ответ 3
A <form>
означает семантический и презентационный. Он носит смысловой характер, но также запрещен встраивать одну форму в другую, подразумевая, что он предназначен для определенного контейнера для всего его содержимого (элементы управления формой и другое содержимое блока/встроенного контента). Кроме того, встроенные узлы не могут содержать узлы уровня блока, по крайней мере, не по спецификации, которые по умолчанию ограничивали бы тег <form>
.