【问题标题】:Animating an underline for a navbar [duplicate]为导航栏设置下划线动画[重复]
【发布时间】:2020-04-18 20:59:25
【问题描述】:

我正在尝试为导航栏中的元素设置动画,以便在将鼠标悬停在上方时具有缓入淡出的下划线。但是,它不是只给选定的链接加下划线,而是给整个 ul 元素加下划线。

我该如何解决这个问题?

a {
  text-decoration: none;
  color: black;
}

.nav a::before {
  content: "";
  position: absolute;
  width: 100%;
  height: 2px;
  bottom: 0;
  left: 0;
  background-color: rgb(92, 149, 112);
  visibility: hidden;
  transform: scaleX(0);
  transition: all 0.3s ease-in-out 0s;
}

.nav a:hover::before {
  visibility: visible;
  transform: scaleX(1);
}

ul.nav {
  font-size: 11px;
  list-style: none;
  position: fixed;
  display: block;
  padding: 0;
  margin: 0;
  z-index: 100;
  top: 0.5em;
  right: 1.5em;
}

.nav li {
  display: inline-block;
  margin: 7px 15px;
}

.nav a:active::before {
  visibility: visible;
  transform: scaleX(1)
}
<ul class="nav">
  <li id="nav-home"><a id="a-home" href="#">Home</a></li>
  <li id="nav-services"><a href="#">Services</a></li>
  <li id="nav-about"><a href="#">About</a></li>
  <li id="nav-contact"><a href="#">Contact</a></li>
</ul>

【问题讨论】:

    标签: html css


    【解决方案1】:

    您需要包含一个相对父级li 来包含绝对定位的元素aAbsolute Positioning inside Relative Positioning 在此之前,绝对定位的 a 将整个 ul 作为相对父级。

    添加代码:

    .nav li {
      position: relative;
    }
    
    .nav a::before  { 
       bottom: -2px; /* To match the border height */
    }
    

    a {
      text-decoration: none;
      color: black;
    }
    
    .nav li {
      position: relative;
    }
    
    .nav a::before {
      content: "";
      position: absolute;
      width: 100%;
      height: 2px;
      bottom: -2px;
      left: 0;
      background-color: rgb(92, 149, 112);
      visibility: hidden;
      transform: scaleX(0);
      transition: all 0.3s ease-in-out 0s;
    }
    
    .nav a:hover::before {
      visibility: visible;
      transform: scaleX(1);
    }
    
    ul.nav {
      font-size: 11px;
      list-style: none;
      position: fixed;
      display: block;
      padding: 0;
      margin: 0;
      z-index: 100;
      top: 0.5em;
      right: 1.5em;
    }
    
    .nav li {
      display: inline-block;
      margin: 7px 15px;
    }
    
    .nav a:active::before {
      visibility: visible;
      transform: scaleX(1)
    }
    <ul class="nav">
      <li id="nav-home"><a id="a-home" href="#">Home</a></li>
      <li id="nav-services"><a href="#">Services</a></li>
      <li id="nav-about"><a href="#">About</a></li>
      <li id="nav-contact"><a href="#">Contact</a></li>
    </ul>

    【讨论】:

    • 为什么您在完美复制的情况下重新打开了这个问题?
    • 这可以有多种解决方案来改变结构。问题中没有提到定位。
    • 无论结构/解决方案是什么,问题仍然存在,即在处理 position:absolute 时缺少 position:relative。 OP不会提及定位,因为他不知道他的问题。顺便说一句,你的答案和另一个确认重复。
    【解决方案2】:

    这里的问题是伪元素a::before 相对于ul.nav 是绝对定位的,因为这是它上面最接近的定位元素。结果,该元素从文档流中分离出来,因此width: 100%" 使其占用ul 的可用宽度的100%。将position: relative 添加到您的a 样式中,如下例所示,它将按您的预期工作:

    a {
      text-decoration: none;
      color: black;
      position: relative;
    }
    
    .nav a::before {
      content: "";
      position: absolute;
      width: 100%;
      height: 2px;
      bottom: 0;
      left: 0;
      background-color: rgb(92, 149, 112);
      visibility: hidden;
      transform: scaleX(0);
      transition: all 0.3s ease-in-out 0s;
    }
    
    .nav a:hover::before {
      visibility: visible;
      transform: scaleX(1);
    }
    
    ul.nav {
      font-size: 11px;
      list-style: none;
      position: fixed;
      display: block;
      padding: 0;
      margin: 0;
      z-index: 100;
      top: 0.5em;
      right: 1.5em;
    }
    
    .nav li {
      display: inline-block;
      margin: 7px 15px;
    }
    
    .nav a:active::before {
      visibility: visible;
      transform: scaleX(1)
    }
    <ul class="nav">
      <li id="nav-home"><a id="a-home" href="#">Home</a></li>
      <li id="nav-services"><a href="#">Services</a></li>
      <li id="nav-about"><a href="#">About</a></li>
      <li id="nav-contact"><a href="#">Contact</a></li>
    </ul>

    【讨论】:

      猜你喜欢
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      相关资源
      最近更新 更多