html - 调整 <li> 元素上 border-bottom 的长度

标签 html css list hover html-lists

我一直在摆弄这个导航栏,除了这个小问题外,我几乎把所有事情都搞定了。简单地说,每当我将鼠标悬停在导航栏中的一个词上时,它下面就会出现一条小红线。我遇到的唯一问题是我想稍微延长那条红线。

我唯一一次在这件事上得到一条延长的红线是当我使用这段代码时:

li.nav2:hover {
  border-bottom:3px solid red;
  padding-bottom:1px;
}

现在的问题是它有点破坏导航栏的流程。

这是我的 jsfiddle:http://jsfiddle.net/q23XN/1/

最佳答案

回答:

根据您的功能执行此操作的最佳方法是使用绝对定位到 <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通常,然后当 parent <a>收到悬停事件,我将其显示设置为 block使用这个选择器:

li.nav1 a:hover b, li.nav2 a:hover b

JSFiddle


其他想法:

您可以在 <a> 上使用侧边距来做到这一点:

li a
{
    padding: 0px 20px;
}

JSFiddle


如果您只想扩展 <a> onHover 的宽度,你可以用 li a:hover 来做到这一点:

li a:hover
{
    padding: 0px 20px;
}

但这会使链接变宽,并可能影响链接的位置。

JSFiddle


如果你想维护<a>宽度,您可以对整个 <li> 执行此操作并将边距底部设置为边框宽度的负值:

li.nav1:hover, li.nav2:hover {
    border-bottom:3px solid red;
    margin-bottom: -3px;
}

JSFiddle


注意事项:

一方面,在您原来的 fiddle 中,您的顶部栏的选择器是

li.nav1 a:hover {

当你的底部栏的选择器是

li.nav2:hover {

因此,您将填充添加到 <li> s,而不是 <a> s 在第二个导航中。

关于html - 调整 <li> 元素上 border-bottom 的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22798807/

相关文章:

javascript - 如何使用 forEach 删除列表中的元素?

python - 有没有更快的方法来检查一个数字是否在一个区间内?

html - 如何设置与祖父的相对位置!元素?

相当于 scanf() 的 Javascript

css - Chrome 中 css 上方的间隙

javascript - 当它们进入视口(viewport)时加载 div、图像和/或脚本

html - 表格格式问题

Python:为什么列表元素在使用程序后仍然没有消失?

html - SVG Mask 不适用于插画师生成的 SVG(所有浏览器)

php - preg_replace ('/[\\s]/' ,'&nbsp;' $mysqlData) 导致文本从 div 溢出