【问题标题】:adjusting the length of border-bottom on a <li> element调整 <li> 元素上border-bottom的长度
【发布时间】:2023-03-22 04:20:01
【问题描述】:

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

我唯一一次设法在这件事上得到一个扩展的红线是当我使用这段代码时:

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

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

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

【问题讨论】:

    标签: html css list hover html-lists


    【解决方案1】:

    答案:

    根据您的功能执行此操作的最佳方法是使用绝对定位到将用作边框的 &lt;a&gt; 的子元素:

    HTML:

    <li class="nav1"><a href="http://www.google.com/">home<b/></a></li>
    

    请注意其中的新&lt;b/&gt;

    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;
    }
    

    通过相对定位&lt;a&gt; 元素,我可以定位一个子元素,我将其称为&lt;b&gt;(使用top: 100%)。然后通过在该元素上使用填充,我可以使其比父元素更宽并使用left: -20px 将其向左滑动。 (您可以更改附加宽度,但请确保在padding:left: 中设置相同的数字。

    最后,我通常将其显示设置为none,然后当父&lt;a&gt;收到悬停事件时,我使用此选择器将其显示设置为block

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

    JSFiddle


    其他想法:

    您可以在&lt;a&gt; 上使用侧边距来做到这一点:

    li a
    {
        padding: 0px 20px;
    }
    

    JSFiddle


    如果您只想扩展&lt;a&gt; onHover 的宽度,您可以使用li a:hover

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

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

    JSFiddle


    如果你想保持&lt;a&gt; 的宽度,你可以对整个&lt;li&gt; 执行此操作,并将边距底部设置为边框宽度的负值:

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

    JSFiddle


    注意:

    一方面,在你原来的小提琴中,你的顶部栏的选择器是

    li.nav1 a:hover {
    

    虽然你的底部栏的选择器是

    li.nav2:hover {
    

    所以您将填充添加到&lt;li&gt;s,而不是第二个导航中的&lt;a&gt;s。

    【讨论】:

    • 非常接近,但我认为这个问题在于它还扩展了链接区域
    • hmm 还是碰到了扩展链接区域的问题
    • 如果你看,链接区域仅限于文本。将鼠标悬停在 li 上时会显示边框,因为这就是我要它执行的操作,但链接本身只是文本。
    • ohhhh 第一次没有注意到,但即使链接区域仅限于文本,:hover 仍在文本区域之外激活。
    • @user3470947 我又添加了一个修订版。这是如果您只想在链接悬停时激活边框,但它可能会导致文本在悬停时移动。
    【解决方案2】:

    如果您希望 nav2 保持其高度但外观与第一个 nav 相同,那么您只需将“a”添加到:

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

    那么它会是:

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

    【讨论】:

      【解决方案3】:

      试试这个,添加填充

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

      【讨论】:

      • 非常有趣,绝对是我所见过的最接近我想要的方式。但是我确实注意到了一个小缺陷,当我将光标放在文本上并慢慢将其拖到左侧时,在我的光标离开文本后:悬停似乎仍然是功能
      • 好的,我现在已经用 a 标签包围了每个
      • 。检查这个 jsfiddle jsfiddle.net/q23XN/7
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签