答案:
根据您的功能执行此操作的最佳方法是使用绝对定位到将用作边框的 <a> 的子元素:
HTML:
<li class="nav1"><a href="http://www.google.com/">home<b/></a></li>
请注意其中的新<b/>。
CSS:
li.nav1 a, li.nav2 a
{
position: relative;
}
li.nav1 a b, li.nav2 a b
{
position: absolute;
top: 100%;
left: -20px;
display: none;
width: 100%;
height: 3px;
background: red;
padding: 0px 20px;
}
li.nav1 a:hover b, li.nav2 a:hover b{
display: block;
}
通过相对定位<a> 元素,我可以定位一个子元素,我将其称为<b>(使用top: 100%)。然后通过在该元素上使用填充,我可以使其比父元素更宽并使用left: -20px 将其向左滑动。 (您可以更改附加宽度,但请确保在padding: 和left: 中设置相同的数字。
最后,我通常将其显示设置为none,然后当父<a>收到悬停事件时,我使用此选择器将其显示设置为block:
li.nav1 a:hover b, li.nav2 a:hover b
其他想法:
您可以在<a> 上使用侧边距来做到这一点:
li a
{
padding: 0px 20px;
}
如果您只想扩展<a> onHover 的宽度,您可以使用li a:hover:
li a:hover
{
padding: 0px 20px;
}
但这会使链接变宽,可能会影响链接的位置。
如果你想保持<a> 的宽度,你可以对整个<li> 执行此操作,并将边距底部设置为边框宽度的负值:
li.nav1:hover, li.nav2:hover {
border-bottom:3px solid red;
margin-bottom: -3px;
}
注意:
一方面,在你原来的小提琴中,你的顶部栏的选择器是
li.nav1 a:hover {
虽然你的底部栏的选择器是
li.nav2:hover {
所以您将填充添加到<li>s,而不是第二个导航中的<a>s。