【问题标题】:CSS dropdown nav causing html content to moveCSS下拉导航导致html内容移动
【发布时间】:2012-10-24 02:57:29
【问题描述】:

我关于 SO 的第一个问题,希望它是从头开始的,对于精通 css 艺术的人来说应该是一个简单的解决方案......

我遇到的问题是我的 css 驱动导航的下拉部分导致其下方的内容向右移动。我发现发布了类似的问题,但我已经尝试了所有提供的解决方案,但似乎没有任何效果.....

我设法得到的最接近的方法是将position:absolute; 添加到#nav li:hover ul 标记中,这确实会阻止内容四处移动,但会产生一个新问题,下拉子菜单仅在鼠标悬停时可见顶级菜单项,并试图将鼠标向下移动子菜单会导致它消失......我发现同样令人沮丧的另一个问题......

导航的 html 是标准的嵌套列表:

<div id="navigation_panel" class="orange_grad">
    <!-- navigation-->
      <ul id="nav">
            <li><a href="#">about us</a>
                    <ul>
                            <li class="orange_grad"><a href="1">staff</a></li>
                            <li class="orange_grad"><a href="2">venue</a></li>
                            <li class="orange_grad"><a href="2">history</a></li>
                            <li class="orange_grad"><a href="2">community theatre</a></li>
                            <li class="orange_grad"><a href="2">rep theatre</a></li>
                            <li class="orange_grad"><a href="2">theatre school</a></li>
                            <li class="orange_grad"><a href="2">official partners</a></li>
                    </ul>
            </li>
            <li><a href="#">join us</a>
                    <ul>
                            <li class="orange_grad"><a href="1">friends membership</a></li>
                            <li class="orange_grad"><a href="2">wine club</a></li>
                    </ul>
            </li>
            <li><a href="#">hire</a>
                    <ul>
                            <li class="orange_grad"><a href="1">business</a></li>
                            <li class="orange_grad"><a href="2">rehersal space</a></li>
                            <li class="orange_grad"><a href="2">community groups</a></li>
                            <li class="orange_grad"><a href="2">theatre productions</a></li>
                            <li class="orange_grad"><a href="2">memorable occasions</a></li>
                    </ul>
            </li>
            <li><a href="#">contact</a>
                    <ul>
                            <li class="orange_grad"><a href="1">list of contacts</a></li>
                            <li class="orange_grad"><a href="2">contact us now</a></li>
                    </ul>
            </li>
            <li class=" last"><a href="#">support</a>
                    <ul>
                            <li class="orange_grad last"><a href="1">donations + requests</a></li>
                            <li class="orange_grad last"><a href="2">past sponsors</a></li>
                            <li class="orange_grad last"><a href="2">thanks</a></li>
                            <li class="orange_grad last"><a href="2">volunteers</a></li>
                            <li class="orange_grad last"><a href="2">set up a community event</a></li>
                    </ul>
            </li>
    </ul>

以及附带的css如下:

#navigation_panel {border-radius: 18px 18px 0 0/ 18px 18px 0 0; width: 900px; height:50px;}

#nav { margin:0; padding: 0; list-style:none;}
#nav a{ color:black; font-size: 20px; text-decoration:none; min-height:50px; width:95px;}
#nav li {text-align:center; float:left; padding:14px 8px ; cursor:pointer; width:95px;}
#nav li.last{width:99px;}

#nav li ul {margin-top:14px; margin-left:-8px; padding:0; display: none; list-style:none;}
#nav li ul li{ border:1px solid black; width:95px; padding:6px 8px;}
#nav li ul li a{/*font-family:arial;*/ font-size:14px;}

#nav li:hover{ text-decoration:underline; }
#nav li:hover ul{display: block;}
#nav li:hover ul li {clear: left;}

我试图通过正常途径(在 google、SO 等上搜索)以及尝试各种定位配置来寻找解决方案,但我似乎无法解决这个问题...... 感谢您提前提供的任何帮助,这个问题整天让我发疯!

【问题讨论】:

    标签: html css navigation hover positioning


    【解决方案1】:

    更新

    终于有机会重新审视这个了。您只需将以下内容添加到#nav li ul

    position: absolute;
    z-index: 100;
    

    在 IE8/9、FF 和 Chrome 中工作,尽管子菜单的位置在 IE7 中是关闭的,无论我是否更改。为了解决这个问题,我建议通过您喜欢的任何方法使用 IE7 特定的 CSS。

    【讨论】:

    • 干得好,这确实解决了内容移动的问题,但是这导致了一个新的问题,即当鼠标从悬停在顶级菜单项上移动到子菜单时,子菜单菜单消失了......问题中提到了
    • 噢!我错过了。我会再看一下,看看我是否能找到问题所在。您是否在特定浏览器中遇到问题?我已经更新了 CSS,在 Chrome、FF 和 IE7-9 中我可以将鼠标悬停在子菜单上:jsfiddle.net/H3tRM/1
    • im testing in google chrome,你提供的 jsfiddle 实际上似乎工作正常,但是当我将它应用到我的整个站点时,子菜单消失的问题似乎仍然存在..跨度>
    • 感谢您的回答 - 为我节省了大量时间!
    【解决方案2】:

    您可以尝试使用z-index 做一些事情。 Z-index 正在“制作”图层,所以也许您可以将子导航设置为 z-index: 2。

    但是,在制作下拉菜单等情况下,我建议使用 jQuery。我曾经尝试用纯 CSS 和 HTML 制作下拉菜单,但很快发现 jQuery 更好。

    使用 jQuery 的下拉菜单示例:jsfiddle

    jQuery:

    $(".subnav").hide();
    $(".navigation li a, .subnav").hover(function(){
        $(this).parent().find(".subnav").stop().fadeIn(400);
    }, function(){
        $(this).parent().find(".subnav").stop().fadeOut(400);
    });​
    

    HTML:

    <div>
        <ul class="navigation">
            <li><a>Example 01</a></li>
            <li><a>Example 02</a>
                <ul class="subnav">
                    <li><a>Lorem</a></li>
                    <li><a>Impsum</a></li>
                    <li><a>Dolor</a></li>
                    <li><a>Sit</a></li>
                    <li><a>Amet</a></li>
                </ul>    
            </li>
            <li><a>Example 03</a></li>
            <li><a>Example 04</a></li>
        </ul>                                        
    </div>​
    

    CSS:

    .navigation li{
        display: inline;
        font-family: Arial, sans-serif;
        font-size: 12px;
        padding: 0 10px;
        position: relative;
    }
    .navigation li a:hover{
        color: #999;
    }
    .subnav li{
        display: list-item;
        padding: 5px 10px;
    }
    .subnav{
        border: 1px solid #000;
        width: 70px;
        position: absolute;
        z-index: 2;
        margin-left: 10px;
    }
    ​
    

    【讨论】:

    • 感谢您的建议,我今晚会尝试一下,让您知道我的进展情况
    • 无论如何,谢谢,但我会使用上面的纯 css 答案,因为此时我更容易实现,但如果我什至从头开始构建另一个下拉列表,我肯定会使用 jquery...
    猜你喜欢
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多