一个好看的底部导航栏效果

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>底部导航栏</title>
</head>
<style>/* 清除一些默认样式 */* {margin: 0;padding: 0;box-sizing: border-box;list-style: none;}a {text-decoration: none;/*确保在浏览器中显示链接时,没有任何文本装饰,如下划线。 */}/* 对整体进行设置,并且都设置为弹性盒,方便进行操作 */body {display: flex;justify-content: center;align-items: center;min-height: 100vh;background: #222327;}/* 设置导航栏样式 */.nav {/* 对导航栏位置进行定位处理,方便后续的图标位置的设置 */position: relative;width: 400px;height: 60px;background: #fff;display: flex;justify-content: center;align-items: center;border-radius: 10px;}.nav ul {display: flex;width: 350px;}.nav ul li {height: 60px;/* flex:1是让所有的li平均分nav这个容器 */flex: 1;position: relative;z-index: 2;display: flex;justify-content: center;}.nav ul li span {/* 进行定位,使之通过span元素带动矢量图标进行水平垂直到中心位置 */position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;font-size: 9px;width: 55px;height: 55px;border-radius: 50%;/* 设置鼠标移入的样式 */cursor: pointer;/* 设置动画过度事件以及延迟 */transition: 0.5s;transition-delay: 0s;}.nav ul li span i {/* 针对图标大小进行设置 */display: flex;color: #222327;font-size: 2em;}
/* 下面是针对选中效果做的样式处理 */.nav ul li.active span {/* 设置了一开始的背景颜色,后面会被取代,设置了点击的时候会向上移动 */background: orange;transform: translateY(-27px);transition-delay: 0.25s;}.nav ul li.active span i {/* 设置了点击时候矢量图标的文字颜色 */color: #fff;}.nav ul li span::before {content: '';position: absolute;top: 10px;left: 0;width: 100%;height: 100%;background: orange;border-radius: 50%;filter: blur(40px);opacity: 0;transition: 0.5s;transition-delay: 0s;}.nav ul li span::before {opacity: 0.5;transition-delay: 0.25s;}/* 这里将i元素设置的颜色显示出来 这两个样式块中都使用了 background: var(--clr); 属性,可以将背景颜色设置为--clr 变量所表示的值。这种使用自定义变量的方式,可以在代码中统一定义颜色值,以便在需要时进行统一更改。*/.nav ul li.active span {background: var(--clr);}.nav ul li span::before {background: var(--clr);}/* 背景园设置 */.indicator {/* 这里进行了定位,并且设置了背景园的位置,同时将圆的背景颜色与背景颜色设为一致,会形成那种向下突兀的圆形,并且加入了动画 */position: absolute;top: -35px;width: 70.5px;height: 70px;background: #222327;border-radius: 50%;z-index: 1;transition: 0.5s;}/* 设置左边半弧 */.indicator::before {content: '';position: absolute;top: 16px;left: -34px;width: 10px;height: 5px;background: transparent;border-radius: 50%;box-shadow: 20.5px 19px 0 4px #fff;}/* 设置右边半弧 */.indicator::after {content: '';position: absolute;top: 16px;left: 54px;width: 10px;height: 5px;background: transparent;border-radius: 50%;box-shadow: 20px 19px 0 4px #fff;}
/* 设置平移 *//* nth-child()选中低某个i元素,然后配合js完成背景圆的移动 在CSS中,calc() 是一个用于执行计算的函数。它允许在CSS属性值中使用数学表达式。这种计算函数通常用于允许动态计算和调整元素的尺寸、间距或位置。在 calc() 函数中,可以使用不同的运算符(如加号 +、减号 -、乘号 *、除号 /)来结合数值和单位进行计算。它可以包含其他长度单位(如像素 px、百分比 % 等),并且可以与其他CSS属性值和变量一起使用。*//* 这里呢使用了nth-child选择器选中对应的i元素,注意,这里设置的平移效果是由clac函数计算而来,选中其中一个i元素,并且当且仅当具有active类之后的所有兄弟中的.indicator类元素,有一个指示器元素(`.indicator`)。指示器的位置会根据活动项目(具有`active`类的`<li>`元素)的位置进行调整根据活动项目的位置设置指示器的水平平移距离,实现一个在导航菜单中显示当前选中项目的效果。指示器的位置和平移距离是根据活动项目的索引和固定的长度单位(70px)进行计算的。 */.nav li:nth-child(1).active~.indicator{transform: translateX(calc(70px*0));}.nav li:nth-child(2).active~.indicator {transform: translateX(calc(70px*1));}.nav li:nth-child(3).active~.indicator {transform: translateX(calc(70px*2));}.nav li:nth-child(4).active~.indicator {transform: translateX(calc(70px*3));}.nav li:nth-child(5).active~.indicator {transform: translateX(calc(70px*4));}</style>
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_4173165_2g4t5a6pg9v.css"><body><!-- 目前就一个简单的nav,推荐大家语义化来写 --><div class="nav"><ul><!-- 设置active效果,用于获取选中效果 行内样式是一种直接在HTML元素上指定样式的方法,在这种情况下,你使用 style 属性将 --clr 变量设为不同色。--><li class="active" style="--clr:#f44336"><span><i class="iconfont icon-shouye"></i>首页</span></li><li style="--clr:#0fc70f"> <span><i class="iconfont icon-liuyan"></i>留言</span></li><li style="--clr:#2196f3"> <span><i class="iconfont icon-code"></i>代码</span></li><li style="--clr:#b145e9"> <span><i class="iconfont icon-box-empty"></i>盒子</span></li><li style="--clr:#ffa111"> <span><i class="iconfont icon-gitee-fill-round"></i>gitee</span></li><div class="indicator"></div></ul></div>
</body>
<script>//通过 `lis.forEach(li => li.addEventListener('click', function () {...}))` 遍历 `lis` 数组中的每个元素,并为每个元素都添加一个 ‘click’ 事件监听器。
//在每次点击事件中,使用 `lis.forEach(item => {...})` 遍历 `lis` 数组中的每个元素,将它们的 `active` 类都移除,然后在当前被点击的元素上添加 `active` 类,const lis = document.querySelectorAll('.nav li')lis.forEach(li => li.addEventListener('click', function () {lis.forEach(item => {item.classList.remove('active');this.classList.add('active');})}))
</script></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust学习之Features

Rust学习之Features 一 什么是 Features二 默认 feature三 简单的features应用示例四 可选(optional)的依赖五 依赖的特性5.1 在依赖表中指定5.2 在features表中指定 六 命令行中特性控制七 特性统一路径八 其它8.1 相互排斥特性8.2 观察启用特性8.3 [Feature resolver version…

从源码角度透视QTcpServer:解构QTcpServer的底层原理与技术细节

深入了解QTcpServer的底层原理和技术细节 一、背景二、QTcpServer的基本原理2.1、TCP协议简介2.2、QTcpServer的概念 三、QTcpServer源码解析3.1、QTcpServer的构造函数3.2、调用listen函数启动tcpserver3.3、QSocketNotifier的实现 总结 一、背景 QTcpServer是Qt网络模块中的…

docker 容器指定主机网段

docker 容器指定主机网段。 直接连接到物理网络&#xff1a;使用macvlan技术可以让Docker容器直接连接到物理网络&#xff0c;而不需要通过NAT或端口映射的方式来访问它们。可以提高网络性能和稳定性&#xff0c;同时也可以使容器更加透明和易于管理。 1、首先需要查询网卡的…

vuex store,mutations,getters,actions

文章目录 1.vuex概述2.构建vuex【多组件数据共享】环境Son1.vueSon2.vueApp.vue 3.创建一个空仓库4.如何提供&访问vuex的数据①核心概念 - state状态1.通过store直接访问2.通过辅助函数简化代码 ②核心概念 - mutations&#xff08;粗略&#xff09; 5.核心概念 - mutation…

Leetcode29-最大频率元素计数(3005)

1、题目 给你一个由 正整数 组成的数组 nums 。 返回数组 nums 中所有具有 最大 频率的元素的 总频率 。 元素的 频率 是指该元素在数组中出现的次数。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,2,3,1,4] 输出&#xff1a;4 解释&#xff1a;元素 1 和 2 的频率为 …

python3基础学习一

打印print()函数 R 主要的原因是为防止转义&#xff0c;保证r后面的内容全文输出f “主要作用就是格式化字符串&#xff0c;加上f以后&#xff0c;{“变量/表达式”},花括号里的变量和表达式就可以使用了” def ptSubstr():msg "hello,world!"print(msg[0:-1]);prin…

在Django Admin添加快捷方式django-admin-shortcuts

在Django管理主页上添加简单漂亮的快捷方式。 1.安装 pip install django-admin-shortcuts 2在settings.py注册django-admin-shortcuts INSTALLED_APPS [admin_shortcuts,django.contrib.admin,....... ] 3.添加ADMIN_SHORTCUTS设置 ADMIN_SHORTCUTS [ { ti…

k8s二进制及负载均衡集群部署详解

目录 常见部署方式 二进制部署流程 环境准备 操作系统初始化配置 关闭防火墙 配置SELinux 关闭SWAP 根据规划设置主机名 在master添加hosts&#xff0c;便于主机名解析 调整内核参数 配置时间同步 部署docker引擎 在所有node节点部署docker引擎 部署etcd集群 签发…

合约短线高胜率策略-扭转乾坤指标使用说明

扭转乾坤指标使用说明 行情判断 双绿线 多趋势双红线 空趋势大绿线 小红线 多震荡大红线 小绿线 空震荡 进场条件 趋势行情进场 多趋势 多信号 底金叉 做多空趋势 空信号 顶死叉 做空 震荡行情进场 多震荡 多信号 底金叉 做多多震荡 空信号 顶死叉 做空空…

idea docker 镜像生成太慢太大问题

文章目录 前言一、更小的jdk基础镜像二、服务瘦包&#xff08;thin jar&#xff09;2.1 maven2.2 修改dockerfile2.3 container run options 三、 基础jdk镜像入手&#xff1f;总结 前言 idea docker 内网应用实践遗留问题 idea docker插件 build 服务镜像太慢服务镜像太大 …

【Java程序设计】【C00223】基于Springboot+vue的图书购物商城(论文)

基于Springbootvue的图书购物商城&#xff08;论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springbootvue的前后端分离的图书商城购物系统 本系统分为用户以及管理员2个角色。 用户&#xff1a;用户登录后、可以查看新上架的书籍和新闻等…

npm ERR! reason: certificate has expired(淘宝镜像过期)

npm ERR! request to https://registry.npm.taobao.org/yauzl/-/yauzl-2.4.1.tgz failed, reason: certificate has expired 今天在执行npm install命令时&#xff0c;报错百度了下是淘宝证书过期原因 解决方法一 执行下面两个命令再进行npm install即可 npm cache clean --…

【深度学习】从0完整讲透深度学习第2篇:TensorFlow介绍和基本操作(代码文档已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归&#xff08;含代码&#xff09;&#xff0c;熟练掌握numpy,pandas,sklearn等框架使用。在算法上&#xff0c;掌握神经网络的数学原理&#xff0c;手动实…

02链表:19、删除链表的倒数第N个节点

19、删除链表的倒数第N个节点 文章目录 19、删除链表的倒数第N个节点方法一&#xff1a;快慢指针 思路&#xff1a;使用虚拟头节点快慢指针&#xff0c;fast指针先走n1&#xff0c;直到为null&#xff0c;slow节点刚好在删除元素前一个位置&#xff0c;方便操作 重点&#xff1…

2024美赛数学建模B题思路源码

赛题目的 赛题目的&#xff1a; 问题描述&#xff1a; 解题的关键&#xff1a; 问题一. 问题分析 问题解答 问题二. 问题分析 问题解答 问题三. 问题分析 问题解答 问题四. 问题分析 问题解答 问题五. 问题分析 问题解答

云计算基础(云计算概述)

目录 一、云计算概述 1.1 云计算的概念 1.1.1 云计算解决的问题 1.1.2 云计算的概念 1.1.3 云计算的组成 1.2 云计算主要特征 1.2.1 按需自助服务 1.2.2 泛在接入 1.2.3 资源池化 1.2.4 快速伸缩性 1.2.5 服务可度量 1.3 云计算服务模式 1.3.1 软件即服务(Softwar…

老师罚学生钱违法吗

在教师岗位上耕耘了近十年&#xff0c;我遇到过无数的学生和无数的教学情境。其中&#xff0c;有一个问题始终困扰着我&#xff1a;在某些情况下&#xff0c;我能否用“罚钱”的方式来纠正学生的行为&#xff1f;当然&#xff0c;这还涉及到许多复杂的因素&#xff1a;学校的规…

Pandas快问快答1-15题

如果你是一名使用python进行过数据处理的程序员&#xff0c;那你对Pandas必然不陌生。pandas是一个开源的第三方Python库&#xff0c;旨在提供快速、灵活和富有表现力的数据结构&#xff0c;以便能够简单、直观地处理关系型和标记型数据。它的名字来源于面板数据&#xff08;Pa…

Linux项目的挂起与结束

后台挂起 nohup java -jar java_gobang.jar & 结束项目 先查询pid ps -ef | grep java_gobang 结束&#xff1a; kill -9 23183

Ruoyi-Cloud-Plus_Nacos配置服务漏洞CVE-2021-29441_官方解决方法以及_修改源码解决---SpringCloud工作笔记199

CVE-2021-29441 这个漏洞是Nacos的,通过使用postman,直接访问接口: 就可以直接添加nacos的用户 Nacos是Alibaba的一个动态服务发现、配置和服务管理平台。攻击者通过添加Nacos-Server的User-Agent头部将可绕过(nacos.core.auth.enabled=true)鉴权认证,从而进行API操作。 …