在IE6中打破浮动导航

时间:2011-06-18 07:32:34

标签: html css internet-explorer internet-explorer-6

我的网站导航在IE6以外的其他浏览器上正确呈现。

问题

而不是以这种方式出现的列表:主页|关于|服务,每个都出现在一个新的行上,例如:

Home
About
Services
Community Pages

<a>中的<li>标记会填满整个页面的宽度。

我没有给<li>一个固定的宽度,因为:导航项的长度是不同的,并且需要占用相对于它们长度的空格。

我的HTML

<div id="nav">
    <ul>
        <li class="top1space2"><a href="index.php" title="Go To Our Home Page" class="top1space3">Home</a></li>
        <li class="top1space2"><a href="#" title="More Jobs on Ngcareers">More Jobs</a>
            <ul>
            <?php $count=count($c_id);for ($i=0;$i<$count;$i++){ ?>
            <li><b><a href="category/<?php echo $c_slug[$i];?>" >&raquo; <?php echo $c_name[$i];?></a></b></li>
            <?php } ?>
            <li class="clearfloat">&nbsp;</li>
            </ul>
        </li>
        <li class="top1space2"><a href="graduatejobs.php">Graduate Jobs</a></li>
        <li class="top1space2"><a href="vacancy.php">Post A Job</a></li>
        <li class="top1space2"><a href="month.php" >Jobs This Month</a></li>
        <li class="top1space2"><a href="jobalert.php" >GSM Job Alert</a></li>
        <li class="top1space2"><a href="employers.php" >Employers</a></li>
        <li class="top1space2"><a href="submitcv.php"> Submit CV</a></li>
        <li class="top1space2"><a href="subscribe.php" >Subscribe</a></li>
        <li class="top1space2"><a href="advertise.php">Advertise</a></li>
        <li class="top1space2"><a href="/about/contact-us">Contact</a></li>
      </ul>
</div>

我的CSS:

#nav ul {
    padding: 0px;
    width: 1020px;
    margin-top: 0px;
    margin-right: auto;
    margin-bottom: 0px;
    margin-left: auto;
    list-style-type: none;
    font-family: Verdana, Geneva, sans-serif;
    font-size: 12px;
    height: 32px;
}
#nav ul li {
    float: left;
    display: block;
}
.top1space2 {
    background-color: #086DA1;
    background-image: url(../pics/slice1.jpg);
    background-repeat: repeat-x;
    display: block;
    height: 36px;
}
.top1space3 {
    color: #000;
    font-weight: bold;
    background-color: #F93;
    background-image: url(../pics/slice2.jpg);
    background-repeat: repeat-x;
}
#top1space3 {
    color: #FFF;
    font-weight: bold;
    background-color: #111;
    background-image: url(../pics/btnbg.jpg);
    background-repeat: repeat-x;
}
#nav ul .top1space2 a {
    color: #FFC;
    text-decoration: none;
    font-weight: bold;
    font-size: 12px;
    display: block;
    height: 36px;
    line-height: 36px;
    text-align: center;
    padding-right: 10px;
    padding-left: 10px;
    border-right-width: 1px;
    border-right-style: solid;
    border-right-color: #9CF;
}
#nav ul .top1space2 a:hover {
    color: #000;
    text-decoration: none;
    cursor: pointer;
    background-color: #F93;
    background-image: url(../pics/slice2.jpg);
    background-repeat: repeat-x;
}
#nav ul .top1space2:hover {
    cursor: pointer;
}

请问如何在IE6中修复此问题,而不给予元素固定的宽度?

2 个答案:

答案 0 :(得分:1)

肯定是IE漏洞。 IE6(以及我相信的IE7)将width:auto的浮动元素渲染为width:100%

您可以将此规则用于IE6 / 7以修复布局。

#nav ul li {
    float: left;
    display: block;
    width:0;
    white-space:nowrap;
}

并使用conditional comment仅应用于IE6 / 7或更多版本,只需使用IE6 / 7无法理解的选择器覆盖width:auto,例如:

#nav ul li {
    float: left;
    display: block;
    width:0;
    white-space:nowrap;
}
#nav ul > li {
    width:auto;
}

答案 1 :(得分:1)

使你的li元素内联(从任何元素中删除所有浮动)并从链接中删除display:block。我已经创建了一个jsfiddle来展示它是如何工作的。要记住的一件事是:通过删除所有浮动并只显示内联的所有内容,您将在列表中的链接元素之间找到间隙。有一种方法可以摆脱这种情况(我在jsfiddle中展示),但它需要从li元素之间删除任何空间,包括换行符。它会让你的标记变得有点混乱,但我想这是你关心的多少以及你对继续支持IE6的关注程度。

http://jsfiddle.net/WEmv9/4/

我还清理了很多css声明 - 那里有很多重复的规则和不必要的标记 - 显然这是你的选择,但它使得样式应用得更加清晰。

修改更新了jsfiddle以使“主页”链接成为正确的颜色