css导航--鼠标点击样式跟随滑动选中效果

在这里插入图片描述

应用到的icon 地址

https://ionic.io/ionicons/usage

引入icon

  <script type="module" src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.esm.js"></script>

在这里插入图片描述
使用起来很方便 点击Icons 进行查询自己想要的icon即可

dom部分

  <div class="BoxStyle">
    <div class="navigation">
      <ul>
        <li class="active">
          <a href="#">
            <span class="icon"><ion-icon name="home-outline"></ion-icon></span>
          </a>
        </li>
        <li>
          <a href="#">
            <span class="icon"><ion-icon name="people-outline"></ion-icon></span
          ></a>
        </li>

        <li>
          <a href="#">
            <span class="icon"
              ><ion-icon name="chatbubble-outline"></ion-icon></span
          ></a>
        </li>
        <li>
          <a href="#">
            <span class="icon"
              ><ion-icon name="camera-outline"></ion-icon> </span
          ></a>
        </li>
        <li>
          <a href="#">
            <span class="icon">
              <ion-icon name="settings-outline"></ion-icon></span
          ></a>
        </li>
        <div class="indicator">
          <span></span>
        </div>
      </ul>
    </div>
  </div>
   // 实现样式切换
  <script> 
      //获取所有的 li标签
      let list = document.querySelectorAll(".navigation li");
      //创建样式切换事件
      function activeLink() {
         // 遍历所有的li标签
        list.forEach((item) => {
         // 删除所有的active
          item.classList.remove("active");
        });
        //  只对选中的添加active
        this.classList.add("active");
      }
      // 为所有的li 标签添加点击事件
      list.forEach((item) => {
        item.addEventListener("click", activeLink);
      });
      console.log("list", list);
  </script>
//css
 <style lang="scss" scoped>
.BoxStyle {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;

  background-color: #ffffff;
  .navigation {
    width: 420px;
    height: 70px;
    display: flex;
    justify-content: center;
    align-items: center;
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
    border-radius: 10px;
    background-color: #0fa6f9;
    ul {
      width: 350px;
      display: flex;
      position: relative;
      // justify-content: space-around;
      // align-items: center;
      li {
        font-size: 20px;
        width: 70px;
        height: 70px;
        position: relative;
        z-index: 1;
        a {
          display: flex;
          justify-content: center;
          align-items: center;
          width: 100%;
          height: 100%;
          .icon {
            position: relative;
            display: block;
            font-size: 1.5em;
            color: #ffffff;
            line-height: 80px;
            opacity: 0.75;

            &:hover {
              opacity: 1;
            }
          }
        }
        &:nth-child(2).active ~ .indicator {
          transform: translateX(calc(70px * 1));
        }
        &:nth-child(3).active ~ .indicator {
          transform: translateX(calc(70px * 2));
        }
        &:nth-child(4).active ~ .indicator {
          transform: translateX(calc(70px * 3));
        }
        &:nth-child(5).active ~ .indicator {
          transform: translateX(calc(70px * 4));
        }
      }
      .active {
        // background-color: #ffffff;
        a {
          .icon {
            opacity: 1;
            color: #0fa6f9;
            transform: translateY(-8px);
          }
        }
      }
      .indicator {
        position: absolute;
        top: -10px;
        width: 57px;
        height: 60px;
        background-color: #ffffff;
        border-bottom-left-radius: 35px;
        border-bottom-right-radius: 35px;
        cursor: pointer;
        transition: 0.5s;
        border: 6px solid #ffffff;
        &::before {
          content: " ";
          position: absolute;
          top: 4px;
          left: -25px;
          width: 20px;
          height: 20px;
          background: transparent;
          border-top-right-radius: 35px;
          box-shadow: 4px -6px 0 2px #ffffff;
        }
        &::after {
          content: " ";
          position: absolute;
          top: 4px;
          right: -25px;
          width: 20px;
          height: 20px;
          background: transparent;
          border-top-left-radius: 35px;
          box-shadow: -4px -6px 0 2px #ffffff;
        }
        span {
          position: absolute;
          left: -1px;
          // top: 5px;
          width: 50px;
          height: 50px;
          border: 4px solid #0fa6f9;
          border-radius: 50%;
          box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
          transform: scale(0.85);
        }
      }
    }
  }
}
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用CSS的伪类选择器来实现菜单导航选中效果。具体的步骤如下: 1. HTML结构 首先需要在HTML中创建菜单导航的结构,比如一个ul列表。 ```html <ul class="menu"> <li><a href="#">菜单1</a></li> <li><a href="#">菜单2</a></li> <li><a href="#">菜单3</a></li> <li><a href="#">菜单4</a></li> </ul> ``` 2. CSS样式 然后我们可以设置菜单的基础样式,并使用:hover伪类选择器为菜单项添加鼠标悬停效果。同时,使用:active伪类选择器为菜单项添加鼠标点击效果。 ```css .menu { list-style: none; margin: 0; padding: 0; } .menu li { display: inline-block; margin-right: 20px; } .menu li a { display: inline-block; padding: 10px 20px; color: #333; text-decoration: none; } .menu li a:hover { background-color: #eee; } .menu li a:active { background-color: #ccc; } ``` 3. 选中效果 最后,我们可以使用.active伪类选择器为当前选中的菜单项添加选中效果。 ```css .menu li a.active { background-color: #ccc; } ``` 在JavaScript中,我们可以通过为菜单项添加点击事件来动态地为选中的菜单项添加.active类。 ```javascript var menuItems = document.querySelectorAll('.menu li a'); for (var i = 0; i < menuItems.length; i++) { menuItems[i].onclick = function() { // 移除当前所有已选中的菜单项 for (var j = 0; j < menuItems.length; j++) { menuItems[j].classList.remove('active'); } // 为当前菜单项添加选中效果 this.classList.add('active'); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值