我有一个悬停的下拉菜单,在悬停边框后,我的下拉菜单与菜单重叠。试图添加填充,但它更糟糕。你怎么能调整下拉列表的位置,知道我没有悬停时有5px边框透明,在悬停时转换为底部5px边框实体?
#nav {
background-color: #e26a63;
}
#wrap {
padding-left: 60px;
height: 100px;
width: 100%;
margin: 0 auto;
display: table-cell;
vertical-align: bottom;
}
#nav ul {
list-style-type: none;
padding: 0;
margin: 0;
position: relative;
min-width: 200px;
}
#nav ul li {
display: inline-block;
border: 5px solid transparent;
}
#nav ul li:hover {
background-color: #cb5f59;
border-bottom: 5px solid #9e4a45;
}
#nav ul li a, visited {
color: white;
display: block;
padding: 15px;
text-decoration: none;
}
#nav ul li:hover ul {
display: block;
}
#nav ul ul {
display: none;
position: absolute;
background-color: #e26a63;
border-top: 0;
margin-left: -5px;
}
#nav ul ul li {
display: block;
}
#nav ul ul li a:hover {
color: white;
}

<div id="nav">
<div id="wrap">
<ul>
<li><a href="#">Home</a></li><li>
<a href="#">Study</a></li><li>
<a href="#">Games</a>
<ul>
<li><a href="#">Riddles</a></li><li>
<a href="#">Flip card game</a></li><li>
<a href="#">Spot the mistake</a></li><li>
<a href="#">Multiple choice</a></li>
</ul>
</li><li>
<a href="#">Read</a></li><li>
<a href="#">Contact</a></li><li>
<a href="#">About Us</a></li>
</ul>
</div>
</div>
&#13;
答案 0 :(得分:2)
简短回答是将margin-top: 5px;
添加到#nav ul ul
,其中5px
与底部边框宽度的值相同。
请注意,以下一组样式在悬停时输出一个梯形形状 1 底部边框。
#nav ul li { border: 5px solid transparent; }
#nav ul li:hover { border-bottom: 5px solid #9e4a45; }
将第一行中的border
更改为border-bottom
,然后输出一个真正的矩形形状。
我还重新组织了CSS表格布局,使表格自动居中(我想你想要这样,但如果不是这样就很容易改变)。并删除了下拉项目中的边框样式。
<强> Jsfiddle Example 强>
#nav {
background-color: #e26a63;
}
#wrap {
display: table;
height: 100px;
margin: 0 auto;
}
#nav ul {
padding: 0;
margin: 0;
display: table-cell;
vertical-align: bottom;
}
#nav ul li {
display: inline-block;
border-bottom: 5px solid transparent;
}
#nav ul li a {
display: block;
padding: 15px;
text-decoration: none;
color: white;
}
#nav ul ul {
display: none;
position: absolute;
background-color: #e26a63;
margin-top: 5px;
}
#nav ul ul li {
display: block;
min-width: 200px;
}
/* hover */
#nav ul li:hover {
background-color: #cb5f59;
border-bottom-color: #9e4a45;
}
#nav ul li:hover ul {
display: block;
}
#nav ul li:hover li {
border-bottom-width: 0;
}
<div id="nav">
<div id="wrap">
<ul>
<li><a href="#">Home</a></li><li>
<a href="#">Study</a></li><li>
<a href="#">Games</a>
<ul>
<li><a href="#">Riddles</a></li><li>
<a href="#">Flip card game</a></li><li>
<a href="#">Spot the mistake</a></li><li>
<a href="#">Multiple choice</a></li>
</ul>
</li><li>
<a href="#">Read</a></li><li>
<a href="#">Contact</a></li><li>
<a href="#">About Us</a></li>
</ul>
</div>
</div>
此外,您还可以使用:after
+ background
来获得相同的底部边框样式。
<强> Jsfiddle Example 强>
#nav {
background-color: #e26a63;
}
#wrap {
display: table;
height: 100px;
margin: 0 auto;
}
#nav ul {
padding: 0;
margin: 0;
display: table-cell;
vertical-align: bottom;
}
#nav ul li {
display: inline-block;
}
#nav ul li a {
display: block;
padding: 15px;
text-decoration: none;
color: white;
}
#nav ul li:after {
content: "";
display: block;
height: 5px;
}
#nav ul ul {
display: none;
position: absolute;
background-color: #e26a63;
margin-top: 5px;
}
#nav ul ul li {
display: block;
min-width: 200px;
}
/* hover */
#nav ul li:hover {
background-color: #cb5f59;
}
#nav ul li:hover:after {
background: #9e4a45;
}
#nav ul li:hover ul {
display: block;
}
#nav ul ul li:after {
height: 0;
}
<div id="nav">
<div id="wrap">
<ul>
<li><a href="#">Home</a></li><li>
<a href="#">Study</a></li><li>
<a href="#">Games</a>
<ul>
<li><a href="#">Riddles</a></li><li>
<a href="#">Flip card game</a></li><li>
<a href="#">Spot the mistake</a></li><li>
<a href="#">Multiple choice</a></li>
</ul>
</li><li>
<a href="#">Read</a></li><li>
<a href="#">Contact</a></li><li>
<a href="#">About Us</a></li>
</ul>
</div>
</div>
1 CSS的形状 - https://css-tricks.com/examples/ShapesOfCSS/
答案 1 :(得分:0)
由于您已将下拉列表集成到标题中,因此如果您只是将其显示,则可能会调整标题大小。
一个简单的解决方案是添加如下内容:
ul li ul{
position: absolute;
top: 58px;
}
通过使这个元素绝对,我们将它从标题代码“中断”。
注意:这可能不是完美的代码,但它可能会给你一个方向。
答案 2 :(得分:0)
你的ul是绝对定位的,所以它隐含在顶部:0px,
只需将其设置为5px即可补偿边框尺寸
#nav ul ul {
top: 5px; /* added */
}
#nav {
background-color: #e26a63;
}
#wrap {
padding-left: 60px;
height: 100px;
width: 100%;
margin: 0 auto;
display: table-cell;
vertical-align: bottom;
}
#nav ul {
list-style-type: none;
padding: 0;
margin: 0;
position: relative;
min-width: 200px;
}
#nav ul li {
display: inline-block;
border: 5px solid transparent;
}
#nav ul li:hover {
background-color: #cb5f59;
border-bottom: 5px solid #9e4a45;
}
#nav ul li a, visited {
color: white;
display: block;
padding: 15px;
text-decoration: none;
}
#nav ul li:hover ul {
display: block;
}
#nav ul ul {
display: none;
position: absolute;
background-color: #e26a63;
border-top: 0;
margin-left: -5px;
}
#nav ul ul li {
display: block;
}
#nav ul ul li a:hover {
color: white;
}
<div id="nav">
<div id="wrap">
<ul>
<li><a href="#">Home</a></li><li>
<a href="#">Study</a></li><li>
<a href="#">Games</a>
<ul>
<li><a href="#">Riddles</a></li><li>
<a href="#">Flip card game</a></li><li>
<a href="#">Spot the mistake</a></li><li>
<a href="#">Multiple choice</a></li>
</ul>
</li><li>
<a href="#">Read</a></li><li>
<a href="#">Contact</a></li><li>
<a href="#">About Us</a></li>
</ul>
</div>
</div>
答案 3 :(得分:0)
您可以将边框更改为框阴影,并且框阴影不会从框模型
中占据#nav ul li:hover {
background-color: #cb5f59;
box-shadow: 0 -2.2px 0 #9e4a45 inset,0 0 0 #9e4a45;
}