为什么 display:block;width:auto;
对我的文本输入不像一个 div 和填充容器宽度?
在我的印象中,div 只是一个具有自动宽度的块元素。在下面的代码中,div 和输入不应该具有相同的尺寸吗?
如何获得填充宽度的输入?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中的一个 bug。Internet Explorer 8和 Safari 4将最大宽度限制在100% + 填充 + 边框,这是规范要求的。Internet Explorer 终于做对了一件事。
天啊,太棒了!在处理这个问题的过程中,并且在著名大师 爱德华兹院长和 Erik Arvidsson的大力帮助下,我成功地将三个独立的解决方案组合在一起,在任意填充和边框的元素上创建一个真正的跨浏览器100% 宽度的解决方案。请看下面的答案。这个解决方案不需要任何额外的 HTML 标记,只需要一个类(或选择器)和遗留 Internet Explorer 的可选行为。