水平菜单移动下方的页面内容

时间:2013-09-17 07:49:17

标签: html css

我的水平菜单有这个css:

当您将鼠标悬停在链接上并显示子菜单时,它会显示子菜单,但下面的页面内容会略微向下移动。

任何想法?

在这里摆弄:http://jsfiddle.net/XwDTt/1/

nav {
    margin: 0 auto; 
    text-align: center;
}

nav ul ul {
    display: none;
}

nav ul li:hover > ul {
    display: block;
}

nav ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: inline-block;
    vertical-align: top;
}

nav ul li {
    float: left;
    margin: 0;
    padding: 0;
}

nav ul li:hover a {
    color: #000000;
    margin-bottom:5px;
    border-top: 1px solid #000000;
    border-bottom: 1px solid #000000;
}

nav ul li a {
    display: block; 
    padding: 5px 15px;
    color: #000000;
    text-decoration: none;
    background-color: #eeeeee;
}       

nav ul ul {
    border-radius: 0px;
    padding: 0;
    position: absolute;
}

nav ul ul li {
    float: none; 
    position: relative;
}

nav ul ul li a {
    color: #000000;
}

nav ul ul li a:hover {
    color: #666666;
}

nav ul ul ul {
    position: absolute;
    top:0;
}

6 个答案:

答案 0 :(得分:1)

改变这个:

nav ul li:hover a {
    color: #000000;
    margin-bottom:5px;
    border-top: 1px solid #000000;
    border-bottom: 1px solid #000000;
 }

进入这个:

nav ul li:hover a {
    color: #000000;
    margin-bottom:5px;
    border-top: 1px solid #000000;
    border-bottom: 1px solid #000000;
    position:relative;
    top:-1px;
}

答案 1 :(得分:1)

这里有两点:

  1. 向元素添加border时,通常会增加元素的高度。默认情况下,您可以使用transparent边框。
  2. 您可以在子菜单列表项上使用该属性,而不是在锚标记上设置margin属性,这些项位于absolute并且不会影响文档正常流程。< / LI>

    使用以下内容:

    nav ul li:hover a {
        color: #000000;
        border-top: 1px solid #000000;
        border-bottom: 1px solid #000000;
    }
    
    nav ul li:hover li {
        margin-top: 5px; /* <-- add margin to sub-menu items */
    }
    
    nav ul li a {
        display: block; 
        padding: 5px 15px;
        color: #000000;
        text-decoration: none;
        background-color: #eeeeee;
    
        border-top: 1px solid transparent;    /* <-- Set a transparent border */
        border-bottom: 1px solid transparent; /* <-- Set a transparent border */    
    }
    

    <强> JSFiddle Demo

答案 2 :(得分:1)

我认为这是最简单的

nav {
    margin: 0 auto; 
    text-align: center;
    height:30px;    /* add height to your nav tag */
}

答案 3 :(得分:0)

您正在悬停时添加边框。默认情况下你应该有透明边框...... 还有保证金。

nav ul li a {
   display: block; 
   margin-bottom:5px;
   padding: 5px 15px;
   color: #000000;
   text-decoration: none;    
   background-color: #eeeeee;
   border-top: 1px solid #eeeeee;
   border-bottom: 1px solid #eeeeee;
}       

http://jsfiddle.net/XwDTt/3/

答案 4 :(得分:0)

或者您可以设置li元素的高度:

nav ul li {
    float: left;
    margin: 0;
    padding: 0;
    height:30px;
}

答案 5 :(得分:0)

解决方案1:

nav ul li:hover a {
    color: #000000;
    /*margin-bottom:5px comment these
    border-top: 1px solid #000000;
    border-bottom: 1px solid #000000;*/
}

解决方案2:

nav ul li:hover a {
    color: #000000;
    /*margin-bottom:5px comment this line only */
    border-top: 1px solid #000000;
    border-bottom: 1px solid #000000;;
}

并添加以下行:

nav ul li a {
        margin-bottom:5px;
        border-top:1px solid #fff;
        border-bottom:1px solid #fff;
}