如何实现一个纯 CSS 的滑动门导航效果,需要用到哪些技术?

大白话如何实现一个纯 CSS 的滑动门导航效果,需要用到哪些技术?

什么是滑动门导航效果

滑动门导航效果是一种常见的网页导航设计,当你把鼠标悬停在导航菜单的某个选项上时,这个选项的背景会滑动或者变化,就好像门打开一样,给用户一种交互的感觉。这种效果可以通过纯 CSS 来实现,下面我来详细讲讲。

实现步骤和需要用到的技术

1. 创建 HTML 结构

首先,你得有一个 HTML 文件,在里面创建导航菜单的基本结构。这个结构就像是房子的骨架,是整个导航效果的基础。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>纯 CSS 滑动门导航效果</title><!-- 引入 CSS 文件,这里假设 CSS 文件名为 styles.css --><link rel="stylesheet" href="styles.css">
</head><body><!-- 创建一个导航栏,使用 ul 标签来表示无序列表 --><nav class="navigation"><!-- 每个 li 标签代表一个导航选项 --><ul><li><a href="#">首页</a></li><li><a href="#">关于我们</a></li><li><a href="#">服务</a></li><li><a href="#">联系我们</a></li></ul></nav>
</body></html>
2. 编写 CSS 样式

接下来,就要用 CSS 来给这个骨架添砖加瓦,让它变成一个有滑动门效果的导航菜单。

/* 对整个 HTML 文档进行一些基本设置 */
html {/* 设置盒模型,让元素的内边距和边框不会影响元素的宽度和高度 */box-sizing: border-box;
}/* 让所有元素都继承上面设置的盒模型 */
*, *::before, *::after {box-sizing: inherit;
}/* 对 body 进行一些基本设置 */
body {/* 设置字体为 Arial 或者 sans-serif */font-family: Arial, sans-serif;/* 去掉 body 的外边距 */margin: 0;/* 去掉 body 的内边距 */padding: 0;
}/* 对导航栏进行样式设置 */
.navigation {/* 设置导航栏的背景颜色为深灰色 */background-color: #333;/* 让导航栏内的元素水平排列 */display: flex;/* 让导航栏内的元素在水平方向上居中对齐 */justify-content: center;
}/* 对导航栏内的无序列表进行样式设置 */
.navigation ul {/* 去掉无序列表的默认样式,比如前面的小圆点 */list-style-type: none;/* 去掉无序列表的外边距 */margin: 0;/* 去掉无序列表的内边距 */padding: 0;/* 让无序列表内的元素水平排列 */display: flex;
}/* 对导航栏内的列表项进行样式设置 */
.navigation li {/* 让列表项内的元素水平排列 */display: flex;
}/* 对导航栏内的链接进行样式设置 */
.navigation a {/* 设置链接的显示方式为块级元素,这样可以设置宽度和高度 */display: block;/* 设置链接的内边距,让文字和边框之间有一定的距离 */padding: 15px 20px;/* 设置链接的文字颜色为白色 */color: white;/* 去掉链接的下划线 */text-decoration: none;/* 设置链接的过渡效果,当鼠标悬停时,背景颜色会在 0.3 秒内平滑过渡 */transition: background-color 0.3s ease;
}/* 当鼠标悬停在链接上时,改变链接的背景颜色 */
.navigation a:hover {/* 设置鼠标悬停时链接的背景颜色为浅蓝色 */background-color: #007BFF;
}

代码解释

  • HTML 部分

    • <!DOCTYPE html>:声明文档类型为 HTML5。
    • <html>:HTML 文档的根标签。
    • <head>:包含文档的元数据,比如字符编码、页面标题、引入的 CSS 文件等。
    • <body>:包含页面的可见内容,这里就是导航栏。
    • <nav>:表示导航栏。
    • <ul>:无序列表,用来表示导航选项的集合。
    • <li>:列表项,每个列表项代表一个导航选项。
    • <a>:链接标签,用来设置导航选项的跳转链接。
  • CSS 部分

    • box-sizing: border-box;:让元素的内边距和边框不会影响元素的宽度和高度。
    • display: flex;:使用弹性布局,让元素可以水平排列。
    • justify-content: center;:让元素在水平方向上居中对齐。
    • list-style-type: none;:去掉无序列表的默认样式。
    • transition: background-color 0.3s ease;:设置过渡效果,当鼠标悬停时,背景颜色会在 0.3 秒内平滑过渡。
    • :hover:伪类选择器,当鼠标悬停在元素上时,应用指定的样式。

总结

通过以上的 HTML 和 CSS 代码,你就可以实现一个简单的纯 CSS 滑动门导航效果。当你把鼠标悬停在导航选项上时,选项的背景颜色会平滑地从深灰色变成浅蓝色,就像门打开一样。

除了纯 CSS,还有哪些方法可以实现滑动门导航效果?

除了纯 CSS 之外,还可以使用 JavaScript 配合 CSS 或者使用框架(如 React、Vue 等)来实现滑动门导航效果,下面为你详细介绍:

1. JavaScript 配合 CSS

JavaScript 能够动态地操控 HTML 元素的样式,借助监听鼠标事件,可实现更为复杂的滑动门效果。

示例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JavaScript 实现滑动门导航</title><style>nav {background-color: #333;display: flex;justify-content: center;}ul {list-style-type: none;margin: 0;padding: 0;display: flex;}li {display: flex;}a {display: block;padding: 15px 20px;color: white;text-decoration: none;}.active {background-color: #007BFF;}</style>
</head><body><nav><ul><li><a href="#">首页</a></li><li><a href="#">关于我们</a></li><li><a href="#">服务</a></li><li><a href="#">联系我们</a></li></ul></nav><script>const navLinks = document.querySelectorAll('nav a');navLinks.forEach(link => {link.addEventListener('mouseover', function () {// 鼠标悬停时添加 active 类this.classList.add('active');});link.addEventListener('mouseout', function () {// 鼠标移开时移除 active 类this.classList.remove('active');});});</script>
</body></html>
代码解释
  • CSS 部分定义了导航栏的基本样式,.active 类用于设定鼠标悬停时的背景颜色。
  • JavaScript 部分借助 querySelectorAll 选取所有导航链接,接着为每个链接添加 mouseovermouseout 事件监听器。当鼠标悬停在链接上时,添加 active 类;鼠标移开时,移除 active 类。

2. 使用 React 框架

React 是一个用于构建用户界面的 JavaScript 库,可使用 React 的状态管理和事件处理功能来实现滑动门导航效果。

示例代码
.navigation {background-color: #333;display: flex;justify-content: center;
}.navigation ul {list-style-type: none;margin: 0;padding: 0;display: flex;
}.navigation li {display: flex;
}.navigation a {display: block;padding: 15px 20px;color: white;text-decoration: none;
}.navigation li.active {background-color: #007BFF;
}    
import React, { useState } from 'react';
import './SlidingDoorNavigation.css';const SlidingDoorNavigation = () => {const [activeIndex, setActiveIndex] = useState(null);const handleMouseEnter = (index) => {setActiveIndex(index);};const handleMouseLeave = () => {setActiveIndex(null);};const navItems = ['首页', '关于我们', '服务', '联系我们'];return (<nav className="navigation"><ul>{navItems.map((item, index) => (<likey={index}onMouseEnter={() => handleMouseEnter(index)}onMouseLeave={handleMouseLeave}className={activeIndex === index ? 'active' : ''}><a href="#">{item}</a></li>))}</ul></nav>);
};export default SlidingDoorNavigation;    
代码解释
  • React 组件里运用 useState 钩子来管理当前激活的导航项索引。
  • 当鼠标悬停在某个导航项上时,调用 handleMouseEnter 函数更新 activeIndex;鼠标移开时,调用 handleMouseLeave 函数将 activeIndex 重置为 null
  • CSS 部分定义了导航栏的基本样式以及激活状态下的样式。

3. 使用 Vue 框架

Vue 是一个渐进式 JavaScript 框架,同样能利用其响应式原理和事件处理来实现滑动门导航效果。

示例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vue 实现滑动门导航</title><style>nav {background-color: #333;display: flex;justify-content: center;}ul {list-style-type: none;margin: 0;padding: 0;display: flex;}li {display: flex;}a {display: block;padding: 15px 20px;color: white;text-decoration: none;}.active {background-color: #007BFF;}</style>
</head><body><div id="app"><nav><ul><li v-for="(item, index) in navItems" :key="index" :class="{ active: activeIndex === index }"@mouseenter="handleMouseEnter(index)" @mouseleave="handleMouseLeave"><a href="#">{{ item }}</a></li></ul></nav></div><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script><script>new Vue({el: '#app',data: {activeIndex: null,navItems: ['首页', '关于我们', '服务', '联系我们']},methods: {handleMouseEnter(index) {this.activeIndex = index;},handleMouseLeave() {this.activeIndex = null;}}});</script>
</body></html>
代码解释
  • Vue 实例里借助 data 属性管理当前激活的导航项索引和导航项列表。
  • 当鼠标悬停在某个导航项上时,调用 handleMouseEnter 方法更新 activeIndex;鼠标移开时,调用 handleMouseLeave 方法将 activeIndex 重置为 null
  • CSS 部分定义了导航栏的基本样式以及激活状态下的样式。

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

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

相关文章

WordPress靶场攻略

后台修改模板 修改404.php为一句话木马 访问404.php,验证有没有成功 http://47.122.51.245:8080/wp-content/themes/twentyfifteen/404.php?cmdphpinfo(); 上传主题 创建6.php,写入图中代码 自己随便下载一个主题包&#xff0c;将1.php和主题包压缩在一起&#xff0c;提交上…

JVM常用概念之对象对齐

问题 对象对齐有什么规范吗?对象对齐是8个字节吗? 基础知识 许多硬件实现要求对数据的访问是对齐的&#xff0c;即确保所有 N 字节宽度的访问都在 N 的整数倍的地址上完成。即使对于普通的数据访问没有特别要求&#xff0c;特殊操作&#xff08;特别是原子操作&#xff09…

K8S学习之基础三十七:prometheus监控node资源

Prometheus v2.2.1 ​ 编写yaml文件&#xff0c;包含创建ns、configmap、deployment、service # 创建monitoring空间 vi prometheus-ns.yaml apiVersion: v1 kind: Namespace metadata:name: monitor-sa# 创建SA并绑定权限 kubectl create serviceaccount monitor -n monito…

leetcode127.单词接龙

本题的思路就是将所有可转换的序列相连&#xff0c;构成图&#xff0c;然后选择起始词作为广度优先遍历的起点&#xff0c;那么就能找到转换的最小步骤数 而这里的两个单词是否相连不是真的把他们弄成一张图&#xff0c;而是采用暴力枚举&#xff0c;逐个尝试替换字母&#xf…

Tr0ll2靶机详解

一、主机发现 arp-scan -l靶机ip&#xff1a;192.168.55.164 二、端口扫描、漏洞扫描、目录枚举、指纹识别 2.1端口扫描 nmap --min-rate 10000 -p- 192.168.55.164发现21端口的ftp服务开启 以UDP协议进行扫描 使用参数-sU进行UDP扫描 nmap -sU --min-rate 10000 -p- 19…

Pycharm接入DeepSeek,提升自动化脚本的写作效率

一.效果展示&#xff1a; 二.实施步骤&#xff1a; 1.DeepSeek官网创建API key&#xff1a; 创建成功后&#xff0c;会生成一个API key&#xff1a; 2. PyCharm工具&#xff0c;打开文件->设置->插件&#xff0c;搜索“Continue”&#xff0c;点击安装 3.安装完成后&…

如何在 Node.js 中使用 .env 文件管理环境变量 ?

Node.js 应用程序通常依赖于环境变量来管理敏感信息或配置设置。.env 文件已经成为一种流行的本地管理这些变量的方法&#xff0c;而无需在代码存储库中公开它们。本文将探讨 .env 文件为什么重要&#xff0c;以及如何在 Node.js 应用程序中有效的使用它。 为什么使用 .env 文…

《视觉SLAM十四讲》ch13 设计SLAM系统 相机轨迹实现

前言 相信大家在slam学习中&#xff0c;一定会遇到slam系统的性能评估问题。虽然有EVO这样的开源评估工具&#xff0c;我们也需要自己了解系统生成的trajectory.txt的含义&#xff0c;方便我们更好的理解相机的运行跟踪过程。 项目配置如下&#xff1a; 数据解读&#xff1a; …

软考高级信息系统管理工程师通关100题(21-40)附记忆口诀

文章目录 21.常用存储模式的技术与应用对比22.物联网架构23.云计算服务提供的资源层次24.大数据25.区块链26.人工智能27.虚拟现实VR28.IT治理的内涵29.IT 治理活动30.IT治理本质31.IT审计目标32.IT审计方法33.治理系统设计34.数据管理能力成熟度评估模型35.项目管理原则36.管理…

Redisson 分布式锁原理

加锁原理 # 如果锁不存在 if (redis.call(exists, KEYS[1]) 0) then# hash结构,锁名称为key,线程唯一标识为itemKey&#xff0c;itemValue为一个计数器。支持相同客户端线程可重入,每次加锁计数器1.redis.call(hincrby, KEYS[1], ARGV[2], 1);# 设置过期时间redis.call(pexpi…

主流加固方案深度剖析(梆梆/腾讯/阿里)

1. 加固技术演进与核心原理 1.1 移动端加固技术图谱 graph TD A[代码防护] --> A1[混淆] A --> A2[虚拟化] A --> A3[动态加载] B[数据防护] --> B1[资源加密] B --> B2[协议加密] C[运行时防护] --> C1[反调试] C --> C2[环境检测] C --> C…

大模型之蒸馏模型

蒸馏模型&#xff08;Distilled Model&#xff09;是一种通过知识蒸馏&#xff08;Knowledge Distillation&#xff09;技术训练得到的轻量级模型&#xff0c;其核心思想是将一个复杂的大模型&#xff08;称为教师模型&#xff09;的知识“迁移”到一个更小、更高效的模型&…

iPaaS集成平台中的API可视化编排能给企业带来什么作用

随着企业数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;作为企业数字化资产的核心组成部分&#xff0c;其数量和复杂性不断增加。为了满足业务敏捷化交付的要求&#xff0c;API可视化编排平台应运而生。谷云科技作为这一领域的领先者&#xff0c;其API可…

演员马晓琳正式加入创星演员出道计划,开启演艺事业新篇章

3月19日&#xff0c;演员马晓琳正式加入“创星演员出道计划”&#xff0c;不仅得到参演都市爱情喜剧《和我结婚吧》角色的机会&#xff0c;还获得文旅精品网剧《醉梦灵州》的出演机会&#xff0c;自此开启全新影视之路。对表演抱有极大热情的马晓琳&#xff0c;相信未来可以凭借…

绿盟科技春招面试

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

双碳战略下的电能质量革命:解码电力系统的健康密码

安科瑞顾强 在能源结构转型的深水区&#xff0c;电能质量正成为制约产业升级的隐形门槛。国家能源局数据显示&#xff0c;我国工业企业每年因电能质量问题造成的经济损失高达3000亿元&#xff0c;而新能源项目因并网质量问题导致的发电效率损失超过15%。在这场关乎能源安全的攻…

Microsoft Edge浏览器的取证分析(基于Chromium)

概述 早在2019年&#xff0c;微软就用Chromium替换了EdgeHTML浏览器引擎&#xff0c;这是微软支持谷歌Chrome浏览器的一个开源项目。通过切换到Chromium&#xff0c;Edge与Chrome浏览器共享一个共同的架构&#xff0c;这意味着用于Chrome浏览器调查的取证技术也适用于Edge。 …

python学智能算法(八)|决策树

【1】引言 前序学习进程中&#xff0c;已经对KNN邻近算法有了探索&#xff0c;相关文章链接为&#xff1a; python学智能算法&#xff08;七&#xff09;|KNN邻近算法-CSDN博客 但KNN邻近算法有一个特点是&#xff1a;它在分类的时候&#xff0c;不能知晓每个类别内事物的具…

RTSP/Onvif安防监控系统EasyNVR级联视频上云系统EasyNVS报错“Login error”的原因排查与解决

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力&#xff0c;能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、W…