【发布时间】:2011-12-29 03:57:54
【问题描述】:
在 Internet Explorer(我已在所有 v6 - v9 中测试)中,当您将鼠标悬停在文本上时,子菜单上的边框最初不会出现。第二次悬停时将显示。它在 Firefox 和 Chrome 中运行良好 - 即它始终显示边框。我在my site 上放了一个示例页面。
IE(悬停时):
FF/Chrome(悬停时):
这里没有什么花哨的,一些 css,onmouseover/onmouseout Javascript 来设置 style.display = block/none。我遵循了answer 到a similar question 中的一些想法。
我已将其精简到最低限度以尝试找出问题,但仍然没有运气。
子菜单 ul 元素上设置了 display:none。似乎 IE 在设置了 display:block 之前不会费心绘制边框,并且在使用 Javascript 显示元素时最初不会绘制它。
<html>
<head>
<title></title>
<style type="text/css">
ul, li {padding:0; margin:0; border:0;}
ul#hover_menu_list,
ul#hover_menu_list ul {list-style-type:none;}
ul#hover_menu_list li {float:left;position:relative;display:inline;}
ul#hover_menu_list li ul {border:1px solid #000;display:none;position:absolute;left:0px;top:20px;width:170px;}
ul#hover_menu_list li ul li {display:block; clear:left; float:left;width:140px;}
</style>
</head>
<body>
<ul id="hover_menu_list" onmouseout="document.getElementById('menu1').style.display='none';" onmouseover="document.getElementById('menu1').style.display='block';">
<li>
Menu
<ul id="menu1">
<li>Submenu1</li>
<li>Submenu2</li>
</ul>
</li>
</ul>
</body>
</html>
更新:问题确实是文档类型问题。添加过渡或严格的文档类型可以解决问题。链接页面已通过修复更新。
【问题讨论】:
-
在我的测试中,它似乎在 IE6-IE9 上运行良好,请参阅此处的小提琴:jsfiddle.net/fordlover49/FpCEW 我建议检查您的文档类型以确保它是符合 w3c 的文档类型。
-
它在 jsfiddle 中确实有效——但我怀疑他们正在做一些事情来修复它。如果您查看 IE 中的示例页面 ianchanning.com/ie-border-bug,您应该会看到该错误。没有设置 DOCTYPE。
-
我认为 jsfiddle 在“修复”您的代码方面做得并不多。这就是重点......
-
确实是缺少的文档类型。但我也想知道你为什么使用 JS,而不仅仅是使用 :hover 伪类:jsfiddle.net/XCXhE
-
@ptriek 不能在触摸屏上工作...
标签: html css internet-explorer