HTML5规范中默认为行内元素的是phrasing content类元素,如a、span、strong、em、img、input、label、button、code、br、abbr、b、cite、dfn、i、kbd、mark、q、samp、small、sub、sup、time、u、var等,其中img和input虽表现似inline-block,但语义属行内。
span、a、strong、em、img、input、label、button、code、br 是最常遇到的行内元素,但实际标准列表比这宽得多,且不同 HTML 版本和浏览器对“行内性”的解释有细微差别。
判断一个元素是否为行内元素,不能只看它在页面上有没有换行——比如 img 和 input 默认表现为 inline-block,视觉上可设宽高,但语义和初始显示类型仍属行内类别。W3C HTML5 规范明确定义了“phrasing content”(短语内容),它基本对应传统意义上的行内元素集合。常见成员包括:a、abbr、area(仅在 map 中)、b、br、button、cite、code、data、dfn、em、i、img、input、kbd、label、mark、q、samp、small、span、strong、sub、sup、time、u、var 等。
注意:br 和 hr 容易混淆——br 是行内元素,hr 是块级元素(同时也是空元素)。
因为它们的默认 display 值不是 inline,而是 inline-block 或 inline-table。例如:
立即学习“前端免费学习笔记(深入)”;
img 和 input 默认是 inline-block,所以 margin-top、height 都有效a、span、strong 默认是纯 inline,margin-top/bottom 无效,height 也无效(但 line-height 可影响行高)button 行为因浏览器而异,现代浏览器大多按 inline-block 处理别依赖“看起来像行内就当它是”,用开发者工具检查 computed style 中的 display 值才是准的。
HTML5 严格限制 phrasing content 的子元素类型。以下写法会触发验证警告或被浏览器静默修正:
a 标签里直接放 div:<a href="#"><div>非法</div></a>
span 里写 p 或 ul
strong 包裹整个段落(应改用 section + CSS 控制)合法替代方案:
div + role="link" 或重构为 button + JSsection、article 配合 aria-labelledby
span + 类名,而非硬塞块级标签空元素(void elements)不关心“块/行内”分类,但它们在布局中表现出的默认行为必须区分:
br:行内元素,作用就是换行,无尺寸,不可设宽高img:空元素 + 行内元素(表现上是 inline-block)input:空元素 + 行内元素(同上)hr:空元素 + 块级元素(注意:不是行内)meta、link、base:空元素,但只在 head 中有效,不出现在文档流中,不参与布局真正容易踩坑的是 img 和 input:它们既是空元素,又是行内元素,还默认带 inline-block 行为——三重身份叠加,导致对齐、垂直居中、margin 处理方式和纯 span 完全不同。