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

打印 上一主题 下一主题

主题 974|帖子 974|积分 2922

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

什么是滑动门导航效果

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

1. 创建 HTML 结构

首先,你得有一个 HTML 文件,在里面创建导航菜单的基本结构。这个结构就像是房子的骨架,是整个导航效果的底子。
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <title>纯 CSS 滑动门导航效果</title>
  7.   <!-- 引入 CSS 文件,这里假设 CSS 文件名为 styles.css -->
  8.   <link rel="stylesheet" href="styles.css">
  9. </head>
  10. <body>
  11.   <!-- 创建一个导航栏,使用 ul 标签来表示无序列表 -->
  12.   <nav class="navigation">
  13.     <!-- 每个 li 标签代表一个导航选项 -->
  14.     <ul>
  15.       <li><a href="#">首页</a></li>
  16.       <li><a href="#">关于我们</a></li>
  17.       <li><a href="#">服务</a></li>
  18.       <li><a href="#">联系我们</a></li>
  19.     </ul>
  20.   </nav>
  21. </body>
  22. </html>
复制代码
2. 编写 CSS 样式

接下来,就要用 CSS 来给这个骨架添砖加瓦,让它酿成一个有滑动门效果的导航菜单。
  1. /* 对整个 HTML 文档进行一些基本设置 */
  2. html {
  3.   /* 设置盒模型,让元素的内边距和边框不会影响元素的宽度和高度 */
  4.   box-sizing: border-box;
  5. }
  6. /* 让所有元素都继承上面设置的盒模型 */
  7. *, *::before, *::after {
  8.   box-sizing: inherit;
  9. }
  10. /* 对 body 进行一些基本设置 */
  11. body {
  12.   /* 设置字体为 Arial 或者 sans-serif */
  13.   font-family: Arial, sans-serif;
  14.   /* 去掉 body 的外边距 */
  15.   margin: 0;
  16.   /* 去掉 body 的内边距 */
  17.   padding: 0;
  18. }
  19. /* 对导航栏进行样式设置 */
  20. .navigation {
  21.   /* 设置导航栏的背景颜色为深灰色 */
  22.   background-color: #333;
  23.   /* 让导航栏内的元素水平排列 */
  24.   display: flex;
  25.   /* 让导航栏内的元素在水平方向上居中对齐 */
  26.   justify-content: center;
  27. }
  28. /* 对导航栏内的无序列表进行样式设置 */
  29. .navigation ul {
  30.   /* 去掉无序列表的默认样式,比如前面的小圆点 */
  31.   list-style-type: none;
  32.   /* 去掉无序列表的外边距 */
  33.   margin: 0;
  34.   /* 去掉无序列表的内边距 */
  35.   padding: 0;
  36.   /* 让无序列表内的元素水平排列 */
  37.   display: flex;
  38. }
  39. /* 对导航栏内的列表项进行样式设置 */
  40. .navigation li {
  41.   /* 让列表项内的元素水平排列 */
  42.   display: flex;
  43. }
  44. /* 对导航栏内的链接进行样式设置 */
  45. .navigation a {
  46.   /* 设置链接的显示方式为块级元素,这样可以设置宽度和高度 */
  47.   display: block;
  48.   /* 设置链接的内边距,让文字和边框之间有一定的距离 */
  49.   padding: 15px 20px;
  50.   /* 设置链接的文字颜色为白色 */
  51.   color: white;
  52.   /* 去掉链接的下划线 */
  53.   text-decoration: none;
  54.   /* 设置链接的过渡效果,当鼠标悬停时,背景颜色会在 0.3 秒内平滑过渡 */
  55.   transition: background-color 0.3s ease;
  56. }
  57. /* 当鼠标悬停在链接上时,改变链接的背景颜色 */
  58. .navigation a:hover {
  59.   /* 设置鼠标悬停时链接的背景颜色为浅蓝色 */
  60.   background-color: #007BFF;
  61. }
复制代码
代码解释



  • 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 元素的样式,借助监听鼠标事件,可实现更为复杂的滑动门效果。
示例代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <title>JavaScript 实现滑动门导航</title>
  7.   <style>
  8.     nav {
  9.       background-color: #333;
  10.       display: flex;
  11.       justify-content: center;
  12.     }
  13.     ul {
  14.       list-style-type: none;
  15.       margin: 0;
  16.       padding: 0;
  17.       display: flex;
  18.     }
  19.     li {
  20.       display: flex;
  21.     }
  22.     a {
  23.       display: block;
  24.       padding: 15px 20px;
  25.       color: white;
  26.       text-decoration: none;
  27.     }
  28.     .active {
  29.       background-color: #007BFF;
  30.     }
  31.   </style>
  32. </head>
  33. <body>
  34.   <nav>
  35.     <ul>
  36.       <li><a href="#">首页</a></li>
  37.       <li><a href="#">关于我们</a></li>
  38.       <li><a href="#">服务</a></li>
  39.       <li><a href="#">联系我们</a></li>
  40.     </ul>
  41.   </nav>
  42.   <script>
  43.     const navLinks = document.querySelectorAll('nav a');
  44.     navLinks.forEach(link => {
  45.       link.addEventListener('mouseover', function () {
  46.         // 鼠标悬停时添加 active 类
  47.         this.classList.add('active');
  48.       });
  49.       link.addEventListener('mouseout', function () {
  50.         // 鼠标移开时移除 active 类
  51.         this.classList.remove('active');
  52.       });
  53.     });
  54.   </script>
  55. </body>
  56. </html>
复制代码
代码解释



  • CSS 部分定义了导航栏的基本样式,.active 类用于设定鼠标悬停时的背景颜色。
  • JavaScript 部分借助 querySelectorAll 选取所有导航链接,接着为每个链接添加 mouseover 和 mouseout 事件监听器。当鼠标悬停在链接上时,添加 active 类;鼠标移开时,移除 active 类。
2. 使用 React 框架

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

  1. .navigation {
  2.   background-color: #333;
  3.   display: flex;
  4.   justify-content: center;
  5. }
  6. .navigation ul {
  7.   list-style-type: none;
  8.   margin: 0;
  9.   padding: 0;
  10.   display: flex;
  11. }
  12. .navigation li {
  13.   display: flex;
  14. }
  15. .navigation a {
  16.   display: block;
  17.   padding: 15px 20px;
  18.   color: white;
  19.   text-decoration: none;
  20. }
  21. .navigation li.active {
  22.   background-color: #007BFF;
  23. }   
复制代码
  1. import React, { useState } from 'react';
  2. import './SlidingDoorNavigation.css';
  3. const SlidingDoorNavigation = () => {
  4.   const [activeIndex, setActiveIndex] = useState(null);
  5.   const handleMouseEnter = (index) => {
  6.     setActiveIndex(index);
  7.   };
  8.   const handleMouseLeave = () => {
  9.     setActiveIndex(null);
  10.   };
  11.   const navItems = ['首页', '关于我们', '服务', '联系我们'];
  12.   return (
  13.     <nav className="navigation">
  14.       <ul>
  15.         {navItems.map((item, index) => (
  16.           <li
  17.             key={index}
  18.             onMouseEnter={() => handleMouseEnter(index)}
  19.             onMouseLeave={handleMouseLeave}
  20.             className={activeIndex === index ? 'active' : ''}
  21.           >
  22.             <a href="#">{item}</a>
  23.           </li>
  24.         ))}
  25.       </ul>
  26.     </nav>
  27.   );
  28. };
  29. export default SlidingDoorNavigation;   
复制代码
代码解释



  • React 组件里运用 useState 钩子来管理当前激活的导航项索引。
  • 当鼠标悬停在某个导航项上时,调用 handleMouseEnter 函数更新 activeIndex;鼠标移开时,调用 handleMouseLeave 函数将 activeIndex 重置为 null。
  • CSS 部分定义了导航栏的基本样式以及激活状态下的样式。
3. 使用 Vue 框架

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

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <title>Vue 实现滑动门导航</title>
  7.   <style>
  8.     nav {
  9.       background-color: #333;
  10.       display: flex;
  11.       justify-content: center;
  12.     }
  13.     ul {
  14.       list-style-type: none;
  15.       margin: 0;
  16.       padding: 0;
  17.       display: flex;
  18.     }
  19.     li {
  20.       display: flex;
  21.     }
  22.     a {
  23.       display: block;
  24.       padding: 15px 20px;
  25.       color: white;
  26.       text-decoration: none;
  27.     }
  28.     .active {
  29.       background-color: #007BFF;
  30.     }
  31.   </style>
  32. </head>
  33. <body>
  34.   <div id="app">
  35.     <nav>
  36.       <ul>
  37.         <li v-for="(item, index) in navItems" :key="index" :class="{ active: activeIndex === index }"
  38.           @mouseenter="handleMouseEnter(index)" @mouseleave="handleMouseLeave">
  39.           <a href="#">{{ item }}</a>
  40.         </li>
  41.       </ul>
  42.     </nav>
  43.   </div>
  44.   <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
  45.   <script>
  46.     new Vue({
  47.       el: '#app',
  48.       data: {
  49.         activeIndex: null,
  50.         navItems: ['首页', '关于我们', '服务', '联系我们']
  51.       },
  52.       methods: {
  53.         handleMouseEnter(index) {
  54.           this.activeIndex = index;
  55.         },
  56.         handleMouseLeave() {
  57.           this.activeIndex = null;
  58.         }
  59.       }
  60.     });
  61.   </script>
  62. </body>
  63. </html>
复制代码
代码解释



  • Vue 实例里借助 data 属性管理当前激活的导航项索引和导航项列表。
  • 当鼠标悬停在某个导航项上时,调用 handleMouseEnter 方法更新 activeIndex;鼠标移开时,调用 handleMouseLeave 方法将 activeIndex 重置为 null。
  • CSS 部分定义了导航栏的基本样式以及激活状态下的样式。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表