【发布时间】:2015-03-02 02:22:25
【问题描述】:
根据MDN,button 是一个内联元素。
但是,按钮元素有default styling 和display: inline-block(参见this question)
button, textarea,
input, select { display: inline-block }
到目前为止一切顺利。
但是:
如果我现在用display:inline 设置按钮 - 宽度仍然适用!!
DEMO
button,
div {
width: 200px;
border: 1px solid red;
display: inline;
}
<button>button</button>
<div>div</div>
现在,根据spec:width 不适用于内联元素(不可替换)
适用于:除非替换内联元素外的所有元素、表格行、 和行组
既然如此:
为什么宽度仍然适用于内联 button 元素?
【问题讨论】:
-
奇怪的是,
display: block可以应用在同一个按钮上 -
按钮的显示属性可能为
inline-block -
@ThePragmatick 见this fiddle - 你看到了吗?我用
display:inline覆盖了默认的display:inline-block,宽度仍然适用。 -
@web-tiki - 不,它们没有被替换。被替换的元素是一个"whose content is outside the scope of the CSS formatting model" 按钮不是这种情况。它们的内容完全是 CSS 样式的,并且它们的基线(内容的底线框)泄漏与内联块跨度相同。
-
很确定这只是“表单元素在规范之外具有特殊渲染”之外无法完全解释的事情之一。如果
display: inline真的内联了一个按钮渲染,我认为它不再是一个按钮了。虽然它可能不是一个完全替换的元素(如前所述,它的内容可以通过 CSS 设置样式),但我怀疑即使你强制它使用display: inline,它仍然会生成一个原子内联框。原子内联在第 10 节中被归类为内联替换元素,因此宽度和高度适用于任何其他内联替换元素。