利用js编写响应式侧边栏

yizhihongxing

下面是利用JS编写响应式侧边栏的完整攻略:

1. 前言

响应式设计的出现,使得我们可以为不同的屏幕尺寸和设备类型提供不同的布局和用户体验。而一个好的响应式设计在移动设备上需要具备友好的菜单导航,侧边栏便是其中一种常见的解决方案。通过JS编写响应式侧边栏可以实现菜单栏的自适应和开关功能,并能提高用户的交互体验。

2. 整体思路

  • 编写HTML结构
  • 利用CSS设置侧边栏的样式
  • 通过JS实现侧边栏的开关功能

3. HTML结构

首先,我们需要编写HTML结构,实现侧边栏的容器和内容。可以使用如下代码:

<div class="container">
  <header>
    <h1>Welcome to my site</h1>
    <button class="toggle-nav" aria-expanded="false" aria-label="Toggle navigation">
      <span class="icon"></span>
    </button>
  </header>

  <nav class="nav">
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>

  <main>
    <p>Here is the main content of the page.</p>
  </main>
</div>

其中,header里包含了网站的标题和侧边栏开关按钮,nav内为侧边栏的菜单列表,main为网页主要内容。

4. CSS样式

接下来,我们需要设置CSS样式,使得侧边栏能够正确显示并实现响应式布局。可以使用如下代码:

.container {
  display: flex;
  flex-wrap: wrap;
}

header {
  background-color: #333;
  color: #fff;
  width: 100%;
  display: flex;
  justify-content: space-between;
  padding: 1rem;
  align-items: center;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 999;
}

h1 {
  font-size: 1.5rem;
  margin: 0;
}

nav {
  width: 100%;
  transform: translateX(-100%);
  transition: transform 0.3s ease-in-out;
  position: fixed;
  top: 0;
  left: 0;
  height: 100%;
  z-index: 998;
  background-color: #ddd;
  padding: 2rem;
  overflow-y: auto;
}

nav ul {
  list-style-type: none;
  margin: 0;
}

nav li {
  margin-bottom: 1rem;
}

nav a {
  color: #333;
  text-decoration: none;
  font-weight: bold;
  font-size: 1.2rem;
}

main {
  flex: 1;
  padding: 2rem;
  margin-left: auto;
  margin-right: auto;
  max-width: 80%;
}

其中,我们将header设置为顶部固定定位,为侧边栏开关按钮设置样式,并且将nav设置为左侧侧边栏,通过transform进行平移,完成开关的功能。

5. JS代码

最后,我们需要编写JS代码,实现响应式侧边栏的自适应和开关功能。可以使用如下代码:

const nav = document.querySelector('nav');
const toggleBtn = document.querySelector('.toggle-nav');

toggleBtn.addEventListener('click', function () {
  const open = JSON.parse(toggleBtn.getAttribute('aria-expanded'));
  toggleBtn.setAttribute('aria-expanded', !open);
  nav.style.transform = open ? 'translateX(-100%)' : 'translateX(0)';
});

window.addEventListener('resize', function () {
  if (window.innerWidth > 768) {
    nav.style.transform = 'translateX(0)';
    toggleBtn.setAttribute('aria-expanded', false);
  }
});

其中,我们首先获取到nav和开关按钮。然后为开关按钮添加‘click’事件,通过解析aria-expanded属性判断当前侧边栏是否为打开状态。在点击事件中改变aria-expanded属性的值,并改变navtransform属性值,完成侧边栏的开关。并且添加了windowresize事件,使得在窗口大小改变时能够自动调整侧边栏的状态。

6. 示例1

<head>标签内引入上述的CSS、JS文件。然后,将以上HTML结构拷贝到一个HTML文件中,即可看到一个响应式侧边栏的示例效果。示例页面代码如下:

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Responsive Sidebar with JavaScript</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  <div class="container">
    <header>
      <h1>Welcome to my site</h1>
      <button class="toggle-nav" aria-expanded="false" aria-label="Toggle navigation">
        <span class="icon"></span>
      </button>
    </header>

    <nav class="nav">
      <ul>
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Contact</a></li>
      </ul>
    </nav>

    <main>
      <p>Here is the main content of the page.</p>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque interdum mi ac libero malesuada,
        aliquam faucibus quam sollicitudin. Integer eget purus euismod, dapibus ipsum eu, finibus urna. Aenean eget
        ornare est. Mauris eu orci sit amet justo faucibus tincidunt sed in nibh. Aliquam vestibulum quam sed
        mauris rhoncus rhoncus. Sed laoreet imperdiet elementum. Donec eget posuere eros, ac tempus urna. Donec
        commodo magna bibendum sapien tempus, lacinia sagittis ipsum molestie. Proin vel blandit nisi, sed aliquet
        justo. Nullam ac velit molestie, suscipit libero eu, fringilla odio. Sed vitae mi sed libero fringilla
        molestie quis eu orci. Suspendisse aliquet, massa ut accumsan molestie, dui nisi iaculis sapien, non pretium
        elit risus id dolor. Nam consectetur porttitor sapien vel tincidunt.</p>
    </main>
  </div>

  <script src="script.js"></script>
</body>

</html>

7. 示例2

为了进一步说明如何自定义样式和调整参数,我们修改一下原有的CSS和JS代码,然后对示例页面进行调整。

CSS代码修改如下:

header {
  background-color: #f8f8f8;
  color: #333;
}

nav {
  background-color: #4CAF50;
  padding: 2rem;
}

nav a {
  color: #fff;
  font-size: 1.5rem;
  font-weight: normal;
  text-transform: capitalize;
}

main {
  max-width: 100%;
}

JS代码修改如下:

const nav = document.querySelector('nav');
const toggleBtn = document.querySelector('.toggle-nav');

toggleBtn.addEventListener('click', function () {
  const open = JSON.parse(toggleBtn.getAttribute('aria-expanded'));
  toggleBtn.setAttribute('aria-expanded', !open);
  nav.style.transform = open ? 'translateX(-100%)' : 'translateX(-50%)';
});

window.addEventListener('resize', function () {
  if (window.innerWidth > 768) {
    nav.style.transform = 'translateX(-50%)';
    toggleBtn.setAttribute('aria-expanded', false);
  }
});

我们修改了侧边栏的背景色、字体颜色和大小,修改了主内容区域的最大宽度,同时将快速菜单的显示位置也进行了调整。

示例页面代码如下:

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Responsive Sidebar with JavaScript</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  <div class="container">
    <header>
      <h1>Welcome to my site</h1>
      <nav class="nav">
        <ul>
          <li><a href="#">Home</a></li>
          <li><a href="#">About</a></li>
          <li><a href="#">Contact</a></li>
        </ul>
      </nav>
      <button class="toggle-nav" aria-expanded="false" aria-label="Toggle navigation">
        <span class="icon"></span>
      </button>
    </header>
    <main>
      <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque interdum mi ac libero malesuada,
      aliquam faucibus quam sollicitudin. Integer eget purus euismod, dapibus ipsum eu, finibus urna. Aenean eget ornare est.
      </p>
      <p>
      Mauris eu orci sit amet justo faucibus tincidunt sed in nibh. Aliquam vestibulum quam sed mauris rhoncus rhoncus.
      Sed laoreet imperdiet elementum. Donec eget posuere eros, ac tempus urna. Donec commodo magna bibendum sapien tempus,
      lacinia sagittis ipsum molestie.
      </p>
      <p>
      Nullam ac velit molestie, suscipit libero eu, fringilla odio. Sed vitae mi sed libero fringilla molestie quis eu orci.
      Suspendisse aliquet, massa ut accumsan molestie, dui nisi iaculis sapien, non pretium elit risus id dolor.
      Nam consectetur porttitor sapien vel tincidunt.
      </p>
    </main>
  </div>
  <script src="script.js"></script>
</body>

</html>

结论

本文中,我们介绍了通过JS编写响应式侧边栏的完整攻略,包括HTML结构、CSS样式、JS代码的实现过程,并进行了两个示例的说明。了解这些内容,我们就可以按照自己的需求,自定义侧边栏的样式和调整参数,实现一个适合自己网页风格和品牌的响应式侧边栏。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用js编写响应式侧边栏 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 使用Loader.css和css-spinners来制作加载动画的方法

    制作加载动画是很多网站开发者必须面对的一个问题。Loader.css和css-spinners是两个可以用于制作加载动画的CSS库。下面是使用这两个库制作加载动画的完整攻略。 步骤1:引入CSS库文件 首先,我们需要将Loader.css和css-spinners的CSS文件引入到HTML文件中: <link rel="stylesheet&…

    css 2023年6月9日
    00
  • 在vue-cli中使用css-loader实现css module

    在vue-cli中使用css-loader实现css module 需要根据以下步骤进行操作: 1. 安装依赖项 在使用 css-loader 实现 css module 前,我们需要先安装依赖项,命令如下: npm install –save-dev css-loader 2. 修改 vue.config.js 配置文件 在根目录下创建 vue.conf…

    css 2023年6月9日
    00
  • HTML5离线应用与客户端存储的实现

    HTML5离线应用的目的是为了保证用户能在没有网络连接的情况下,也能够访问网站的内容。实现HTML5离线应用需要使用离线缓存机制,离线缓存机制能够将网站的完整内容缓存到用户本地,并且在没有网络连接时展示缓存的内容。 HTML5的客户端存储主要有两种方式:localStorage 和 sessionStorage。localStorage 是一种持久化的本地存…

    css 2023年6月9日
    00
  • CSS教程:可扩展圆角标签的实现方法

    当然,我可以为你提供对于“CSS教程:可扩展圆角标签的实现方法”的完整攻略。 CSS教程:可扩展圆角标签的实现方法 什么是可扩展圆角标签? 可扩展标签是一种受CSS属性控制而具有动态大小和形状的HTML元素。在本教程中,我们使用的可扩展标签是具有圆角边框的矩形。 如何实现可扩展圆角标签? 要实现可扩展圆角标签,我们需要使用CSS中的border-radius…

    css 2023年6月9日
    00
  • css3实现圆锥渐变conic-gradient效果

    现在我将为您详细讲解如何实现“css3实现圆锥渐变conic-gradient效果”的完整攻略。 简介 CSS3提供了一个很有用的圆锥渐变函数conic-gradient(),让我们可以非常方便地实现环形、扇形、斜向等多种形态的渐变效果。这个函数的使用方式和线性渐变函数linear-gradient()和径向渐变函数radial-gradient()相似,只…

    css 2023年6月11日
    00
  • 浅谈CSS响应式图片运用中的srcset属性

    下面是详细讲解关于“浅谈CSS响应式图片运用中的srcset属性”的完整攻略以及两个示例说明。 什么是响应式图片 响应式图片是指在不同设备上,自动调整图片大小以适应不同的屏幕和分辨率,从而提高用户体验和页面性能。网站设计师和开发人员可以使用响应式图片来根据设备屏幕大小和分辨率的不同,为不同的用户提供可视化的体验。 srcset 属性的运用 srcset 属性…

    css 2023年6月10日
    00
  • HTML 无序列表项目符号使用图片的CSS写法

    要使用图片作为HTML无序列表的项目符号,需要使用CSS的list-style-type属性以及background-image属性来实现。 具体步骤如下: 选择一个符合要求的图片作为无序列表项目符号。 在CSS文件中设置ul或ol的list-style-type属性为none,取消默认的项目符号。 针对每个项目单独设置background-image属性,…

    css 2023年6月10日
    00
  • CSS中:before和:after伪元素使用的奇技淫巧

    下面是CSS中:before和:after伪元素使用的奇技淫巧的完整攻略。 什么是:before和:after伪元素 在CSS中,有两个伪元素:before和:after。它们可以在一个元素之前或之后插入一些内容,而这些内容是由CSS来定义的。这些伪元素可以被用来实现很多有趣的效果,如图标、装饰性的线条、制作更好的复选框/单选框等等。 如何使用:before…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部