这不是解决所有奇怪的 IE z-index 问题的最终解决方案,但在某些情况下它肯定可以提供帮助。它所做的是循环遍历您声明的每个元素,并在其上应用不断递减的 z-index 值。IE 会反过来处理这个问题,而这会将其设置正确。它不是最终解决方案的原因是,有时您不需要 z-index 按照 DOM 顺序排列,有时作用域也会发挥作用。
尽管如此,在 IE 7 中查看演示(感谢 Dan Nicholls)以查看顶部的损坏版本和底部的修复版本。
jQuery 版本
$(function() {
var zIndexNumber = 1000;
// Put your target element(s) in the selector below!
$("div").each(function() {
$(this).css('zIndex', zIndexNumber);
zIndexNumber -= 10;
});
});
MooTools 版本
if(Browser.Engine.trident){
var zIndexNumber = 1000;
// Put your target element(s) in the selector below!
$$('div').each(function(el,i){
el.setStyle('z-index',zIndexNumber);
zIndexNumber -= 10;
});
};
MooTools 版本有一个“如果 IE”语句,如果您将其放在条件注释中,则可能不需要它。您可以使用 jQuery 做同样的事情,尽管条件注释被认为更稳定。您只需要针对 IE7 及以下版本。
此外,扫描演示中的 CSS 以了解 jQuery 提供给您的结果的一些润色。
好的,会派上用场的。
感谢发布此信息。好东西。
z-index 的不错修复,尽管在 IE6 中“隐藏”附加内容时出现了一些错误。它不会消失,并且会覆盖正常内容,直到页面刷新。
这有效,但我只是想知道这是否会导致任何性能问题,因为 jQuery 每次加载页面时都必须获取所有 div 并为其分配 z-index?
PrototypeJS 方法
var zIndexNumber = 1000;
$$("div").each(function(e) {
e.setStyle({ zIndex: zIndexNumber });
zIndexNumber -= 10;
});
干得好。感谢分享。
太棒了.. Mootools 脚本是我唯一的救星!!
感谢此修复(是的,大写是有意的 :-))。
有没有运气解决不同 DOM 顺序的此问题?需要一个页脚图形粘贴在侧边栏底部,但保持在小部件后面并与其他内容重叠。在我支持的所有地方都能正常工作,但 IE7 除外
请帮忙……我在 IE7 中遇到了问题,下拉菜单隐藏在以下链接中的 css 作品集后面。
http://www.netscribes.com/k12solutions/portfolio.html
我需要立即更正它。请帮忙。
谢谢兄弟,你拯救了我的一天。
非常感谢!这正是我急需的修复。
大家好,
我需要一个关于 IE 上 z-index 问题的想法。这是我的 html 标记
锚点(关闭按钮)部分位于其父元素之外,但它在父元素的边框处被截断。有没有办法使锚点看起来正确?
谢谢!
它似乎有效。谢谢!
你是天才!非常感谢!现在我可以放松一下,看电影了。
我尝试了很长时间只使用 CSS 来使项目在 IE7 中的列表中绝对定位的项目彼此显示,但放弃了。尝试了 Chris 的 jQuery 代码,但它没有解决问题,因此我编写了下面的快速函数,该函数将当前项目的 z-index 设置为高值,同时降低其余同级元素的值。尽管它运行良好,但这只是一个示例,绝对可以改进……
var z_index_max = 1000,
z_index_default = 100;
$(“ul li”).bind(“mouseover”, function(){
$(this).css(“z-index”,z_index_max).siblings(“li”).css(“z-index”,z_index_default);
}).bind(“mouseout”, function(){
$(this).css(“z-index”,z_index_default).siblings(“li”).css(“z-index”,z_index_default);
});
这非常有效!
我的一些内容消失了,但我将变量 zIndexNumber 提高到 3000,现在一切正常。
这段小代码成功地防止了我今天因为尝试使用 jQuery 表单验证插件对 IE7 进行故障排除而发疯。我正在从事一个非常重要的项目,并且我使用 jQuery 生成的错误消息工具提示出现在标签下方的错误非常糟糕。
谢谢!
问题:Chris 的 jquery 代码片段放在 WordPress 主题的哪里?在 functions.php 中?
抱歉,这里的新手..
感谢技巧。这个 hack-idea 拯救了我
刚刚注意到文本区域上的背景过渡,喜欢它!
正是我需要的!谢谢。
这对我来说非常有效,我让菜单在滑块后面。
使用了以下代码
var zIndexNumber = 1000;
$(“li,ul,img,div”).each(function() {
$(this).css(‘zIndex’, zIndexNumber);
zIndexNumber -= 10;
});
尝试了 jQuery 版本,并且有效。谢谢 :D
谢谢,尝试了我能想到的每一个 css 技巧,然后 BAM——在 DOM 中直接使用 jquery 修复了 IE。
太棒了,拯救了我的一天 :)
谢谢您节省了我的时间,我认为最好将 IE6 声明为病毒,并允许防病毒程序对其进行升级或删除。
大家好。此问题无需 javascript 修复。有一个非常简单的 CSS 解决方案来修复 IE7 z-index 渲染问题。请查看以下过于简化的下拉菜单设置。
<header>
<dropdownmenu>
</dropdownmenu>
</header>
<content>
等等
</content>
问题是
<header>
内的菜单最终位于<content>
块下方。故障来自下拉菜单项的相对和/或绝对定位,以及使用这些定位的任何其他内容。IE7 将这些解释为超出 DOM 的流程,并忽略后续项目的 z-index。
解决方法非常简单,几乎到了荒谬的地步。将 `position: relative` 应用于 `<header>` 块,并在此设置你的 `z-index`,而不是在菜单上。然后在 `<content>` 上设置 `position: relative`,IE7 就会理解这两个块之间的关系顺序,因此能够正确理解和渲染 `z-index`。希望这能帮助将来偶然访问此处的其他人!
嘿,Mark,
你知道吗,现在这里已经是凌晨2:32,多亏了你的提示,我现在可以去睡觉了。
难以置信。
太棒了!感谢发布此解决方案 ;-)
Mark,
你说得对,在 IE7 中修复此问题不需要 JavaScript。事实上,使用 JS 会影响性能,因为 IE7 中的 JavaScript 引擎非常慢。
你只需要为 IE7 设置 CSS 相对定位并在父节点及其子节点上使用递减的 `z-index` 值。
不要使用 JavaScript!为 IE7 修正你的 CSS。
还有一个问题:在 IE8/9 中,使用渐变过滤器会导致额外的 `z-index` 问题。
例如,将一个带有固定位置的渐变导航栏放置在页面顶部。如果在此导航栏中放置一个下拉菜单,则下拉菜单的显示会被截断,就像存在 `z-index` 问题一样。删除 IE 渐变的过滤器,问题就解决了。