如何制作伸缩侧边栏?

news2024/11/26 6:21:28

目录

一、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> -->
        <video
        id="video-page1"
        class="video-page1"
        controls
        preload="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>
    //侧边栏打开时的width
    var 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) {//如果侧边栏的宽度=我们设置的侧边栏的宽度leftbarWidth
            leftbar.style.width = "0";//设置侧边栏width=0
            leftbarbtn.innerHTML = '<img src="../../../img/beijing-open.png" alt="点击打开教程">'//切换按钮中的图片
            leftbarbtn.style.left = "0";//移动按钮
            video.pause();//实现视频暂停播放
        } else {//打开侧边栏
            leftbar.style.width = leftbarWidth;//设置侧边栏width=leftbarWidth
            leftbarbtn.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> -->
        <video
        id="video-page1"
        class="video-page1"
        controls
        preload="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>
    //侧边栏打开时的width
    var 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) {//如果侧边栏的宽度=我们设置的侧边栏的宽度leftbarWidth
            leftbar.style.width = "0";//设置侧边栏width=0
            leftbarbtn.innerHTML = '<img src="../../../img/beijing-open.png" alt="点击打开教程">'//切换按钮中的图片
            leftbarbtn.style.left = "0";//移动按钮
            video.pause();//实现视频暂停播放
        } else {//打开侧边栏
            leftbar.style.width = leftbarWidth;//设置侧边栏width=leftbarWidth
            leftbarbtn.innerHTML = '<img src="../../../img/beijing-close.png" alt="点击关闭">'//切换按钮中的图片
            leftbarbtn.style.left = leftbarWidth;//移动按钮
        }
    }
</script>
</html>

五、效果展示 

伸缩侧边栏

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

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

相关文章

STM32学习笔记(10_2)- I2C通信协议MPU6050简介

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期开…

揭秘DeviceNET转CCLinkIE的高效通讯秘籍

在现代工业自动化领域&#xff0c;上位机通常扮演着系统控制和监视的角色&#xff0c;而DeviceNET与CC-Link IE则是两种常见的现场总线协议。当需要实现对水泵变频器的精确控制时&#xff0c;通过配置一个集成了DeviceNET转CC-Link IE网关的设备&#xff0c;可以实现上位机与变…

python 进程、线程、协程基本使用

1、进程、线程以及协程【1】进程概念【2】线程的概念线程的生命周期进程与线程的区别 【3】协程(Coroutines) 2、多线程实现【1】threading模块【2】互斥锁【3】线程池【4】线程应用 3、多进程实现4、协程实现【1】yield与协程【2】asyncio模块【3】3.8版本【4】aiohttp 1. 并发…

Linux --- 多路转接

目录 前言 五种IO模型 非阻塞IO IO多路转接 --- select 一个简单的select服务器 HandlerEvent socket就绪条件 select的特点 select缺点 IO多路转接 --- poll poll的优点 poll的缺点 IO多路转接 --- epoll epoll工作原理 epoll的优点 基于epoll封装的服务器 e…

Lambda表达式(语法+函数式接口+使用+变量捕获)

文章目录 Lambda表达式一、语法1.(parameters)2. ->3.方法体4.函数式接口 二、Lambda的使用三、变量捕获四、Lambda在集合中的应用 Lambda表达式 允许通过Lambda表达式来代替功能接口提供了一个正常的参数列表和使用这些参数的主体也叫闭包 一、语法 (parameters) -> …

Django框架之DRF(武沛齐全)

一、FBV和CBV FBV&#xff0c;function base views&#xff0c;其实就是编写函数来处理业务请求。 from django.contrib import admin from django.urls import path from app01 import views urlpatterns [path(users/, views.users), ] from django.http import JsonResp…

模拟游戏《幸福工厂》好玩吗?《幸福工厂》怎么在mac电脑上打开?

关于《幸福工厂》这款游戏是否好玩&#xff0c;普遍的玩家反馈和评价表明&#xff0c;《幸福工厂》&#xff08;Satisfactory&#xff09;因其深度的工厂建造模拟、自由度极高的探索以及精美的图形表现而受到许多玩家的喜爱。它允许玩家在一个开放的世界中规划并建立复杂的生产…

unity 打包安卓错误汇集

Failed to find target with hash string "android-34’ in: D:Pr 他说找不到sdk34level的我用as打开后卸载又重装&#xff0c;最后解决了 我放到Plugins/Android/下面的Java代码没有被编译 这个不知道为什么。我故意把代码写的有问题&#xff0c;会报错那种&#xff…

项目安全性与权限管理实践与探讨

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 身份验证和授权 二. 输入验证和过滤 2.1. 添加O…

Linux USB驱动(二)

1. Linux USB驱动软件框架 应用程序有两种访问硬件的途径&#xff1a;通过设备驱动程序来访问和跳过设备驱动程序&#xff08;直接使用host驱动程序&#xff09;来访问。 当直接使用Host驱动程序时&#xff0c;可以调用libusb库中已经封装好的函数接口。 2. USB电气信号 一个…

Salesforce技术移民主要国家薪资 - 汇总篇

各位Salesforce的宝们&#xff0c;汇总版的Salesforce技术移民主要国家薪资表格及图示给到大家。 主要针对以下四个岗位&#xff1a;Salesforce管理员、Salesforce项目经理、Salesforce业务分析师、Salesforce架构师&#xff1b; 为方便各位看官&#xff0c;分为了欧元区与美元…

Figma使用问题(更新自己遇到的问题)

文章目录 前言一、如何安装插件&#xff1f;方法1&#xff1a;Figma Community / Figma中文社区方法2&#xff1a;菜单栏 二、图片倾斜插件使用1.Angle Mockups前提&#xff1a;执行过程&#xff1a; 三.中文字体插件&#xff08;宋体等&#xff09;Chinese Font Picker前提&am…

基于深度学习的图书管理推荐系统(python版)

基于深度学习的图书管理推荐系统 1、效果图 1/1 [] - 0s 270ms/step [13 11 4 19 16 18 8 6 9 0] [0.1780757 0.17474999 0.17390694 0.17207369 0.17157653 0.168248440.1668652 0.16665359 0.16656876 0.16519257] keras_recommended_book_ids深度学习推荐列表 [9137…

Redis 事务 与 管道

redis事务 谈到事务大家可能就会想起mysql中的事务 注意这里的事务不是指的是事务的四大特性acid 持久性 原子性 隔离性 一致性 事务的概念就是 一组命令,串行化执行而不被打断 这里redis的事务和mysql的事务就不太一样 传统关系型数据库的事务主要强调的是一个没有执行完成就…

python3——基础概要

基础 数据结构 Python 3.x中有6种标准的对象类型&#xff1a; Number&#xff08;数字&#xff09;、String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Tuple&#xff08;元组&#xff09;、Sets&#xff08;集合&#xff09;、Dictionary&#xff08…

B+Tree讲解

B-/B树看 MySQL索引结构 B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树.它类似普通的平衡二叉树&#xff0c;不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图. B-树有如下特点: 所有键值分布在整颗树中&#xff1b; 任何一个…

【MySQL】内外连接——内连接、外连接、左外连接、右外连接、内外连接的区别、左外连接和右外连接的区别

文章目录 MySQLMySQL表的内连接和外连接1. 内连接2. 外连接2.1 左外连接2.2 右外连接 3. 内外连接的区别4. 左外连接和右外连接的区别 MySQL MySQL表的内连接和外连接 MySQL 中的内连接&#xff08;INNER JOIN&#xff09;和外连接&#xff08;包括左外连接 LEFT JOIN 和右外连…

数据分析之Tebleau 简介、安装及数据导入

Tebleau简介 Tebleau基于斯坦福大学突破性交互式技术 可以将结构化数据快速生成图表、坐标图、仪表盘与报告 将维度拖放到画布等地方是他的主要操作方式 例&#xff1a;Tebleau是手机相机 &#xff08;相对来说更简单&#xff09; POWER BI是单反相机 Tebleau各类产品 Teblea…

GPT提示词分享 —— 智能域名生成器

提示词&#x1f447; 我希望你能充当一个聪明的域名生成器。我将告诉你我的公司或想法是什么&#xff0c;你将根据我的提示回复我一份域名备选清单。你只需回复域名列表&#xff0c;而不是其他。域名应该是最多 7-8 个字母&#xff0c;应该简短但独特&#xff0c;可以是朗朗上口…

ubuntu16.04 不支持 gcc-11,g++11

总结 ubuntu16.04 不支持 gcc-11&#xff0c;需要升级 18.04 或更高的版本。 背景 最近需要在我的 ubuntu16.04 电脑上安装 gcc-11&#xff0c;g-11&#xff0c;使用更高的版本来编译代码。根据网上查到的方式是添加以下的源并进行安装 sudo add-apt-repository ppa:ubuntu…