css tab 带指示器

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <nav>
      <div class="marker"></div>
      <a target="_blank" class="item"> tab2 </a>
      <a target="_blank" class="item"> tab2 </a>
      <a target="_blank" class="item"> tab3 </a>
      <a target="_blank" class="item"> tab4 </a>
      <a target="_blank" class="item"> tab5 </a>
      <a target="_blank" class="item"> tab6 </a>
    </nav>
  </body>
  <script>
    const tabPanels = document.getElementsByClassName("item")
    const setMarker = (index) => {
      removeActive()
      tabPanels[index].classList.add("active")
      const marker = document.querySelector(".marker")
      const activeElement = document.querySelector(".active")
      if (!marker || !activeElement) return
      marker.style.left = activeElement.offsetLeft + "px"
      marker.style.width = activeElement.offsetWidth + "px"
    }
    
    const removeActive = () => {
      for (let i = 0; i < tabPanels.length; i++) {
        if (tabPanels[i].classList.contains("active")) {
          tabPanels[i].classList.remove("active")
        }
      }
    }
    
    for (let i = 0; i < tabPanels.length; i++) {
      tabPanels[i].addEventListener("click", (e) => {
        setMarker(i)
      })
    }

    setMarker(0)
  </script>
</html>

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body{
    width: 100%;
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
}

nav {
    position: relative;
    display: flex;
    justify-content: space-around;
    width: 100%;
    height: 80px;
  }

  nav a {
    display: block;
    position: relative;
    font-size: 20px;
    margin-top: 26px;
    font-family: Source Han Sans CN-Regular, Source Han Sans CN;
    font-weight: 400;
    color: #000000;
    text-decoration: none;
    cursor: pointer;


  }

  nav .marker {
    left: 0;
    position: absolute;
    height: 4px;
    width: 0;
    background: #0085FC;
    bottom: 25px;
    border-radius: 4px;
    transition: 0.3s;
  }

  .active {
    font-size: 20px;
    font-family: Source Han Sans CN-Regular, Source Han Sans CN;
    font-weight: 400;
    color: #0085FC;
  }
  https://sandy-reminder-612.notion.site/vue3-Hook-eee079b92eff423c8313fd90e7f2f9ee
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值