tab 切换下划线跟随实现

  • 不可思议的CSS
  • 导航栏
  • 光标小下划线跟随
  • PURE CSS
  • Nav Underline

设计思路 :

    1. 利用绝对定位,将 li 的伪元素的宽度设置为 0
    1. 在 hover 的时候,宽度从 width: 0 -> width: 100%
    1. 左移左出,右移右出:
    • a) 将下划线的 left 偏移量初始位置设置为 left: 100%
    • b) 当鼠标 hover 的时候, left 偏移量设置为 0
    • c) 使用 ~ 选择符,改变当前选择元素之后所有元素的行为 :
      • 在不改变当前 hover 的 li 的下划线移动方式,而改变它下一个 li 的下划线的移动方式,
      • 对于当前 hover 的 li ,其对应伪元素的下划线的定位是 left: 100%,而对于 li:hover ~ li::before,它们的定位是 left: 0。

基础代码

<ul>
  <li class="active">不可思议的CSS</li>
  <li>导航栏</li>
  <li>光标小下划线跟随</li>
  <li>PURE CSS</li>
  <li>Nav Underline</li>
</ul>
ul {
  display: flex;
  position: absolute;
  width: 800px;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  list-style: none;
}
li {
  position: relative;
  padding: 20px;
  color: #000;
  line-height: 1;
  transition: 0.2s all linear;
  cursor: pointer;
}
li::before {
  content: "";
  position: absolute;
  top: 0;
  left: 100%;
  width: 0;
  height: 100%;
  border-bottom: 2px solid #000;
  transition: 0.2s all linear;
}

划过 tab 跟随

li:hover::before {
  width: 100%;
  top: 0;
  left: 0;
  transition-delay: 0.1s;
  border-bottom-color: #000;
}
li:hover ~ li::before {
  left: 0;
}
li:active {
  background: #000;
  color: #fff;
}

不需要使用 js 即可实现划过 tab 跟随特效。

点击 tab 跟随

结合 js 使用 active 类即可实现 点击 tab 跟随

.active ~ li::before {
  left: 0;
}
.active::before {
  width: 100%;
  left: 0;
  top: 0;
}
// 使用 jquery
$('li').on('click', function () {
  $(this).addClass('active').siblings().removeClass('active')
})

参考资料

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress