【发布时间】:2010-11-05 01:44:12
【问题描述】:
为什么我的文本输入中的 display:block;width:auto; 不像 div 并填充容器宽度?
我的印象是 div 只是一个具有自动宽度的块元素。在下面的代码中,div 和 input 的尺寸不应该相同吗?
如何获取输入以填充宽度? 100% 宽度不起作用,因为输入具有填充和边框(导致最终宽度为 1 像素 + 5 像素 + 100% + 5 像素 + 1 像素)。固定宽度不是一个选项,我正在寻找更灵活的东西。
我更喜欢直接回答解决方法。这似乎是一个 CSS 怪癖,理解它以后可能会有用。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>width:auto</title>
<style>
div, input {
border: 1px solid red;
height: 5px;
padding: 5px;
}
input, form {
display: block;
width: auto;
}
</style>
</head>
<body>
<div></div>
<form>
<input type="text" name="foo" />
</form>
</body>
</html>
我应该指出我已经可以使用包装器解决方法来做到这一点。除了与页面语义和 CSS 选择器关系搞砸之外,我还试图了解问题的性质以及是否可以通过改变 INPUT 本身的性质来克服它。
好吧,这真是太奇怪了!我发现解决方案是简单地将max-width:100% 添加到带有width:100%;padding:5px; 的输入中。然而,这引发了更多问题(我将在一个单独的问题中提出),但似乎 width 使用了普通的 CSS 框模型,而 max-width 使用了 Internet Explorer 边框框模型。多么奇怪。
好的,最后一个似乎是 Firefox 3 中的错误。Internet Explorer 8 和 Safari 4 将最大宽度限制为 100% + padding + border,这是规范所说的。终于,Internet Explorer 做对了。
天哪,这太棒了!在玩这个的过程中,在可敬的大师Dean Edwards 和Erik Arvidsson 的大力帮助下,我设法拼凑了三个独立的解决方案,以在具有任意填充和边框的元素上实现真正的跨浏览器 100% 宽度。请参阅下面的答案。此解决方案不需要任何额外的 HTML 标记,只需要一个类(或选择器)和旧版 Internet Explorer 的可选行为。
【问题讨论】:
-
@SleepyCod 这不是完全重复的。这个问题涉及
input元素显然不遵守 CSS 2.1 规范的问题,而您链接到的问题询问如何防止溢出框,顺便说一下,溢出框完全在 CSS 2.1 规范的范围内发生。问题及其解决方案都重叠,但称它们完全重复是完全错误的。