如何制作伸缩侧边栏?

目录

一、html-body

二、CSS 

三、JS

四、完整代码

五、效果展示 


一、html-body

  侧边栏的伸缩需要用户触发事件,这里使用button为例,用户点击按钮实现侧边栏的打开和关闭。

<body><!-- 按钮,可以用文字、图片等作为事件源,我选用一张图片,你可以用简单的文字替换 --><button class="leftbar-btn" id="leftbar-btn" onclick="toggleNav()"><img src="../../../img/beijing-open.png" alt="点击打开教程"></button><!-- 左侧侧边栏 --><div class="leftbar" id="leftbar"><!-- 我这里放一个视频为例,你可以只放一个简单的<p></p> --><videoid="video-page1"class="video-page1"controlspreload="auto"poster="../../../img/cover.png"><source src="../../../img/video_test.webm" type="video/webm" /><source src="../../../img/video_test.mp4" type="video/mp4" /><p class="vjs-no-js">请更新您的浏览器版本</p></div>
</body>

二、CSS 

<style>body {font-family: 'Arial', sans-serif;margin: 0;padding: 0;background-image: url("../../../img/beijing-background.png");background-position: 50% 13%;}.leftbar-btn {position: fixed; /*设置按钮位置可变 */left: 0; top: 0; /*初始化按钮位置 */border: none;background: none;padding: 6px;transition: 1s; /*过渡效果,值需要与侧边栏的相同,以便紧挨移动*/}.leftbar-btn img { /*按钮中图片大小*/width: 77px;height: 77px;}.leftbar {width: 0; /*由于是左侧侧边栏,所以width先初始化为0*/height: 100%;position: fixed; /*设置按钮位置可变 */z-index: 1; /*设置堆叠顺序,侧边栏高于body*/top: 0; left: 0; /*初始化侧边栏位置 */background-color: rgba(255, 255, 255, 0.5);border-radius: 0px 8px 8px 0px;overflow-x: hidden; /*设置当内容溢出块级元素的左边缘和右边缘时显示的内容,溢出则隐藏*/transition: 1s; /*值需要与按钮的相同*/}.video-page1 {width: 100%;height: 50%;position: absolute;bottom: 10%;}
</style>

position: relative;position: absolute; 是 CSS 中两种不同的定位属性,它们在元素定位和布局上有着不同的作用。

  1. position: relative;

    • 当一个元素的 position 属性设置为 relative 时,它会相对于其正常位置进行定位。
    • 设置了 position: relative; 的元素仍然占据文档流中的位置,不会脱离文档流。
    • 如果对这个元素设置了 topbottomleftright 属性,则元素将相对于其自身的位置进行偏移,但不会影响其他元素的布局。
  2. position: absolute;

    • 当一个元素的 position 属性设置为 absolute 时,它会相对于最近的已定位祖先元素进行定位,如果没有已定位的祖先元素,则相对于最初的包含块(通常是 <html> 元素)进行定位。
    • 设置了 position: absolute; 的元素会脱离文档流,不再占据原来的位置,因此不会对其他元素的布局产生影响。
    • 对于 position: absolute; 元素,可以通过设置 topbottomleftright 属性来确定其在包含块中的位置,这些属性是相对于最近的已定位祖先元素的。

总的来说,position: relative; 会相对于自身的原始位置进行定位,而 position: absolute; 则会相对于最近的已定位祖先元素进行定位,如果没有已定位的祖先元素,则相对于最初的包含块进行定位。

三、JS

<script>//侧边栏打开时的widthvar leftbarWidth = "50%";function toggleNav() {//通过ID获取侧边栏、按钮、元素、视频元素var leftbar = document.getElementById("leftbar")var leftbarbtn = document.getElementById("leftbar-btn")var video = document.getElementById("video-page1"); //获取视频元素是为了实现关闭侧边栏时停止播放做准备//关闭侧边栏if (leftbar.style.width === leftbarWidth) {//如果侧边栏的宽度=我们设置的侧边栏的宽度leftbarWidthleftbar.style.width = "0";//设置侧边栏width=0leftbarbtn.innerHTML = '<img src="../../../img/beijing-open.png" alt="点击打开教程">'//切换按钮中的图片leftbarbtn.style.left = "0";//移动按钮video.pause();//实现视频暂停播放} else {//打开侧边栏leftbar.style.width = leftbarWidth;//设置侧边栏width=leftbarWidthleftbarbtn.innerHTML = '<img src="../../../img/beijing-close.png" alt="点击关闭">'//切换按钮中的图片leftbarbtn.style.left = leftbarWidth;//移动按钮}}
</script>

四、完整代码

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>伸缩侧边栏</title>
<style>body {font-family: 'Arial', sans-serif;margin: 0;padding: 0;background-image: url("../../../img/beijing-background.png");background-position: 50% 13%;}.leftbar-btn {position: fixed; /*设置按钮位置可变 */left: 0; top: 0; /*初始化按钮位置 */border: none;background: none;padding: 6px;transition: 1s; /*过渡效果,值需要与侧边栏的相同,以便紧挨移动*/}.leftbar-btn img { /*按钮中图片大小*/width: 77px;height: 77px;}.leftbar {width: 0; /*由于是左侧侧边栏,所以width先初始化为0*/height: 100%;position: fixed; /*设置按钮位置可变 */z-index: 1; /*设置堆叠顺序,侧边栏高于body*/top: 0; left: 0; /*初始化侧边栏位置 */background-color: rgba(255, 255, 255, 0.5);border-radius: 0px 8px 8px 0px;overflow-x: hidden; /*设置当内容溢出块级元素的左边缘和右边缘时显示的内容,溢出则隐藏*/transition: 1s; /*值需要与按钮的相同*/}.video-page1 {width: 100%;height: 50%;position: absolute;bottom: 10%;}
</style>
</head>
<body><!-- 按钮,可以用文字、图片等作为事件源,我选用一张图片,你可以用简单的文字替换 --><button class="leftbar-btn" id="leftbar-btn" onclick="toggleNav()"><img src="../../../img/beijing-open.png" alt="点击打开教程"></button><!-- 左侧侧边栏 --><div class="leftbar" id="leftbar"><!-- 我这里放一个视频为例,你可以只放一个简单的<p></p> --><videoid="video-page1"class="video-page1"controlspreload="auto"poster="../../../img/cover.png"><source src="../../../img/video_test.webm" type="video/webm" /><source src="../../../img/video_test.mp4" type="video/mp4" /><p class="vjs-no-js">请更新您的浏览器版本</p></div>
</body>
<script>//侧边栏打开时的widthvar leftbarWidth = "50%";function toggleNav() {//通过ID获取侧边栏、按钮、元素、视频元素var leftbar = document.getElementById("leftbar")var leftbarbtn = document.getElementById("leftbar-btn")var video = document.getElementById("video-page1"); //获取视频元素是为了实现关闭侧边栏时停止播放做准备//关闭侧边栏if (leftbar.style.width === leftbarWidth) {//如果侧边栏的宽度=我们设置的侧边栏的宽度leftbarWidthleftbar.style.width = "0";//设置侧边栏width=0leftbarbtn.innerHTML = '<img src="../../../img/beijing-open.png" alt="点击打开教程">'//切换按钮中的图片leftbarbtn.style.left = "0";//移动按钮video.pause();//实现视频暂停播放} else {//打开侧边栏leftbar.style.width = leftbarWidth;//设置侧边栏width=leftbarWidthleftbarbtn.innerHTML = '<img src="../../../img/beijing-close.png" alt="点击关闭">'//切换按钮中的图片leftbarbtn.style.left = leftbarWidth;//移动按钮}}
</script>
</html>

五、效果展示 

伸缩侧边栏

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript编程】前端如何实现局部打印(精确打印)

在前端开发中实现精确打印控制&#xff08;局部打印&#xff09;&#xff0c;可以通过以下几种方式&#xff1a; 一、使用window.print()和id选择器 将需要打印的内容包裹在一个容器内&#xff0c;比如一个<div>标签&#xff0c;并为该容器设置一个ID。 <div id&quo…

三个js算法

① 冒泡排序   作为最简单的排序算法之一&#xff0c;冒泡排序给我的感觉就像Abandon在单词书里出现的感觉一样&#xff0c;每次都在第一页第一位&#xff0c;所以最熟悉。冒泡排序还有一种优化算法&#xff0c;就是立一个flag&#xff0c;当在一趟序列遍历中元素没有发生交换…

027-033前缀和

027-033前缀和 核心思想:前缀和-->快速得到某段连续区间的结果 方法:初始化dp数组 前缀和哈希表 dp[i][j] dp[i-1][j]dp[i][j-1]arr[i][j]-dp[i-1][j-1]; 求dp[i][j] dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] dp[x1-1][y1-1] (x1,y1)>(x2,y2) DP34 【模板】一维前…

十三.youyiku分析案例(数分)

目录 youyiku分析案例(数分) 大框操作 1.销售情况随着时间的变化 2.不同产品的销量 柱状图(bar)改颜色排序 seaborn库(柱) --排序 3.每个城市的人喜欢的购物方式 4-不同年龄段的购物方式 添加标签段及值 --创建新表 对标签分别计算 绘图分析 youyiku分析案例(数分…

OpemMP 同步结构

为了说明同步&#xff0c;我们先来看如下多线程加法的问题&#xff0c;假设x初值为0&#xff1a; THREAD 1: THREAD 2: High level code increment(x) {x x 1&#xff1b;} increment(x) {x x 1;} Assembly LOAD A, (x address) ADD A, 1 STORE A, (x address) LOAD…

session反序列化漏洞2——ctfshow web263

题目链接 https://ctf.show/challenges#web263-723 解题思路 进去先是一个登录框 目录扫描一下发现存在源码泄露 查看源码 index.php error_reporting(0);session_start();//超过5次禁止登陆if(isset($_SESSION[limit])){$_SESSION[limti]>5?die("登陆失败次数超…

Centos7.9 无法启动 提示Entering emergency mode

前言 由于更换内存条&#xff0c;导致电脑运行时蓝屏直接断电导致启动不了 正文 输入命令当出现done时再重启就解决了 xfs_repair -v -L /dev/dm-0

智过网:中级安全工程师一年能挣多少钱?工资高吗?

中级安全工程师的年收入是广大从业者非常关心的问题。毕竟&#xff0c;了解自己所处行业的薪资水平&#xff0c;不仅有助于规划个人职业发展&#xff0c;还能为日常生活中的决策提供重要参考。那么&#xff0c;中级安全工程师一年究竟能挣多少钱呢&#xff1f;工资又是否算高呢…

[leetcode] 100. 相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&a…

YOLOV5训练自己的数据集教程(万字整理,实现0-1)

文章目录 一、YOLOV5下载地址 二、版本及配置说明 三、初步测试 四、制作自己的数据集及转txt格式 1、数据集要求 2、下载labelme 3、安装依赖库 4、labelme操作 五、.json转txt、.xml转txt 六、修改配置文件 1、coco128.yaml->ddjc_parameter.yaml 2、yolov5x.…

设计模式(10):享元模式

一.核心&#xff1a; 享元模式以共享的方式高效地支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。 内部状态&#xff1a; 可以共享&#xff0c;不会随环境变化而改变。外部状态&#xff1a; 不可以共享&#xff0c;会随环境变化而改变。 二…

第1章.提示词:开启AI智慧之门的钥匙

什么是提示词&#xff1f; 提示词&#xff0c;是引导语言模型的指令&#xff0c;让用户能够驾驭模型的输出&#xff0c;确保生成的文本符合需求。 ChatGPT&#xff0c;这位文字界的艺术大师&#xff0c;以transformer架构为基石&#xff0c;能轻松驾驭海量数据&#xff0c;编织…

嵌入式第一部分-第一集:ARM那些你得知道的事

ARM&#xff1a;Advanced RISC Machine&#xff0c;先进精简指令集机器 ARM公司只做设计&#xff0c;不生产。 国内IC生产厂商&#xff1a;华为海思、全志、瑞芯微、MTK&#xff08;联发科&#xff09; 扩展&#xff1a;ARM的商业模式了解。 使用三星S5PV210开发板进行视频的讲…

大数据 - Hadoop系列《五》- HDFS文件块大小及小文件问题

系列文章&#xff1a; 大数据- Hadoop入门-CSDN博客 大数据 - Hadoop系列《二》- Hadoop组成-CSDN博客 大数据 - Hadoop系列《三》- HDFS&#xff08;分布式文件系统&#xff09;概述_大量小文件的存储使用什么分布式文件系统-CSDN博客 大数据 - Hadoop系列《三》- MapRedu…

LeetCode算法——数组/字符串篇

对刷过的算法进行总结&#xff0c;所用解法都是最符合我个人逻辑的&#xff0c;以后再刷的话就看这篇帖子了 # 代码随想录——数组理论基础 首先要知道数组在内存中的存储方式&#xff0c;这样才能真正理解数组相关的面试题 数组是存放在连续内存空间上的相同类型数据的集合 …

IntelliJ IDEA 2023 for Mac 好用的Java开发工具

IntelliJ IDEA 2023是一款由JetBrains开发的强大的集成开发环境&#xff08;IDE&#xff09;软件&#xff0c;适用于多个编程语言。它旨在提高开发人员的生产力和代码质量&#xff0c;具有以下多种特色功能&#xff1a; 软件下载&#xff1a;IntelliJ IDEA 2023 v2023.3.6中文激…

2d导入人物素材进行分割后设置图层

1、设置分辨率大小 2、相机调整大小&#xff0c;要符合场景 3、选择2D sprite 编辑器 或者 点击这个也行 4、分割图像 5、设置过滤模式 6、图层设置

CAJViewer8.1下载地址及安装教程

CAJViewer是中国学术期刊&#xff08;CAJ&#xff09;全文数据库的专用阅读软件。CAJViewer是中国知识资源总库&#xff08;CNKI&#xff09;开发的一款软件&#xff0c;旨在方便用户在线阅读和下载CAJ数据库中的学术论文、期刊和会议论文等文献资源。 CAJViewer具有直观的界面…

vue render 函数详解 (配参数详解)

vue render 函数详解 (配参数详解) 在 Vue 3 中&#xff0c;render 函数被用来代替 Vue 2 中的模板语法。 它接收一个 h 函数&#xff08;或者是 createElement 函数的别名&#xff09;&#xff0c;并且返回一个虚拟 DOM。 render 函数的语法结构如下&#xff1a; render(h) …

Modbus协议介绍

Modbus存储区 从机存储数据&#xff0c;那么肯定要有一个存储区&#xff0c;那就需要文件操作&#xff0c;我们都知道这文件可以分为只读(-r)和读写(-wr)两种类型 并且存储的数据类型可以分为 &#xff1a;布尔量 和 16位寄存器 布尔量比如IO口的电平高低&#xff0c;灯的开关…