魔法导航菜单

效果展示

在这里插入图片描述

CSS 知识点

  • 使用 box-shadow 属性实现不定项曲面

整体页面布局

<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="person-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>

实现整体容器样式 及 图标元素样式

.navigation {width: 420px;height: 70px;background: #209cff;display: flex;flex-flow: row wrap;justify-content: center;align-items: center;box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);border-radius: 10px;
}.navigation ul {position: relative;display: flex;flex-flow: row wrap;width: 350px;
}.navigation ul li {position: relative;list-style: none;width: 70px;height: 70px;z-index: 1;
}.navigation ul li a {position: relative;display: flex;justify-content: center;align-items: center;width: 100%;
}.navigation ul li a .icon {position: relative;display: block;font-size: 1.5em;color: #fff;line-height: 70px;opacity: 0.75;transition: 0.5s;
}.navigation ul li.active a .icon {opacity: 1;color: #209cff;transform: translateY(-8px);
}

实现滑动块样式

.indicator {position: absolute;top: -10px;width: 70px;height: 70px;background: var(--clr);border-bottom-left-radius: 35px;border-bottom-right-radius: 35px;border: 6px solid var(--clr);cursor: pointer;transition: 0.5s;
}.indicator::before {content: "";position: absolute;top: 4px;left: -25.75px;width: 20px;height: 20px;background: transparent;border-top-right-radius: 16px;box-shadow: 4px -6px 0 2px var(--clr);
}.indicator::after {content: "";position: absolute;top: 4px;right: -25.75px;width: 20px;height: 20px;background: transparent;border-top-left-radius: 16px;box-shadow: -4px -6px 0 2px var(--clr);
}.indicator span {position: absolute;bottom: 0px;left: -1px;width: 60px;height: 60px;border: 4px solid #209cff;border-radius: 50%;box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);transform: scale(0.85);
}

编写导航菜单项点击事件

let list = document.querySelectorAll(".navigation li");function activeLink() {list.forEach((item) => {item.classList.remove("active");this.classList.add("active");});
}list.forEach((item) => {item.addEventListener("click", activeLink);
});

编写导航菜单项滑块移动样式

.navigation ul li:nth-child(2).active ~ .indicator {transform: translateX(calc(70px * 1));
}.navigation ul li:nth-child(3).active ~ .indicator {transform: translateX(calc(70px * 2));
}.navigation ul li:nth-child(4).active ~ .indicator {transform: translateX(calc(70px * 3));
}.navigation ul li:nth-child(5).active ~ .indicator {transform: translateX(calc(70px * 4));
}

完整代码下载

完整代码下载

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

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

相关文章

Linux开发工具的使用(vim、gcc/g++ 、make/makefile)

文章目录 一 &#xff1a;vim1:vim基本概念2:vim的常用三种模式3:vim三种模式的相互转换4:vim命令模式下的命令集- 移动光标-删除文字-剪切/删除-复制-替换-撤销和恢复-跳转至指定行 5:vim底行模式下的命令集 二:gcc/g1:gcc/g的作用2:gcc/g的语法3:预处理4:编译5:汇编6:链接7:函…

044_第三代软件开发-保存PDF

第三代软件开发-保存PDF 文章目录 第三代软件开发-保存PDF项目介绍保存PDF头文件源文件使用 关键字&#xff1a; Qt、 Qml、 pdf、 painter、 打印 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#xff…

swift语言用哪种库适合做爬虫?

目录 1、Alamofire 2、URLSession 3、YepHttp 4、Kickbox 5、Vapor 注意事项 总结 在Swift语言中&#xff0c;可以使用第三方库来帮助进行网络爬虫的开发。以下是几个适合Swift语言使用的爬虫库&#xff0c;以及相应的代码示例&#xff1a; 1、Alamofire Alamofire是Sw…

RK3568平台开发系列讲解(音视频篇)RTMP 推流

🚀返回专栏总目录 文章目录 一、RTMP 的工作原理二、RTMP 流媒体服务框架2.1、Nginx 流媒体服务器2.2、FFmpeg 推流沉淀、分享、成长,让自己和他人都能有所收获!😄 📢目前常见的视频监控和视频直播都是使用了 RTMP、RTSP、HLS、MPEG-DASH、 WebRTC流媒体传输协议等。 R…

C语言之pthread_once实例总结(八十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

从TCP到Socket,彻底理解网络编程是怎么回事

进行程序开发的同学&#xff0c;无论Web前端开发、Web后端开发&#xff0c;还是搜索引擎和大数据&#xff0c;几乎所有的开发领域都会涉及到网络编程。比如我们进行Web服务端开发&#xff0c;除了Web协议本身依赖网络外&#xff0c;通常还需要连接数据库&#xff0c;而数据库连…

Java中对象的比较:复写基类的equals+Comparble接口类的比较+比较器比较+PriorityQueue的比较+源码分析

文章目录 Java中对象的比较一、元素的比较二、对象的比较1.复写基类的equals2.基于Comparble接口类的比较3.基于比较器比较三种方法的对比 4. 集合框架中PriorityQueue的比较方式 Java中对象的比较 一、元素的比较 在Java中&#xff0c;基本类型的对象可以直接比较大小。 二、…

【Python3】【力扣题】232. 用栈实现队列

【力扣题】题目描述&#xff1a; 栈&#xff1a;线性集合。后进先出。 队列&#xff1a;线性集合。先进先出。 【Python3】代码&#xff1a; 解题思路&#xff1a;两个栈&#xff0c;一个入队的栈&#xff0c;一个出队的栈。出栈时&#xff0c;若出队的栈为空&#xff0c;才将…

RabbitMQ 死信队列

在MQ中&#xff0c;当消息成为死信&#xff08;Dead message&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而在RabbitMQ中&#xff0c;由于有交换机的概念&#xff0c;实际是将死信发送给了死信交换机&#xf…

c语言 结构体 简单实例

结构体 简单例子 要求&#xff1a; 结构体保存学生信息操作 代码 #include <stdio.h>//定义结构体 struct student{int ID;char name[20];char sex;char birthday[8];int grade; };int main(){int number;printf("请输入学生个数&#xff1a;");scanf(&quo…

lua中的循环 while、for、repeat until三种循环方式、pairs和ipairs区别

lua中的循环 while、for、repeat until三种循环方式、pairs和ipairs区别 介绍for循环参数ipairs和pairs whilerepeat until总结 介绍 这里我用while、for、repeat until分别输出1-20之间的奇数 &#xff0c;具体的语法可以看下面的代码 for循环 参数 定义一个初始值为start…

ARM64 linux并发与同步之原子操作

卷2&#xff1a;调试与案例分析 第一章 并发与同步 画了两张简图&#xff0c;方便理解&#xff0c;如下&#xff1a; 针对并发源的问题&#xff0c;我接触的项目中都是SMP系统&#xff0c;目前大部分也都是SMP系统&#xff1b; 对于SMP系统&#xff0c;情况会更复杂。 □ 同…