4

我今天在创建一个通用按钮类来设置从 div 到输入的所有内容时遇到了一些奇怪的错误。似乎大多数浏览器在输入 [type=submit] 时使用不同的框模型。

大多数现代浏览器(ie9+、ff、chrome 等)对所有输入都使用内容框框模型,如果我没记错的话,提交除外,它使用边框框。

基本上,如果我将高度设置为 100,填充设置为 10,则除提交之外的所有输入的高度将为 120,而提交的高度为 100。

使用 box-sizing 及其浏览器前缀可以轻松解决此问题。但我的问题是 IE6/7 做同样的事情但不支持 box-sizing ...

所以现在我所有的输入都显示全高,除了提交被切成两半。除了条件注释之外,我还有哪些选项可以强制内容框或其他修复?

4

1 回答 1

1

IE 的旧“破”盒子模型本质上是content-box. 在 IE>5 中,文档需要处于 quirks 模式,IE 才能使用它。您可以通过执行以下操作之一来触发怪癖模式(根据维基百科):

  • 当文件类型声明不存在或不完整时;
  • 当遇到 HTML 3 或更早的文档时
  • 当使用 HTML 4.0 过渡或框架集文档类型声明且系统标识符 (URI) 不存在时
  • 当 SGML 注释或其他无法识别的内容出现在文档类型声明之前
  • 当文档中的任何地方出现错误时

当然,这可能会带来更多的麻烦,因为它会使所有东西都使用 IE 框模型 ( content-box)。我可以看到这很有用,但是如果您的布局不是以这种方式构建的,那么返回并更改它可能需要做太多的工作。

我做了一些搜索,没有找到任何可以在某些元素上启用旧盒子模型的东西,而不是其他元素。

在过去处理过 IE6/7 之后,如果不使用条件注释或 css hack 之类的东西,真的没有办法绕过它的错误行为。与其他浏览器相比,它的渲染引擎从根本上被破坏了。试图让它在没有任何黑客攻击的情况下表现出来只是让人头疼。

我能想到的唯一另一件事是用 span 或 div 围绕每个表单元素,并使用它们来帮助调整表单元素的大小。这也很糟糕,但它的优点是至少可以在每个浏览器中工作。

于 2012-10-31T20:00:55.240 回答