为什么<form>是块级元素?

20
< p > <form> 元素的目的是语义化而非表现性 - 其作用是定义一个带有元素的区域,可以将其发送到服务器。

那么,为什么浏览器(以及我认为在规范中)会在用户代理样式表中指定 display:block 呢?如果您想使表单成为块,则可以将其包装在 div 元素中,不是吗?

通常,我只需在我的css中添加 form { display: inline } 来覆盖这一点。但是,我想知道是否有充分的理由让 <form> 默认显示为块,或者它只是出于传统原因而保持这种方式。


2
如果你想让表单成为一个块,你可以将其包装在 div 元素中。甚至比包装更好的方法是使用 display CSS 属性。 - Richard JP Le Guen
是的。我的意思更多的是,不影响格式应该是默认设置,而不是相反的情况。 - Jords
3个回答

18
我猜这是因为一个 <form> 元素通常会包含其他块级元素(如用于结构的 div 或用于组织表单字段的表格等)。虽然内联元素可以包含块级元素,但这在语义上是有问题的。
我完全同意你提到的关于 <form> 不是表现层的观点,但同时考虑到该标记的通常使用方式,把它作为块级元素也是有道理的。

真是太棒了,你比我快了10秒钟 :D 很好的答案。 - Jon Marnock
也许真正的解决方案是在除了<form>标签之外的浏览器中添加另一种生成POST请求的机制。如果我想添加一个执行POST请求的按钮,那么需要引入一个会影响格式的元素来实现这个功能就不太合理,除非我覆盖它。 - Jords
@Jords - 如果你真的想这样做,你已经可以做到了。例如,使用jQuery.post()。当然,你必须自己收集所有想要的参数,所以它比使用<form>不太方便,但这个选项确实存在。 - aroth
我本意是想提一下,有时候我可以/会使用JavaScript来做到这一点,但似乎这并不应该成为必须的要求。 - Jords

3

HTML 3.2<FORM>元素定义为块级元素。目前浏览器对该元素的行为肯定是为了向后兼容。


那是否意味着较新的规格有不同的观点呢? - Jords
不,完全不是这样。我是说今天的浏览器将<FORM>视为块级元素的原因是因为HTML 3.2这样做了(在CSS提供其他选项之前)。 - Greg Hewgill

1
一个<form>标签既具有语义性又具有表现性。它天生就是语义化的,但也禁止在其中嵌套另一个表单,这意味着它应该是所有内容(表单控件和其他块级/内联内容)的明确容器。此外,内联节点不能包含块级节点,至少不符合规范,这将默认限制<form>标签的使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接