导航栏(酷炫风)--详细教程

目录

一、页面展示

二、代码分解

三、全部代码


一、页面展示

 

二、代码分解

源代码已发, 想直接用的小伙伴可以直接拿去用。

html代码采用的是 无序列表的形式 , 每个li里面有 一个字体图标,当然字体图标是引用 线上的,这里等下我会详细说,你可以先理解为一个小图片吧。

布局方式 我采用了flex 弹性盒子布局,因为这个比浮动好用多了,当然浮动也可以让他在一行显示,目的相同,  定位就是常见的 子绝父相

backdrop-filter:blur(15px) :网上查一下,大致意思就懂了

js: 首先我得获取 id为marker 和 所有 li ,#marker 就是亮光的小盒子 ,为什么要获取呢,原因是我每次悬停的时候 我都要获取当前  li 下 距离左侧 的距离  因为有过渡,不用担心亮光盒子会瞬移。   

数组.forEach() 是用来遍历数组的 ,跟for循环类似,但是这个方便一些, 参数li 就是每个 li ,我给每个li 添加鼠标 移入事件 ,参数e 是事件对象,里面有个target 是获得当前元素的意思

offsetLeft  : 这个盒子距离左侧多少距离,因为li的盒子已经定位好了,所有我就要设置 亮光的盒子距离当前悬停li下的盒子距离

 方法activeLink 里的 切换 active : 鼠标移出事件,首先排他思想,遍历先删除所有 li带有active 类的active类,然后 this指向当前悬停的li 给添加上,

  扩展,有更好的排他思想,你可以 先选中带有active类的哪个 li 删除 ,再给当前 悬停的li 添加 ,这样可以提高代码运行效率,省去循环删除这个步骤

字体图标

网址:Ionicons: The premium icon pack for Ionic Framework - Version 4

进行这个网址后  点击这个 

 你会看到这个

 先把 script 的代码 复制到你的 页面上  ,这个是引用字体图标的前提

接着就是 字体图标的使用  按照他的格式来 ,它的name就是字体图标的意思 ,name怎么找看图

 

复制代码即可使用图标

三、全部代码

css代码



/*  引用外部css*/

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
ul,li {list-style: none;
}

body {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh; 
 /*  这个相对于给ul加了个垂直居中,效果是这样的   
vh意思是相对于视口的尺寸计算的结果  1vh = 1/100 视口高度  */
  background: #1e2759;
}
ul {
  display: flex;
  position: relative;
  justify-content: center;
  align-items: center;
  border-radius: 10px;/* 圆角边框  设置50%为园 */
  box-shadow: 0 5px 25px rgba(0,0,0,.25);
  
}
ul li  a{
  color: white;
  position: relative;
  text-decoration: none;
  display: inline-block;
  padding: 20px 30px;
  z-index: 999;  /* 优先级*/
  backdrop-filter:blur(15px) ;
}
ul li  a ion-icon {
  font-size: 2.5em;
  pointer-events: none;  /* pointer-events:none 限制鼠标事件及对覆盖元素层进行穿透 */
  opacity: 0.25;   /*透明度*/
  transition: 0.25s;  /*过渡时间*/
}
ul li.active a ion-icon {
  opacity: 1;
}
#marker {
  position: absolute;
  top: 0;
  transition: 0.5s;
  z-index: 1;
}
#marker::before {   /*伪类选择器*/
  content: "";
  position: absolute;
  width: 50px;
  height: 40px;
  background: #5da6ff;
  top: -10px;
  left: 50%;
  transform: translateX(-50%);  /* 和left经常搭配使用,可以让其居中  */
  box-shadow: 0 0 15px #5da6ff,   
  0 0 30px #5da6ff,
  0 0 45px #5da6ff,
  0 0 60px #5da6ff;
  border-radius: 8px;
}

页面代码+ js代码

<!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>酷炫的导航栏</title>
  <link rel="stylesheet" href="./css/style.css">
</head>

<body>
  <ul>
    <li><a href="#">
        <ion-icon name="home-outline"></ion-icon>
      </a>
    </li>
    <li>
      <a href="#">
        <ion-icon name="person-outline"></ion-icon>
      </a>
    </li>
    <li><a href="#">
        <ion-icon name="add-circle-outline"></ion-icon>
      </a>
    </li>
    <li> <a href="#">
        <ion-icon name="settings-outline"></ion-icon>
      </a>
    </li>
    <li> <a href="#">
        <ion-icon name="chatbubble-outline"></ion-icon>
      </a>
    </li>
    <div id="marker"></div>
  </ul>
  <script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
  <script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>
  <script>
    let marker = document.querySelector('#marker')
    let List = document.querySelectorAll('ul li');
    function moveIndicator(e) {
      marker.style.left = e.offsetLeft+'px';
      marker.style.width = e.offsetWidth+'px';
    }
    List.forEach(li => {
      li.addEventListener('mousemove',(e)=>{
        moveIndicator(e.target)
      })
    })

    // add active class in hovered list item
    function activeLink(){
      List.forEach(item=>{
        item.classList.remove('active')
        this.classList.add('active')
      })
    }
    List.forEach(item=>{
      item.addEventListener('mouseover',activeLink)
    })
  </script>
</body>

</html>

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刚子最爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值