【问题标题】:CSS left: -50% causing IE7 to ignore widthCSS left: -50% 导致 IE7 忽略宽度
【发布时间】:2011-07-20 17:08:43
【问题描述】:

fully working example is availiable here on jsFiddle。我强烈鼓励你看这里,因为 CSS 有点大,我不想把它粘贴在这里(让我的问题难以阅读)。

我的网站上有一个水平居中的标签条,其想法是 UL/LI 项目在页面上居中,我有一个解决方案,直到最近(看起来)它似乎适用于所有浏览器配置。

这个html其实很简单:

<div id="tabContainer">
    <ul>
        <li style="width: 190px;"><span><a href="#">Tab One with more text</a></span></li>
        <li style="width: 190px;"><span><a href="#">Tab Two</a></span></li>
        <li style="width: 190px;"><span><a href="#">Tab Three is wide</a></span></li>
    </ul>
</div>
  • 每个&lt;li&gt; 都是一个制表符,左圆角制表符的内容有左填充。
  • 每个&lt;span&gt; 都为右圆角标签内容提供了正确的填充。
  • 最后,&lt;a&gt; 通常会填满剩余部分,从而形成较大的点击目标。
  • 每个项目都使用width: 190px 手动设置样式,以保持它们的宽度一致(为了获得漂亮的视觉外观,这是由站点代码自定义的,因此它位于styleclass 中。

CSS:

  • CSS 的工作原理很简单,&lt;ul&gt; 向右移动 50%,&lt;li&gt; 向左移动 50% (left: -50%;) 以始终将它们放在主容器的中心。李>
  • 使用负边距和 z-index 的选项卡有一点重叠,因此角部分纵横交错(在背景图像中完成,这在此处并不重要)

问题

IE7 决定它不会监听显式的style="width: 190px",即使添加了!important。然而,这似乎只发生在left: -50% 出现在&lt;li&gt; 项目上时。如果删除了该样式,则选项卡会向右移动(位置错误,但宽度正确)。

对我来说,这似乎无关,因为left: -50% 不会导致项目发生碰撞并迫使它们达到最小宽度。

此设置工作正常,并在以下位置进行了测试:

  • IE8
  • IE9
  • FF3.6
  • FF5
  • Chrome 稳定版 (v13)*
  • Chrome 测试版 (v14)*
  • Safari 3

*截至 2011 年 7 月 18 日


那么,这可能是什么原因造成的?为什么会这样?我该如何解决?我已经尝试了各种调整,但无法让它服从宽度......


图片以便您可以并排查看问题:

Problem http://img715.imageshack.us/img715/3686/ie7centertabsproblem.png

【问题讨论】:

  • 您正在运行真正的 IE7 安装吗?即使在 IE6 中,它至少对我来说在 IETester 上工作得很好。不过它看起来确实有点过度设计,如果你愿意放弃当前的代码,我相信三十点会钉它:)
  • 您是否特别喜欢这种将lis 居中的方法?我的意思是,我可以用不同的技术来集中它们吗?
  • @Wesley:中心选项卡不比左/右选项卡窄吗?我在 IE9(Win7) 中使用 IE7 文档/浏览器模式,并且在 WinXP 上的 IETester IE7 中也确认了该问题。让我发布问题的图片。
  • @thirtydot:我愿意接受建议,关键是标签重叠并且 z-index 已调整为看起来正确。
  • 感谢您发布代码。我遇到了left: -0%; 为我解决的类似问题。直到看到您的代码,我才想到要给 left 添加负值。

标签: html css layout internet-explorer-7


【解决方案1】:

我建议使用style="min-width:190px; max-width:190px;" 而不是style="width:190px;"。它在 IE7 文档/浏览器模式下工作正常。

【讨论】:

    【解决方案2】:

    IE 7 谁还在用它?!?

    您可以尝试使用 em 而不是像素,这里有一个很好的 em 转换器: http://pxtoem.com/

    【讨论】:

    • -1 不幸的是,我们仍然有 10% 的流量在 IE7 上,我们不能忽略它们。
    • 好的,为此点赞。但是为什么要使用宽度呢?为你制作了一个小提琴,希望对你有帮助:jsfiddle.net/msgSw/1
    • 宽度在 DOM 中,因为 DOM 是由可配置控件生成的。
    • 我还需要注意的是,javascript 对尺寸的请求是一种非性能操作。它通常会触发重排来计算元素的宽度/高度,您示例中的jQuery magic 显然会增加页面加载时间,特别是如果有更多类似的并且它们被调用很多。一般来说,如果可能的话,我会避免使用 javascript 来“修复” CSS 缺少的东西,尤其是当它只是一个浏览器被破坏时。附带说明一下,如果调整浏览器窗口大小,您的 jQuery 将不会更新。
    猜你喜欢
    • 2021-11-28
    • 2013-03-24
    • 2011-03-19
    • 2010-09-07
    • 1970-01-01
    • 2019-07-29
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多