JS+CSS实现内凹导航栏

news2024/11/29 12:52:09

在移动互联网时代,导航栏是一个非常重要的元素,它能够帮助用户快速找到所需的信息。下面使用JS + CSS实现一个内凹导航栏,内凹导航栏则是一种比较流行的设计风格,它能够让导航栏看起来更加立体和美观,视觉效果也非常不错。
这个内凹导航栏比较个性化,可以在微信小程序中,使用自定义导航栏功能,实现内凹导航栏。

实际效果

在这里插入图片描述

下面一步一步实现内凹导航栏

创建一个html

<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>纯CSS实现内凹导航栏</title>
    </head>
    <body>
    </body>
</html>

引入字体文件

字体文件使用的是iconfont,使用的是线上链接,当然也可以本地引用。如何本地引用不是今天的主题,在iconfont里有详细教程,很简单,一看就会。

<link href="https://at.alicdn.com/t/c/font_179247_uja3277echo.css" type="text/css" rel="stylesheet" />

创建基本结构

<dl class="nav">
    <dd class="on"><i class="iconfont icon-shouye1"></i><span>首页</span></dd>
    <dd><i class="iconfont icon-zixun"></i><span>资讯</span></dd>
    <dd><i class="iconfont icon-fabu"></i><span>发布</span></dd>
    <dd><i class="iconfont icon-xiaoxi"></i><span>消息</span></dd>
    <dd><i class="iconfont icon-wode"></i><span>我的</span></dd>
</dl>

当前html整体看起来是这样的:

<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>纯CSS实现内凹导航栏</title>
        <link href="https://at.alicdn.com/t/c/font_179247_uja3277echo.css" type="text/css" rel="stylesheet" />
    </head>
    <body>
        <dl class="nav">
            <dd class="on"><i class="iconfont icon-shouye1"></i><span>首页</span></dd>
            <dd><i class="iconfont icon-zixun"></i><span>资讯</span></dd>
            <dd><i class="iconfont icon-fabu"></i><span>发布</span></dd>
            <dd><i class="iconfont icon-xiaoxi"></i><span>消息</span></dd>
            <dd><i class="iconfont icon-wode"></i><span>我的</span></dd>
            <div></div>
        </dl>
    </body>
</html>

完成之后,是如下效果
在这里插入图片描述

定义基本样式

<head></head>之间,增加一个样式<style>。在其中使用如下代码,重置样式

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body{
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background-color: #333333;
}

定义nav的样式

.nav{
    width: 375px;
    height: 70px;
    padding: 0 15px;
    border-radius: 5px;
    background-color: #fff;
    position: relative;
    display: flex;
}

完成后,是长这样子的
在这里插入图片描述

设置每个dd的样式

写如下css,设置每个dd的样式,dd使用flex列布局,并且居中对齐,代码如下:

.nav dd{
    width: 70px;
    height: 70px;
    position: relative;
    list-style: none;
    cursor: pointer;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    z-index: 10;
}

完成后,下过如下:
在这里插入图片描述

修改图标大小

重新设置图标的大小,并为其添加过渡动画。

.nav dd i{
    display: block;
    position: relative;
    height: 70px;
    line-height: 70px;
    text-align: center;
    font-size: 24px;
    transition: all 0.5s;
}

设置文字

设置dd元素内的span。使其绝对定位。并设置过渡动画,文字的默认位置往下移一点,并默认透明。

.nav dd span{
    position:absolute;
    font-size: 12px;
    letter-spacing: 2px;
    transition: all 0.5s;
    opacity: 0;
    transform: translateY(20px);
}

目前效果
在这里插入图片描述

给第一个dd添加激活类on

html代码应该如下:

<dl class="nav">
    <dd class="on"><i class="iconfont icon-shouye1"></i><span>首页</span></dd>
    <dd><i class="iconfont icon-zixun"></i><span>资讯</span></dd>
    <dd><i class="iconfont icon-fabu"></i><span>发布</span></dd>
    <dd><i class="iconfont icon-xiaoxi"></i><span>消息</span></dd>
    <dd><i class="iconfont icon-wode"></i><span>我的</span></dd>
</dl>

</body>之前,添加js代码,使其点击某个dd的时候,给这个dd添加激活类on,其他的dd移除激活类on

<script>
const $dd = document.querySelectorAll('.nav dd');
$dd.forEach((item,index)=>{
    item.addEventListener('click',function(){
        $dd.forEach((_dd,_index)=>{
            _dd.classList.remove('on');
            this.classList.add('on');
        })
    })
})
</script>

激活状态的dd的样式

dd处于激活状态时,图标上移,文字显示。样式如下:

.nav dd.on i{
    transform: translateY(-35px);
    color: #ffffff;
}
.nav dd.on span{
    opacity: 1;
    transform: translateY(10px);
}

效果如下:
在这里插入图片描述

实现内凹效果

dl下,添加一个样式为indicatordt,作为圆形的遮罩背景。并设置边框。模拟镂空效果。

<dt class="indicator"></dt>
.indicator{
    position:absolute;
    top: -50%;
    width: 70px;
    height: 70px;
    background-color: #ff6a00;
    border-radius: 50%;
    transition: all 0.5s;
    border: 6px solid #333333;
}

效果如下:
在这里插入图片描述

进一步设置

通过设置遮罩的beforeafter,使其看起来更圆润。

.indicator::before{
    content: '';
    position: absolute;
    top: 50%;
    left: -23px;
    width: 21px;
    height: 21px;
    border-top-right-radius: 20px;
    box-shadow: 1px -10px 0 0 #333333;
}
.indicator::after{
    content: '';
    position: absolute;
    top: 50%;
    right: -23px;
    width: 21px;
    height: 21px;
    border-top-left-radius: 20px;
    box-shadow: -1px -10px 0 0 #333333;
}

效果如下:
在这里插入图片描述

设置遮罩移动

通过设置遮罩的移动动画,来完成最终效果。

dd:nth-child(1).on~.indicator{
            transform: translateX(calc(70px * 0));
        }
        dd:nth-child(2).on~.indicator{
            transform: translateX(calc(70px * 1));
        }
        dd:nth-child(3).on~.indicator{
            transform: translateX(calc(70px * 2));
        }
        dd:nth-child(4).on~.indicator{
            transform: translateX(calc(70px * 3));
        }
        dd:nth-child(5).on~.indicator{
            transform: translateX(calc(70px * 4));
        }

完整文件下载

点击下方公众号卡片,关注我,回复1008 下载!

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

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

相关文章

vue : 无法加载文件 C:\Users\…\npm\vue.ps1,因为在此系统上禁止运行脚本。

在 PowerShell 中创建 vue 项目时&#xff0c;出现了以下错误导致创建失败&#xff1a;vue : 无法加载文件 C:\Users\…\npm\vue.ps1&#xff0c;因为在此系统上禁止运行脚本。 报错原因 用户权限不足导致无法加载文件&#xff0c;以管理员身份运行终端或者 PowerShell 也可…

使用Three.js制作一个旋转多面体

之前一直对three.js比较好奇&#xff0c;但是一直没有着手学习。今天刷到一篇博客&#xff08;博主&#xff1a;1_bit&#xff09;&#xff0c;觉得挺有意思&#xff0c;就跟着敲了一下。 html: 其中canvas用于添加渲染好的元素&#xff0c;本篇文章通过CDN形式引入three.js,…

2023 Gartner RPA魔力象限报告解读:国产厂商“破纪录”跃升意味着什么?

2023 Gartner RPA魔力象限报告解读&#xff1a;象限跃升彰显国产RPA厂商实力 2023 Gartner RPA魔力象限报告四大行业趋势&#xff0c;国产RPA厂商已在践行 文/王吉伟 8月3日&#xff0c;全球著名咨询调查机构Gartner发布了《2023年全球RPA魔力象限&#xff08;Gartner RPA M…

ceph相关概念和部署

Ceph 可用于向云提供 Ceph 对象存储 平台和 Ceph 可用于提供 Ceph 块设备服务 到云平台。Ceph 可用于部署 Ceph 文件 系统。所有 Ceph 存储集群部署都从设置 每个 Ceph 节点&#xff0c;然后设置网络。 Ceph 存储集群需要满足以下条件&#xff1a;至少一个 Ceph 监控器&#x…

10分钟学会阿里OSS对象存储

一. 前言 最近有很多小伙伴问&#xff0c;如果我们要进行大规模的文件存储该怎么做? 其实实现文件存储的技术有很多&#xff0c;如果我们在网上搜索一下&#xff0c;你会发现实现的技术简直是五花八门&#xff0c;比如有一种技术叫FastDFS就可以实现文件存储&#xff0c;但该…

Effective Java笔记(31)利用有限制通配符来提升 API 的灵活性

参数化类型是不变的&#xff08; invariant &#xff09; 。 换句话说&#xff0c;对于任何两个截然不同的类型 Typel 和 Type2 而言&#xff0c; List<Type1 &#xff1e;既不是 List<Type 2 &#xff1e; 的子类型&#xff0c;也不是它的超类型 。虽然 L ist<String…

问道管理:零基础学炒股?

跟着股市的不断升温&#xff0c;越来越多的人参加到了炒股大军中&#xff0c;希望经过股市赚到更多的金钱。但是关于零根底的新手来说&#xff0c;怎么开始学习炒股成为了一个难题。那么&#xff0c;零根底学炒股真的难吗&#xff1f;怎么更好的入门和学习&#xff1f; 首要&am…

线性代数(三) 线性方程组

前言 如何利用行列式&#xff0c;矩阵求解线性方程组。 线性方程组的相关概念 用矩阵方程表示 齐次线性方程组&#xff1a;Ax0&#xff1b;非齐次线性方程组&#xff1a;Axb. 可以理解 齐次线性方程组 是特殊的 非齐次线性方程组 如何判断线性方程组的解 其中R(A)表示矩阵A的…

模型、策略和算法

模型(model)、策略(strategy)和算法(algorithm)是统计学习的所有内容. 模型是统计学习的最终结果&#xff0c;即决策函数(decision function) 或条件概率函数 &#xff0c;它被⽤来预测特定问题下&#xff0c;将来未知输⼊的输出结果. 策略是统计学习过程中的产⽣最优模型的评…

如何使用vue创建一个项目

1、安装node.js 打开cmd 输入node -v 和npm -v查看电脑是否已经安装了node,js 如果出现以下截图&#xff0c;则说明已经有node.js&#xff0c;可忽略此步 如果没有&#xff0c;则打开官网&#xff0c;下载即可 下载地址&#xff1a;Node.js 下载完成后&#xff0c;打开cmd输…

漏洞挖掘日记1:企业src某系统存在登录绕过漏洞

&#xff08;一&#xff09;漏洞描述 这个漏洞属于逻辑漏洞&#xff0c;逻辑漏洞是指开发者在开发过程中&#xff0c;实现业务上出现了逻辑上的漏洞。之所以出现逻辑漏洞&#xff0c;是因为一些开发者&#xff0c;在开发过程中&#xff0c;第一考虑是怎么实现功能&#xff0c;…

OPENCV C++(十)gramm矫正+直方图均衡化

两者都是只对单通道使用&#xff0c;对多通道的话 就需要分离通道处理再合并通道 两种方法&#xff0c;第一个要运算次数太多了&#xff0c;第二个只需要查表 伽马矫正函数&#xff0c;这里用第二种方法&#xff0c;且写法有点高级 int gammaCorrection(cv::Mat srcMat, cv::…

路由器和交换机的区别

交换机和路由器的区别 交换机实现局域网内点对点通信&#xff0c;路由器实现收集发散&#xff0c;相当于一个猎头实现的中介的功能 路由器属于网络层&#xff0c;可以处理TCP/IP协议&#xff0c;通过IP地址寻址&#xff1b;交换机属于中继层&#xff0c;通过MAC地址寻址(列表)…

聚观早报 | 真我GT5系列工艺细节曝光;小米MIXFold3定妆照抢先看

【聚观365】8月10日消息 真我GT5系列工艺细节曝光小米MIX Fold 3定妆照抢先看360智脑整体能力提升15%科大讯飞智能办公本X3正式发布索尼第二季度营收增长33% 真我GT5系列工艺细节曝光 在此前举办的ChinaJoy2023上&#xff0c;作为手机行业新势力的真我realme携手旗下多款爆款…

JavaWeb 速通Session

目录 一、Session的引入 1.什么是Session&#xff1f; 2.Session的基本原理 : 3.Session长什么样子&#xff1f; 二、Session的底层机制 1. Session接口相关的方法 : 1 req.getSession() : 2 httpSession.setAttribute(String name, Object val); 3 Object obj httpSessi…

Python(七十五--总结)列表、字典、元组、集合总结

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

【Python篇】Python基础语法

【Python篇】Python基础语法 拖拖拖&#xff0c;能使工作便捷高效的为何要拒绝&#xff0c;作个记录—【蘇小沐】 文章目录 【Python篇】Python基础语法1.实验环境 1、标识符2、Python保留字&#xff08;关键字&#xff1a;不能用作任何标识符名称&#xff09;3、注释1&#x…

定制全彩LED电子屏的模组类型

定制全彩LED电子屏的成功与否很大程度上取决于选择合适的LED模组。LED模组是LED电子屏的基本组成部分&#xff0c;直接影响显示效果、可靠性和性能。什么是LED模组&#xff1f;根据LED屏表面处理的工艺不同&#xff0c;我们可以把其分为插件模组、表贴模组、亚表贴模组、三合一…

Redis 搭建哨兵集群

文章目录 0. 哨兵原理1. 哨兵集群架构2. 准备实例和配置3. 启动4. 测试5. RedisTemplate 的哨兵模式配置地址配置读写分离 在 主从架构 Redis 搭建主从集群 中&#xff0c;一个 slave 节点挂了无影响&#xff0c;但是 master 节点挂了&#xff0c;就无法进行写操作了&#xff0…

代码随想录算法训练营之JAVA|第二十五天| 491. 递增子序列

今天是第25天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 491. 递增子序列https://leetcode.cn/problems/non-decreasing-subsequences/ 第一想法 题目理解&#xff1a;在给定的一个数组中&#xff0c;找出全部的递增列表。要求不能有重复。 这是一…