响应式导航栏不会做?看我一分钟学会制作导航栏!

引言

       随着互联网技术的飞速发展,用户体验在网页设计中的重要性日益凸显。其中,导航栏作为网页的“指南针”,不仅能帮助用户快速定位所需内容,还能体现网站的整体风格和设计理念。本文将介绍如何使用HTML、CSS和JavaScript制作一个响应式导航栏,以适应不同屏幕尺寸,并提供优雅的用户体验。

一、导航栏的HTML结构

       首先,我们需要构建导航栏的HTML骨架。这个导航栏包括一个Logo、一个菜单图标(用于在小屏幕上展开导航栏)、导航链接、搜索框和登录注册按钮。

创建一个名为 index.html的页面文件

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>导航栏</title>
    <link rel="stylesheet" href="styles.css">
</head>

<body>
    <div class="navbar" id="nav">
        <div class="logo">saycode.cn</div>
        <div class="menu-icon" id="menuIcon">
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </div>
        <ul id="navbarMenu">
            <li><a href="#">首页</a></li>
            <li><a href="#">我的教程</a></li>
            <li><a href="#">我的创意</a></li>
            <div class="search-box">
                <input type="text" placeholder="Search...">
            </div>
            <div class="buttons">
                <button class="login">登录</button>
                <button class="register">注册</button>
            </div>
        </ul>
    </div>
    <script src="script.js"></script>
</body>

</html>

二、导航栏的CSS样式

       接下来,我们使用CSS为导航栏添加样式。通过设置display: flex;,我们可以轻松实现导航栏元素的水平排列。同时,我们为不同元素定义了不同的样式,如Logo的字体大小和颜色、导航链接的悬停效果等。

创建一个名为 styles.css 样式文件

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
  font-family: Arial, sans-serif;
  background-color: #ffe7df;
}

.navbar {
  background-color: #ffffff;
  color: #fff;
  padding: 10px 40px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.logo {
  font-size: 24px;
  font-weight: bold;
  color: #232c53;
}

.navbar ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  display: flex;
  align-items: center;
}

.navbar li {
  position: relative;
  margin-right: 15px;
}

.navbar li a {
  color: #777b91;
  text-decoration: none;
  padding: 10px;
}

.navbar li a:hover {
  color: #141e46;
}

.search-box {
  position: relative;
}

.search-box input {
  width: 200px;
  height: 30px;
  border: none;
  padding: 5px 10px;
  border-radius: 6px;
  background-color: #eff6f8;
}

.buttons {
  display: flex;
}

.buttons button {
  margin-left: 10px;
  padding: 5px 10px;
  border: none;
  cursor: pointer;
}

.login {
  color: #232c53;
  background-color: #fff;
}

.register {
  color: #fff;
  background-color: #232c53;
  border-radius: 10px;
}

三、响应式设计

       为了使导航栏在不同屏幕上都能良好地显示,我们使用了媒体查询(Media Query)。当屏幕宽度小于768px时,我们将隐藏导航链接、搜索框和按钮,并显示一个菜单图标。当用户点击该图标时,导航栏将展开显示所有元素。

/* 添加响应式设计的样式 */
@media screen and (max-width: 768px) {
  .navbar {
    position: relative;
    padding: 10px 10px;
  }

  /* 在小屏幕上隐藏导航栏和搜索框等 */
  .navbar ul,
  .search-box,
  .buttons {
    display: none;
  }

  /* 显示汉堡式图标 */
  .navbar .menu-icon {
    display: block;
    position: relative;
    width: 30px;
    height: 20px;
    cursor: pointer;
  }

  .navbar .menu-icon span {
    display: block;
    position: absolute;
    height: 4px;
    width: 100%;
    background: #232c53;
    border-radius: 4px;
    opacity: 1;
    left: 0;
    transform: rotate(0deg);
    transition: 0.25s ease-in-out;
  }

  .navbar .menu-icon span:nth-child(1) {
    top: 0px;
  }

  .navbar .menu-icon span:nth-child(2),
  .navbar .menu-icon span:nth-child(3) {
    top: 10px;
  }

  .navbar .menu-icon span:nth-child(4) {
    top: 20px;
  }

  /* 菜单展开时的样式 */
  .navbar.open .menu-icon span:nth-child(1) {
    top: 18px;
    width: 0%;
    left: 50%;
  }

  .navbar.open .menu-icon span:nth-child(2) {
    transform: rotate(45deg);
  }

  .navbar.open .menu-icon span:nth-child(3) {
    transform: rotate(-45deg);
  }

  .navbar.open .menu-icon span:nth-child(4) {
    top: 18px;
    width: 0%;
    left: 50%;
  }

  /* 展开菜单时的导航栏样式 */
  .navbar.open ul {
    display: flex;
    flex-direction: column;
  }

  .navbar.open .search-box,
  .navbar.open .buttons {
    display: block;
  }

  .search-box,
  .buttons {
    display: block;
  }

  #navbarMenu {
    width: 100%;
    flex-direction: column;
    gap: 10px;
    padding: 10px 0;
    background-color: #ffffff;
    border-radius: 10px;
    position: absolute;
    left: 0;
    bottom: -200px;
    text-align: center;
  }

  #navbarMenu li a {
    font-size: 20px;
  }
}

四、JavaScript交互

最后,我们使用JavaScript为菜单图标添加点击事件。当用户点击图标时,我们将为导航栏添加一个open类,以改变其样式并显示隐藏的元素。

创建一个名为 script.js 文件

document.getElementById('menuIcon').addEventListener('click', function () {  
    var navbar = document.getElementById('nav');  
    navbar.classList.toggle('open');  
});

五、效果展示

 查看小红薯更多精彩内容  查看小红薯更多精彩内容

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.16 LeetCode总结(基本算法)动态规划2

70. 爬楼梯 首先想到的是递归&#xff1a; // 递归 int climbStairs(int n) {if (n 1) {return 1;} else if (n 2) {return 2;}return climbStairs(n - 1) climbStairs(n - 2); }我们先来看看这个递归的时间复杂度吧&#xff1a; 递归时间复杂度 解决一个子问题时间*子问…

【翻译】再见, Clean Code!

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 【翻译】再见, Clean Code!正文那是一个深夜次日早晨这只是一个阶段 【翻译】再见…

【植物大战僵尸融合机器学习】+源码

上期回顾&#xff1a; 今天给大家推荐一个Gtihub开源项目&#xff1a;PythonPlantsVsZombies&#xff0c;翻译成中就是植物大战僵尸。 《植物大战僵尸》是一款极富策略性的小游戏。可怕的僵尸即将入侵&#xff0c;每种僵尸都有不同的特点&#xff0c;例如铁桶僵尸拥有极强的抗…

【设计模式学习】单例模式和工厂模式

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

Java-博客系统(前后端交互)

目录 前言 博客系统基本情况 1 创建项目&#xff0c;引入依赖 2 数据库设计 2.1 分析 2.2 建库建表 3 封装数据库 3.1 在java目录下创建DBUtil类&#xff0c;通过这个类对数据库进行封装 3.2 在java目录下创建实体类&#xff08;博客类Blog&#xff09; 3.2 在java目录下创建…

vwmare+Ubuntu20.04安装超级保姆级完整教程

强烈建议先完整的看完一遍教程在进行安装以免出现问题&#xff01;&#xff01;&#xff01; 如果遇到error&#xff1a;建议复制error后面的信息然后到浏览器搜索&#xff0c;查找解决方案&#xff0c;其次在进行某个不确定的操作时&#xff0c;建议先保存快照&#xff0c;这样…

uboot操作指令1

文章目录 前言一、信息查询命令1.bdinfo用于查看板子的信息2.printenv 打印环境变量3.version查看uboot版本 二、环境变量操作命令1.setenv修改环境变量2.setenv新建环境变量3.setenv删除环境变量 三、内存操作命令1.md 命令2.nm命令3.mm命令4.mw命令 四、网络操作命令1.ping命…

Zookeeper与kafka

目录 一、zookeeper 1.1.zookeeper概述 1.2.Zookeeper 工作机制 1.3. Zookeeper 特点 1.4.Zookeeper 数据结构 1.5.Zookeeper 应用场景 1.6.Zookeeper 选举机制 第一次启动选举机制 非第一次启动选举机制 选举Leader规则&#xff1a; 1.7.部署 Zookeeper 集群 1.7.…

AI人工智能讲师大模型培训讲师叶梓 大语言模型(LLM)在科学文献摘要领域的应用

大语言模型&#xff08;LLM&#xff09;在科学文献摘要领域的应用是一个前沿且迅速发展的技术趋势。通过结合GitHub上yobibyte的Compressor项目&#xff0c;我们可以深入探讨这一技术方案的潜力和实现方式。 技术背景 随着科学研究的快速发展&#xff0c;每天都有大量的科学文…

matlab学习(三)(4.9-4.15)

一、空域里LSB算法的原理 1.原理&#xff1a; LSB算法通过替换图像像素的最低位来嵌入信息。这些被替换的LSB序列可以是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。 2.实现步骤&#xff1a; &#xff08;1&#xff09;将图像文件中的所有像素点以RGB形…

服务器数据恢复—ext3文件系统下raid5数据恢复案例

服务器数据恢复环境&故障情况&#xff1a; 某企业光纤存储上有一组由16块硬盘组建的raid5阵列。管理员发现该光纤存储上的卷无法挂载&#xff0c;经过检查发现raid5阵列中有2块硬盘离线&#xff0c;于是联系我们数据恢复中心要求数据恢复工程师到现场恢复服务器存储上的数据…

【可能是全网最丝滑的LangChain教程】七、LCEL表达式语言

系列文章地址 【可能是全网最丝滑的LangChain教程】一、LangChain介绍-CSDN博客 【可能是全网最丝滑的LangChain教程】二、LangChain安装-CSDN博客 【可能是全网最丝滑的LangChain教程】三、快速入门LLM Chain-CSDN博客 【可能是全网最丝滑的LangChain教程】四、快速入门Re…

在js中计算两个时间段重叠的时长问题

文章目录 前言一、过程分析二、实现代码(js)总结 前言 最近遇到一个需求&#xff0c;就是在js中计算两段时间的重叠时长问题&#xff0c;这里记录一下。 一、过程分析 两段时间的重叠问题&#xff0c;一般有3中情况 两段时间完全无重叠&#xff0c;也就是无任何交集两段时间…

软考中级--网络工程师-计算机基础与理论第二节无线基础知识

IEEE802.11 规定了多种 WLAN 通信标准&#xff0c;其中&#xff08; &#xff09;与其他标准采用的频段不同&#xff0c;因而不能兼容。 A IEEE802.11a B IEEE802.11b C IEEE802.11g D IEEE802.11n 试题答案 正确答案&#xff1a; A 答案解析 IEEE 802.11a规定采用5GHz的 ISM频…

007Node.js安装自启动工具supervisor运行js文件

在vscode中&#xff0c;某些运行中的程序修改xx.js文件后&#xff0c;通过CtrlC终止再重新运行。supervisor是自启动工具&#xff0c;会不停的查看你的文件&#xff0c;一旦发现有修改&#xff0c;就立马重新载入运行。 我们可以通过安装supervisor代替node命令运行xx.js。终端…

环境变量与进程优先级

目录 进程的优先级 什么是优先级 为什么要有优先级 linux的优先级特点和查看方式 其他概念 环境变量 命令行参数 环境变量 查看环境变量方法 修改PATH 其他环境变量 进程的优先级 什么是优先级 优先级&#xff1a;指定进程获得某种资源的先后顺序。&#xff08;优先级…

Python数据分析案例40——电商直播间成交金额预测

承接上一篇案例电商直播间提取的特征&#xff0c;进而做一篇机器学习的案例&#xff0c;来预测直播间的成交金额。 Python数据分析案例39——电商直播间评论可视化分析&#xff08;LDA&#xff09; 1. 引言 1.1 直播电商与传统电商的比较 直播电商作为一种新兴的电子商务模式…

c语言中<string.h>的strstr与strtok函数

c语言中string.h的strstr与strtok函数 代码运行结果 代码 #include <stdio.h> #include <string.h>///1.在字符串str1里面,查找第一次出现str2的位置 //char * strstr(const char * str1,const char * str2)///2.sep为分割符,根据分割符来对str进行分割 //char * …

【WEEK7】 【DAY5】JDBC—PreparedStatement Object【English Version】

2024.4.12 Friday Following 【WEEK7】 【DAY4】JDBC—Statement Object【English Version】 Contents 10.3.PreparedStatement Object10.3.1.PreparedStatement can prevent SQL injection, more efficient than statement10.3.2. Insertion10.3.3. Deletion10.3.4. Update10.…

Windows版PHP7.4.9解压直用(免安装-绿色-项目打包直接使用)

安装版和解压版 区别 安装版: 安装方便&#xff0c;下一步------下一步就OK了&#xff0c;但重装系统更换环境又要重新来一遍&#xff0c;会特别麻烦解压版&#xff08;推荐&#xff09;&#xff1a; 这种方式&#xff08;项目打包特别方便&#xff09;能更深了解mysql的配置&…