标签的语义都是见仁见智,只要不是特别反人类,细微的理解差异,是可以接受的。像锚点标记(链接)<a>
(anchor) 以前通常被当作内联元素,现代网页越来越多地采用了块状可点击区域的设计,HTML 5 里就允许 <a>
作为块级元素来用。
一般来说,HTML 标签分为内联元素(a span strong em sup sub code)和块级元素,对于包含问题,只有一条颠扑不破的真理——内敛元素里面不能放块级元素。
p
是一个块级元素,所以它放内联元素 input
(除了 form
fieldset
legend
以外,表单相关的元素都是内联的)是完全没有问题的。
大部分块级元素都能包含其他块级元素,但一些用于排版的,有明确语义的块级元素(h1 ~ h6
address
dt
dd
等),一般不再放置其他块级元素(因为真的需要那么复杂的排版时,还不如自己造一个 div
,并且通过 className
来让语义更明确)。
其中 p
尤为特殊,基本上完全容不得其他块级元素。因为作为一个“段落”,通常是连续性文字的集合,如果放了块级元素进去,明显就已经把文字拆成两段了。事实上,在几乎所有浏览器里,
<p><div></div></p>
都会被处理成
<p></p><div></div>
在 HTML 4, HTML 5 里, p
和 li
都可以自闭合,也就是说,不一定要加上结束标签。所以浏览器的这种处理,也是有道理的。