【问题标题】:IE9: Issues with anchor tag sizing and li hoverIE9:锚标签大小和悬停问题
【发布时间】:2012-05-11 03:43:54
【问题描述】:

我正在尝试创建一个导航栏 - 使用常用的东西。它在 Firefox 和 Chrome 中按预期工作,但在 IE9 中没有。显然有两个问题:

  1. 顶层的锚标记未填充包含的 li。一世 如您所见,已使用 display:block, height: 100% 和 width:100% 在代码中。
  2. 顶级项目的悬停不会带出 较低级别的项目。悬停改变字体和背景 不过。

关于这两个主题的文章和论坛帖子有很多 - 我希望我已经理解并实施了所讨论的解决方案。但也许我错过了一些简单的东西。

css 文件:dropdown-menu.css

#navigation-ul {

padding: 0;

margin: 0;

list-style: none;

height: 35px; /* this height must match the #navigation-ul li.top height */ 

position: relative;

z-index: 200;

font-family: Arial,Helvetica,sans-serif;

}



#navigation-ul li.top {

display: block;

float: left;

height: 35px;

width: 150px;



/* This was the original size

height: 30px;

width: 100px;

*/



background-color: #E1E1E3;

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFF",

    endColorstr="#C4C4C4" ); /* for IE */

background: -webkit-gradient(linear, left top, left bottom, from(#FFFFFF),

    to(#C4C4C4) ); /* for webkit browsers */

background: -moz-linear-gradient(top, #FFFFFF, #C4C4C4);

/* for firefox 3.6+ */

border-right: 4px groove #D1D1D1;

}



#navigation-ul li a.top_link {

display: block;

float: left;

height: 100%;

width: 100%; 

line-height : 33px;

color: #003570;

text-decoration: none;

font-size: 14px;

font-weight: bold;

padding: 0;

cursor: pointer;

text-align: center;

line-height: 33px;

}



#navigation-ul li a.top_link span {

color: #003570;

font-size: 14px;

float: left;

display: block;

padding: 0;

height: 100%;

width: 100%;

}



#navigation-ul li a.top_link span.down {

color: #003570;

font-size: 14px;

float: left;

display: block;

padding: 0;

height: 100%;

width: 100%;

}



#navigation-ul li:hover a.top_link {

height: 100%;

color: #FF0000;

text-decoration: underline;

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#C4C4C4",

    endColorstr="#FFFFFF" ); /* for IE */

background: -webkit-gradient(linear, left top, left bottom, from(#C4C4C4),

    to(#FFFFFF) ); /* for webkit browsers */

background: -moz-linear-gradient(top, #C4C4C4, #FFFFFF);

/* for firefox 3.6+ */

}



#navigation-ul li:hover a.top_link span {

height: 150%;

color: #FF0000;

text-decoration: underline;

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#C4C4C4",

    endColorstr="#FFFFFF" ); /* for IE */

background: -webkit-gradient(linear, left top, left bottom, from(#C4C4C4),

    to(#FFFFFF) ); /* for webkit browsers */

background: -moz-linear-gradient(top, #C4C4C4, #FFFFFF);

/* for firefox 3.6+ */

}



#navigation-ul li:hover a.top_link span.down {

height: 150%;

color: #FF0000;

text-decoration: underline;

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#C4C4C4",

    endColorstr="#FFFFFF" ); /* for IE */

background: -webkit-gradient(linear, left top, left bottom, from(#C4C4C4),

    to(#FFFFFF) ); /* for webkit browsers */

background: -moz-linear-gradient(top, #C4C4C4, #FFFFFF);

/* for firefox 3.6+ */

}











/* Default list styling */

#navigation-ul li:hover {

position: relative;

z-index: 200;

}



#navigation-ul li:hover ul.sub {

left: 0px;

top: 50px; /* (top level li height is YYpx) + (xx% of that (= 0.xx*YY px) height increase on hover) */

padding: 0;

white-space: nowrap;

width: 200px;

height: auto;

z-index: 300;

}



#navigation-ul li:hover ul.sub li {

display: block;

height: 30px;

border-bottom: 1px solid #FF0000;



background-color: #E1E1E3; 

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#C4C4C4",

    endColorstr="#FFFFFF" ); /* for IE */

background: -webkit-gradient(linear, left top, left bottom, from(#C4C4C4),

    to(#FFFFFF) ); /* for webkit browsers */

background: -moz-linear-gradient(top, #C4C4C4, #FFFFFF);



position: relative;

float: left;

width: 200px;

font-weight: normal;

}



#navigation-ul li:hover ul.sub li a {

display: block;

font-size: 12px;

height: 100%;

width: 100%;

line-height: 18px;

text-indent: 5px;

color: #003570;

text-decoration: none;

}



#navigation-ul li ul.sub li a.fly {

/* background: #bbd37e url(arrow.gif) 80px 6px no-repeat; */



}



#navigation-ul li:hover ul.sub li a:hover {

color: #FF0000;

font-weight: bold;

text-decoration: underline;

}



/* Hover effect over the 2nd level li*/

#navigation-ul li:hover ul.sub li a.fly:hover {

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFF",

    endColorstr="#C4C4C4" ); /* for IE */

background: -webkit-gradient(linear, left top, right top, from(#FFFFFF),

    to(#C4C4C4) ); /* for webkit browsers */

background: -moz-linear-gradient(left, #FFFFFF, #C4C4C4);



color: #FF000;

font-weight: bold;

width: 105%;

border-bottom: 1px solid #FF0000;

text-decoration: underline;

}



#navigation-ul li:hover li:hover ul,#navigation-ul li:hover li:hover li:hover ul,#navigation-ul li:hover li:hover li:hover li:hover ul,#navigation-ul li:hover li:hover li:hover li:hover li:hover ul

{

left: 210px; /* (higher level li width is 200px) + 5% (=10px) increase during hover */

top: 0px;

background: #C4C4C4;

padding: 0px;

margin-bottom: 1px;

white-space: nowrap;

/* width: 150px; */

z-index: 400;

height: auto;

}



#navigation-ul ul,#navigation-ul li:hover ul ul,#navigation-ul li:hover li:hover ul ul,#navigation-ul li:hover li:hover li:hover ul ul,#navigation-ul li:hover li:hover li:hover li:hover ul ul

{

position: absolute;

left: -9999px;

top: -9999px;

width: 0;

height: 0;

margin: 0;

padding: 0;

list-style: none;

}



/* Hover effect over the 2nd level li - going from 2nd level to 3rd level*/

#navigation-ul li:hover li:hover a.fly,#navigation-ul li:hover li:hover li:hover a.fly,#navigation-ul li:hover li:hover li:hover li:hover a.fly,#navigation-ul li:hover li:hover li:hover li:hover li:hover a.fly

{

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFF",

    endColorstr="#C4C4C4" ); /* for IE */

background: -webkit-gradient(linear, left top, right top, from(#FFFFFF),

    to(#C4C4C4) ); /* for webkit browsers */

background: -moz-linear-gradient(left, #FFFFFF, #C4C4C4);



color: #FF000;

font-weight: bold;

width: 105%;

border-bottom: 1px solid #FF0000;

text-decoration: underline;

}



#navigation-ul li:hover li:hover li a.fly,#navigation-ul li:hover li:hover li:hover li a.fly,#navigation-ul li:hover li:hover li:hover li:hover li a.fly

{

background: #bbd37e url(arrow.gif) 80px 6px no-repeat;

color: #000;

border-color: #bbd37e;

}

javascript 文件:dropdown-menu.js

SampleHover = function() {



var cssRule;



var newSelector;



for (var i = 0; i < document.styleSheets.length; i++) {



    for (var j = 0; j < document.styleSheets[i].rules.length ; j++) {



        cssRule = document.styleSheets[i].rules[j];



        if (cssRule.selectorText.indexOf("li:hover") != -1) {



            newSelector = cssRule.selectorText.replace(/li:hover/gi, "li.hover");

            document.styleSheets[i].addRule(newSelector , cssRule.style.cssText);

        }

    }

}



var liElements = document.getElementById("navigation-ul").getElementsByTagName("li");



for ( var i = 0; i < liElements.length; i++ ) {



    liElements[i].onmouseover = function() {



        this.className = this.className + " hover";

    };



    liElements[i].onmouseout = function() {



        this.className = this.className.replace(new RegExp(" hover\\b"), "");

    };

}

};



if (window.attachEvent) {



window.attachEvent("onload", SampleHover); 

}

html文件:sample.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">


<head>

<title>Sample</title>
<meta name="description" content=""></meta>
<meta name="keywords" content=""></meta>
<meta name="robots" content="index, follow"></meta>



<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>

<link rel="stylesheet" href="sample.css"
    type="text/css" title="Sample Style" media="screen, print"></link>
<link rel="stylesheet" href="dropdown-menu.css"
    type="text/css" />

<script type="text/javascript" src="dropdown-menu.js"></script>

</head>




<body style="align: CENTER;">

<div id=main style="width: 960px; margin: 0 auto;">

    <div id=header>

<div id="navigation-div" style="padding-bottom: 5px; margin-bottom: 5px;">

<!--  <span class="preload1"></span> <span class="preload2"></span> -->

<ul id="navigation-ul"
    style="display:inline-block; border: 1px solid #D1D1D1; margin-left: 0px; border-radius: 5px;">
    <li class="top" style="border-radius: 5px 0 0 5px;"><a
        class="top_link" href="/index">Home</a></li>


    <li class="top"><a id="Solutions" class="top_link down"
        href="/solutions"><span class="down">Solutions</span></a>
        <ul class="sub">

            <li><a class="fly" href="/solutions/business">Business
                    Solutions</a>
                <ul>
                    <li><a href="/solutions/business/investment-decision">Investment
                            Decisions</a></li>
                    <li><a href="/solutions/business/product-mgmt">Product
                            Management</a></li>
                </ul></li>
            <li><a class="fly" href="/solutions/software">Software
                    Solutions</a></li>

            <li><a class="fly" href="/solutions/engineering">Engineering
                    Solutions</a></li>
        </ul></li>


    <li class="top" ><a
        id="Industries" class="top_link" href="/industries"><span
            class="down">Industries</span></a></li>

    <li class="top" ><a
        id="KnowledgeBase" class="top_link" href="/knowledgebase"><span
            class="down">KnowledgeBase</span></a></li>

    <li class="top" style="border: none; width: 342px; border-radius: 0 5px 5px 0;"></li>

</ul>

</div>
</div>
</body>
</html>

如果您将这三个文件保存在同一目录中,您应该能够重现我所看到的内容。感谢您的帮助。

普拉杰什

【问题讨论】:

  • Stackoverflow 摇滚!当我访问我的问题时,我会在右侧获得所有相关线程。我检查了这个:link。它讨论了使用 ms-filter 而不是仅使用 filter 来完成渐变背景。它已经解决了这两个问题,但事实证明那里隐藏着第三个问题。悬停时,我希望顶部链接的高度变为 150%,然后子菜单项开始。 IE 在正确的 z-index 处启动子菜单,但不会增加顶部菜单项的高度。
  • 我刚刚注意到,渐变实际上随着添加 ms- 前缀而消失了!

标签: html css navigation internet-explorer-9 drop-down-menu


【解决方案1】:

这篇文章的最后一行Adding gradient to element breaks CSS functionality in IE 成功了!以下是一些值得注意的观察结果,供将来可能面临类似问题的人参考。

  1. 当然,IE滤镜渐变和ul搭配得不太好 或 li - 表示如果将梯度应用于 li,则 li 会得到 渐变,但它的所有子项都被隐藏(或没有出现在 将鼠标悬停在顶层 li)。
  2. 但是,如果将过滤器应用于 li 内部的元素(例如 li 内部的 div), 然后渐变和下拉都起作用。
  3. 在我的情况下,我希望我的顶级 li 在悬停时增加高度并具有 sub-ul 顶部开始低于顶部 li 结束的位置。由于没有过滤器 最初工作时,李并没有充满任何背景 因此,顶级 li 和 sub-ul 之间存在差距。一世 应该遵循拥有默认公寓的最佳做法 背景,以防过滤器不起作用。当我这样做时 过滤器被注释掉,下拉菜单工作正常(没有间断 在顶层 li 和 sub-ul 之间)。
  4. 我最初遵循的建议并对Drop down menu doesn't work in IE9 感到高兴,结果证明这是一个没有解决方案的问题。在过滤器前面添加 ms- 或 -ms 或任何与此相关的东西基本上只是消除过滤器线。

【讨论】:

    【解决方案2】:

    &lt;head&gt;标签下添加这行代码

    <meta http-equiv="X-UA-Compatible" content="IE=9"/>
    

    像这样

    <html>
       <head>
           <meta http-equiv="X-UA-Compatible" content="IE=9"/>
            <!-- Your codes / styles / scripts -->
           </head>
           <body>
             <!-- your codes-->
           </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 2018-07-06
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多