1

我的水平菜单有这个 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;
}
4

6 回答 6

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;
}
于 2013-09-17T07:54:08.047 回答
1

这里有两点:

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

使用以下内容:

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 演示

于 2013-09-17T07:55:18.283 回答
1

我认为这是最简单的

nav {
    margin: 0 auto; 
    text-align: center;
    height:30px;    /* add height to your nav tag */
}
于 2013-09-17T07:59:33.350 回答
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/

于 2013-09-17T07:52:04.227 回答
0

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

nav ul li {
    float: left;
    margin: 0;
    padding: 0;
    height:30px;
}
于 2013-09-17T08:01:29.160 回答
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;
}
于 2013-09-17T08:24:00.653 回答