【发布时间】:2012-09-18 13:20:59
【问题描述】:
我有一个有趣的盒子模型/宽度/继承问题,我正在费解。基本上,这就是我所拥有的:
<table>
<tr>
<td>
<div><input type="text">So the td is at least this big</input></div>
<div>
<button>The Fish Molecular Genetics and Biotechnology Laboratory</button>
<button>Each button must be as wide as the widest one</button>
</div>
</td>
</tr>
<table>
在这个简化模型中,<td> 具有(并且必须具有)自动宽度,<button> 具有 100% 宽度,display:block; 以便所有按钮的宽度相同,<button> 也具有一些填充,并且几乎所有东西都有box-sizing:border-box;。
所以,当一个按钮被渲染时,它的框宽度被设置为它所包含的文本的宽度。但是哦,等等,它的盒子宽度是从边框到边框测量的,而且它有一个填充,所以文本实际上换到了下一行。由于上述简化模型中不明显的许多充分理由,它必须是边界框。并且 td 必须具有自动宽度,因为按钮会根据文本框中的内容实时更改。
【问题讨论】:
-
如果我给按钮设置 102% 的宽度,它可以工作,除了它们比它们应该具有相同宽度的东西宽 2%,并且它可能在小型设备上表现不一致或者如果在用户代理样式表中指定了更大的字体大小。
-
这样的? :jsfiddle.net/bw8XC
-
@Shmiddty:在某个时候,我会想在 td 上设置一个最大宽度,并像往常一样将非常长的包裹起来。将
white-space:nowrap替换为padding:1em以查看问题。 -
它们必须是按钮吗?您可以改用 div 或锚标记。
-
如果你使用锚标签,盒子大小将正常工作。按钮的样式一直很麻烦,因为浏览器不会放弃对它们的完全控制。
标签: html css forms button width