【问题标题】:vertically align multi-row text within li tag in IE quirks mode在 IE 怪癖模式下垂直对齐 li 标签内的多行文本
【发布时间】:2012-10-07 19:24:00
【问题描述】:

我正在尝试找到一个最跨浏览器的解决方案来垂直对齐可以跨越 li 标签内多行的文本。这是一个示例!

我阅读了很多关于该主题的内容,并根据几个线程组装了可以在以下小提琴http://jsfiddle.net/xRC3y/15/ 中找到的代码。这适用于大多数浏览器,但是在 IE 上,当通过开发者工具以 quirks 模式推送时,它呈现如下:

我正在努力寻找一个也适用于 IE 怪癖模式的解决方案,感谢您提供任何帮助

【问题讨论】:

  • 为什么需要它在怪癖模式下工作?
  • 其实你的问题挺好的。我面临着一个谜,我已将我的代码(否则是 Web 应用程序的一部分)最小化为我在小提琴中发布的内容,但是,当我运行应用程序时,对齐错误不会显示在小提琴中.我不知道为什么会这样。此外,该错误仅在标准模式下出现在 ie8 和 ie9 上。在小提琴中,该错误仅在怪癖模式下存在,我不知道这是为什么,可能是由于 normalize.css 或我缺少的东西,但我认为如果有人知道如何为怪癖模式修复它,修复肯定会在页面上工作

标签: css internet-explorer vertical-alignment quirks-mode


【解决方案1】:

我最近遇到了类似的问题。这个问题可能有一个更优雅的解决方案,但我解决问题的方法是使用一些 Javascript/jQuery 有条件地设置元素的样式。不幸的是,这需要您更改 HTML 标记,将类 .vCenterIE7(或其他)添加到要居中的元素,并将另一个类 .vCenterIE7Rel 添加到要居中的元素。

另外,我知道这不是检测用户是否在使用 IE7 的完全可靠的方法(modernizr 更可靠),但是拜托,如果您仍在使用 IE7,您可能没有在操作您的用户代理设置。

脚本:

function vCenterIE7() {
if (navigator.userAgent.toLowerCase().indexOf('msie 7') > -1) {
    var els = $('.vCenterIE7');
    for (var i = 0; i < els.length; i++) {
            var c = els.eq(i);
            var b = c.closest('.vCenterIE7Rel');
            var mtop = b.height() / 2;
            mtop -= c.height() / 2;
            c.css('margin-top',mtop);
    }
}
}

【讨论】:

  • OP想要检测quirks mode,不一定是IE7。 Quirks 模式是 IE5 及更早版本中的默认渲染模式,但可能与任何版本的 IE 相关(我认为是 IE9)。
  • 在一个附带问题上,我很好奇您为什么不使用条件注释来定位 IE7 和纯 CSS 来解决您的问题?这似乎更可靠/更高效,并且不需要 JavaScript。
  • 我使用 display:table-cell 技巧将元素居中。但是,IE7 不支持许多元素的这个 CSS 值,所以我遇到了问题。实际上,我不知道有任何其他干净的垂直居中解决方案(我试图避免 CSS 表达式),所以我编写了自己的脚本来做到这一点。至于 OP,这种方法仍然可以垂直居中你的元素,但是如果你没有在页面上运行 jQuery,那么对于应该更简单的东西来说,这是一笔巨大的投资。
  • 谢谢 Nathan,我已经投票赞成你的答案,因为它有效,但我仍然更愿意接受仅 CSS 的解决方案。此外,如果您的解决方案针对的是 IE7 而不是 quirks 模式,那么您实际上可以尝试小提琴中的内容,因为它适用于 IE7(标准模式)。奇怪的是,我的问题从 IE8 和 IE9 开始
猜你喜欢
  • 2012-01-15
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
相关资源
最近更新 更多