响应式布局2:手写响应式导航栏(BootStrap实现以及原生实现)

1.响应式导航栏介绍

响应式导航栏是一种在不同设备和屏幕尺寸下自适应布局和显示的导航栏。它可以根据用户所使用的设备(如桌面电脑、平板电脑或手机)自动调整其外观和交互方式,以提供更好的用户体验。

pc端:

手机端: 

2.BootStrap实现

最简单的方式是使用Bootstrap 框架,它提供了响应式的导航栏组件(Navbar),在电脑端显示为完整的导航栏,而在移动端则会以可展开的按钮形式呈现。

在 Bootstrap 中创建一个响应式导航栏,需要使用以下组件和类:

  1. <nav> 元素:用于定义导航栏的容器。
  2. .navbar 类:应用于 <nav> 元素,表示它是一个导航栏组件。
  3. .navbar-expand-* 类:用于控制导航栏在不同屏幕大小下的展开方式。* 可以是 sm(小屏幕)、md(中屏幕)、lg(大屏幕)或 xl(超大屏幕)。
  4. .navbar-toggler 类:用于创建导航栏的可展开按钮。
  5. .collapse 类:用于定义可折叠的导航栏内容。
  6. .navbar-collapse 类:应用于包含导航栏内容的容器,与 .collapse 类一起使用。

以下是一个示例代码,展示了如何使用 Bootstrap 创建一个响应式导航

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <title>Responsive Navbar</title>
</head>
<body>
<nav class="navbar navbar-expand-sm navbar-dark bg-dark">
  <a class="navbar-brand" href="#">Logo</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarContent">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarContent">
    <ul class="navbar-nav">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">About</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Services</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Contact</a>
      </li>
    </ul>
  </div>
</nav>

<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

效果:

3. 原生基于Flex布局实现

这里使用了@media来查询媒体的最大宽度,并以此改变样式,再使用flex弹性布局实现响应式导航栏:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        /* 全局样式 */
        body {
            margin: 0;
            padding: 0;
            font-family: Arial, sans-serif;
        }

        /* 导航栏样式 */
        .navbar {
            display: flex;
            justify-content: space-between;
            align-items: center;
            background-color: #333;
            color: #fff;
            padding: 10px;
        }

        .navbar-brand {
            font-size: 1.5rem;
            color: #fff;
            text-decoration: none;
        }

        .nav-button {
            display: none;
            float: right;
        }

        .navbar-nav {
            display: flex;
            flex-flow: row wrap;
            list-style-type: none;
            margin: 0;
            padding: 0;
        }

        .nav-item {
            margin-left: 10px;
        }

        .nav-link {
            color: #fff;
            text-decoration: none;
        }

        /* 媒体查询 */
        @media (max-width: 768px) {
            .navbar {
                flex-flow: row wrap;
                justify-content: space-between;
            }

            .nav-button {
                width: 20%;
                display: block;
            }

            .navbar-brand {
                width: 80%;
            }

            .navbar-nav {
                display: flex;
                flex-direction: column;
                align-items: center;
                width: 100%;
            }

            .nav-item {
                margin: 10px 0 0 0;
            }
        }
    </style>
    <title>Responsive Navbar</title>
</head>
<body>
<nav class="navbar">
    <a class="navbar-brand" href="#">Logo</a>
    <button class="nav-button" onclick="show()">展开</button>
    <ul class="navbar-nav" id="navs">
        <li class="nav-item">
            <a class="nav-link" href="#">Home</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#">About</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#">Services</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#">Contact</a>
        </li>
    </ul>
</nav>
</body>
<script>
    const show = () =>{
        let navs = document.getElementById("navs");
        if(navs.style.display === "none"){
            navs.style.display = "flex";
        }else{
            navs.style.display = "none";
        }
    }
</script>
</html>

效果和bootstrap效果一样,就是按钮我只用了文字,没有加上icon

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

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

相关文章

如何打造自己的知识付费小程序平台

在当今知识付费的浪潮中&#xff0c;我们经常可以看到各种知识付费平台如雨后春笋般涌现。然而&#xff0c;这些平台往往只是一个过客&#xff0c;让我们短暂停留后&#xff0c;便淹没在信息的海洋中。如果你有一个出色的课程&#xff0c;为什么不让它在一个属于你自己的平台上…

TypeError: Cannot read properties of undefined (reading ‘row‘)原因及解决办法

TypeError: Cannot read properties of undefined (reading ‘row’) 这个错误表明 Vue 在渲染时试图读取未定义或空值的属性&#xff0c;导致无法访问到属性 ‘row’。需要加入插槽slot-scope“scope”

JVM-9-Class类文件的结构

Java技术能够一直保持着非常良好的向后兼容性&#xff0c;Class文件结构的稳定功不可没。 Class文件是一组以8个字节为基础单位的二进制流&#xff0c;各个数据项目严格按照顺序紧凑地排列在文件之中。 Class文件格式采用一种类似于C语言结构体的伪结构来存储数据&#xff0c…

如何用idm下载迅雷 2024最新详细解析

有许多小伙伴日常习惯用迅雷处理或者下载文件&#xff0c;对于普通用户&#xff0c;由于迅雷平台的限速&#xff0c;下载速度仅有几十kb。此外&#xff0c;还有一些小伙伴安装idm后软件界面是英文&#xff0c;那么如何用idm下载迅雷&#xff0c;idm怎么设置中文呢&#xff1f;今…

Nginx+keepalived实现高可用负载群集

实现方式 使用Nginx作为负载调度器&#xff0c;通过四层代理转发给web器处理请求&#xff0c;实现负载均衡&#xff1b; 在Nginx调度器上配置脚本监控&#xff08;健康检查&#xff09;&#xff0c;实现主备热备份&#xff0c;当主失效切换至备工作。 实验 实验准备 Web 服…

Linux 进程信号

文章目录 信号的概览信号的产生信号的处理信号集操作信号的捕捉补充与说明 信号的概览 信号由软件或硬件产生发送给进程&#xff0c;进程对其做相应处理。信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。 Linux下的全部信号由指令kill -l查询 Linux 下指令的…

SQL进阶理论篇(十):数据库中的锁

文章目录 简介按照锁的粒度进行划分从数据库管理的角度进行划分从程序员的角度进行划分为什么共享锁会发生死锁&#xff1f;参考文献 简介 索引和锁&#xff0c;是数据库中的两个核心知识点。 索引的相关知识点&#xff0c;在之前的几章里我们已经介绍的差不多了。接下来我们…

结构体基础例题

这里写目录标题 例题一例题解析答案 例题二例题解析答案 例题三例题解析答案 例题四例题解析答案 例题五例题解析及答案 例题六例题解析及答案 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978…

如何在大型Python项目中优雅地使用Dotenv

如何在大型Python项目中优雅地使用Dotenv 引言Dotenv的基本概念什么是Dotenv&#xff1f;Dotenv的工作原理如何在项目中使用Dotenv 环境变量与大型项目配置环境变量的重要性管理不同环境的配置使用Dotenv优化配置管理 Dotenv的高级应用动态配置与环境切换安全性和敏感数据管理与…

深入了解Linux信号:作用、产生、捕捉和阻塞

这里写目录标题 引言1. 信号的基本概念1.1 信号的分类和编号&#xff1a;1.2 查看信号默认处理动作1.3 信号的作用1.4 信号的产生1.4.1通过终端按键产生1.4.2通过系统函数向进程发信号1.4.3由软件条件产生信号1.4.4硬件异常产生信号 2. 常见信号及其作用SIGINT (2) - 中断信号&…

智慧水务系统解决了哪些问题

随着城市化进程的加快&#xff0c;水资源的日益紧缺和水环境问题的日益突出&#xff0c;传统的水务管理方式已经无法满足现代城市的需求。为了解决这些问题&#xff0c;智慧水务系统应运而生。 一、智慧水务系统概述 智慧水务系统是一种基于物联网、大数据、云计算等先进技术…

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 (多指标,多图)

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 &#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍…

前端检测字符串中是否含有特殊字符,并返回该特殊字符

一、判断字符串中是否含有特殊字符 const hasSpecicalCharacter (str) > {var regex /[!#$%^&*(),.?":{}|<>]/return regex.test(str) } //含有特殊字符返回true, 没有特殊字符返回false 二、判断字符串中是否含有特殊字符&#xff0c;并返回该特殊字符…

作业--day32

机械臂 #include <myhead.h>#define PORT 8888 #define IP "192.168.125.59"int main(int argc, const char *argv[]) {int sfd socket(AF_INET, SOCK_STREAM, 0);if(sfd -1){perror("socket error");return -1;}int reuse -1;if(setsockopt(sfd…

C# 调用腾讯混元大模型

写在前面 今天用C#调用了一下腾讯混元大模型&#xff0c;调用代码贴一下&#xff0c;具体的效果等深入使用后再来评价。 GitHub - TencentCloud/tencentcloud-sdk-dotnet: Tencent Cloud API 3.0 SDK for .NET 腾讯混元大模型简介_腾讯混元大模型购买指南_腾讯混元大模型操作…

等保测评主要保护哪些方面的安全?

等保测评是经公安部认证的具有资质的测评机构&#xff0c;依据国家信息安全等级保护规范规定&#xff0c;受有关单位委托&#xff0c;按照有关管理规范和技术标准&#xff0c;对信息系统安全等级保护状况进行检测评估的活动。那么企业做等保“保”的是什么呢&#xff1f; 等保主…

直播江湖:东方甄选与董宇辉的权力游戏

出品| 大力财经 文 | 魏力 近期&#xff0c;围绕东方甄选的小作文事件引起了广泛关注&#xff0c;有人将其解读为一场巧妙策划的事件营销&#xff0c;然而&#xff0c;舆情的不可控性使得事态逐渐演变为一场复杂的利益博弈。 东方甄选与董宇辉的“蜜月期”可以说是双方互相成就…

直流电、交流电和发电机、接地、变压器

直流电 此节内容主要摘录自&#xff1a;图文详解直流电与直流电路基本知识 直流电是指电流方向不随时间作周期性变化&#xff0c;由正极流向负极&#xff0c;但电流的大小可能会变化的电流。直流电可以分为稳定&#xff08;恒定&#xff09;直流和脉动直流两种&#xff0c;如下…

Re解析(正则表达式解析)

正则表达式基础 元字符 B站教学视频&#xff1a; 正则表达式元字符基本使用 量词 贪婪匹配和惰性匹配 惰性匹配如下两张图&#xff0c;而 .* 就表示贪婪匹配&#xff0c;即尽可能多的匹配到符合的字符串&#xff0c;如果使用贪婪匹配&#xff0c;那么结果就是图中的情况三 p…

ZKP Commitment (1)

MIT IAP 2023 Modern Zero Knowledge Cryptography课程笔记 Lecture 5: Commitment 1 (Ying Tong Lai) Overview: Modern SNARK IOP: Interactive Oracle ProofCommitment SchemeIOP “compiled by” the commitment scheme to get a non-interactive proofAn IOP is “inform…