0

0

使用滑动侧导航菜单创建响应式设计

WBOY

WBOY

发布时间:2023-09-16 16:57:03

|

1374人浏览过

|

来源于php中文网

原创

使用滑动侧导航菜单创建响应式设计

在本教程中,您将使用 JavaScript 和 CSS 创建可扩展的侧面导航菜单。最终产品如下图所示:

1. 创建标记

首先,让我们为侧边菜单添加一些标记:

<div id="sideNavigation" class="sidenav">
  <a href="#" class="close-btn">&times;</a>
  <a href="#">About</a>
  <a href="#">Features</a>
  <a href="#">Contact Us</a>
</div>
 
<nav class="topnav">
  <a href="#" class="ham-icon">
    <svg width="30" height="30" id="icoOpen">
        <path d="M0,5 30,5" stroke="#000" stroke-width="5"/>
        <path d="M0,14 30,14" stroke="#000" stroke-width="5"/>
        <path d="M0,23 30,23" stroke="#000" stroke-width="5"/>
    </svg>
  </a>
</nav>
 
<section id="main">
  <h1>This Side Navigation Menu Looks Good!</h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</section>

在这里你可以看到我们使用sidenav类创建了一个侧边菜单div。接下来,我们通过 <nav> 标签添加了实际的顶部栏导航,并且我们使用 SVG 作为侧面菜单图标。

请记住将网站的所有内容放入 div id="main" 容器中,以便它向右滑动。

2. 编写 JavaScript 代码

接下来,让我们添加 JavaScript,该 JavaScript 将使用 ham-icon 类侦听汉堡包图标上的单击事件,以及侧面导航菜单滑到屏幕上后出现的关闭按钮。

document.querySelector("a.ham-icon").addEventListener("click", function(event){
  document.getElementById("sideNavigation").style.width = "250px";
  document.getElementById("main").style.marginLeft = "250px";
});

document.querySelector("a.close-btn").addEventListener("click", function(event){
  document.getElementById("sideNavigation").style.width = "0";
  document.getElementById("main").style.marginLeft = "0";
});

单击汉堡包图标应该会显示侧面导航。我们通过将导航的宽度设置为 250px 并同时向主网站内容添加 250px 的左边距来实现此目的。

单击关闭按钮应该会隐藏侧面导航。为此,我们将导航的宽度更改回 0,同时将主网站内容的左边距设置为 0。

3. 使用 CSS 样式

最后,我们需要使用一些 CSS 来设置侧边菜单和链接的页面样式。 CSS 会将所有网页元素正确放置在我们想要的位置。我们还将在 transition 属性的帮助下应用一些简单的动画。让我们一次看一下 CSS 的一部分。

.sidenav {
  height: 100%;
  width: 0;
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  background-color: #111;
  overflow-x: hidden;
  padding-top: 4rem;
  transition: 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.28);
  font-family: "Bebas Neue";
}

.sidenav a {
  padding: 0.5rem 1rem;
  text-decoration: none;
  color: #bdbdbd;
  display: block;
  transition: 0.4s;
  white-space: nowrap;
  font-size: 2rem;
}

.sidenav a:hover {
  color: white;
  background: #9e9e9e;
}

我们将侧边导航的height设置为100%,并将其初始width设置为0以使其隐藏。但是,只有当 overflow-x 属性的值设置为 hidden 时,侧面导航的内容才会保持隐藏。

过渡属性可确保侧面导航宽度的变化不会突然发生,并且缓动功能使其具有一点弹性。

对于侧面导航内的链接,我们将 white-space 属性的值设置为 nowrap,以便菜单文本不会溢出多行。

NameGPT名称生成器
NameGPT名称生成器

免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

下载
.sidenav .close-btn {
  position: absolute;
  top: -1rem;
  right: 1rem;
  font-size: 5rem;
}

.sidenav .close-btn:hover {
  background: initial;
  transform: scale(1.2);
}

上面的 CSS 样式将我们的关闭按钮与侧面导航中的其他链接分开。我们对关闭按钮应用了绝对定位,并防止其背景在悬停时变成浅灰色。当用户将鼠标悬停在其上方时,它的大小还会放大 20%。

现在,以下 CSS 将通过使用相同的过渡持续时间和相同的缓动函数来确保主要内容位置的移动与导航菜单同步。将 overflow-x 属性的值设置为 hidden 可确保不会因内容移动而出现水平滚动条。

#main {
  transition: margin-left 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.28);
  padding: 20px;
  width: 100%;
}

body {
 overflow-x: hidden; 
}

我们还可以借助以下 CSS 为汉堡包图标添加一点旋转运动。它在 0.5 秒的时间内将汉堡包图标旋转 180 度。

a svg {
  transition: all 0.5s ease;
}
a svg:hover {
  transform: rotate(180deg);
}

最后,让我们通过使用以下 CSS 调整链接的间距和大小来使导航菜单具有响应能力。它确保菜单不会在垂直空间较小的屏幕上超出范围。

@media screen and (max-height: 480px) {
  .sidenav {
    padding-top: 3rem;
  }
  .sidenav a {
    font-size: 1.5rem;
  }
}

此时您的导航菜单应该类似于以下 CodePen 演示。

4. 移除幻灯片

要使菜单显示时没有幻灯片动画,只需更改 CSS 属性 transition,如下面的缩写形式所示:

.sidenav {
    transition: 0s; 
}

#main {
    transition: margin-left 0s;
}

这将使更改立即出现,因为 transition 中没有指定延迟。我们使用的默认值是 0.5s

结论

创建侧边菜单只需要几行代码,不需要使用很多资源。使代码能够响应不同的设备屏幕分辨率,只需通过针对特定情况添加媒体查询来修改 CSS。

为了更进一步,您可能希望使用 Bootstrap 或 Bulma 等 CSS 框架来设计菜单样式。

本文已根据 Monty Shokeen 的贡献进行了更新。 Monty 是一位全栈开发人员,他也喜欢编写教程和学习新的 JavaScript 库。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

448

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

overflow什么意思
overflow什么意思

overflow是一个用于控制元素溢出内容的属性,当元素的内容超出其指定的尺寸时,overflow属性可以决定如何处理这些溢出的内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1873

2024.08.15

css3transition
css3transition

css3transition属性用于指定如何从一个CSS样式过渡到另一个CSS样式,本专题为大家提供transition相关的文章、相关下载和相关课程,大家可以免费体验。

261

2023.06.27

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

chatgpt官网入口地址合集
chatgpt官网入口地址合集

本专题整合了chatgpt官网入口地址、使用教程等内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

minimax入口地址汇总
minimax入口地址汇总

本专题整合了minimax相关入口合集,阅读专题下面的文章了解更多详细地址。

4

2026.03.16

C++多线程并发控制与线程安全设计实践
C++多线程并发控制与线程安全设计实践

本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。

7

2026.03.16

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

114

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号