使用纯CSS 实现 侧边栏 拖拽效果

embedded/2025/3/13 14:06:32/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、效果实现原理
  • 二、代码演示
  • 三.简单解释下样式
  • 四 完整的DEMO
  • 总结


前言

`

有不少需求是要拖动改变侧边栏宽高的,以下就是在不适用js ,只使用css 的情况下实现这个效果


一、效果实现原理

使用 textarea 标签的多行文本输入的时候,相信大家看到右下角有块儿区域可以拖动改变 输入框的大小,本次的效果就是使用了这个特性。

二、代码演示

HTML 结构

<div class="columns-box"><div class="column-left"><!-- 拖拽拖拽触发DOM --><div class="column-resize-bar"></div><!-- 拖拽高亮线条展示 --><div class="resize-line"></div><!-- 左侧内容 展示区域 --><div class="column-left-inner"></div></div><!-- 右侧区域内容 --><div class="column-right"></div>
</div>

CSS 样式 使用 SASS 语法

css">.columns-box {border: 1px solid #666666;box-sizing: border-box;height: 100%;display: flex;align-items: stretch;> .column-left {height: 100%;border-right: 1px solid #ff0000;min-width: 20px;position: relative;z-index: 1;> .column-resize-bar {width: 140px;height: 100%;min-width: 20px;padding-right: 4px;box-sizing: content-box;max-width: 500px;margin-right: -4px;resize: horizontal;overflow: scroll;opacity: 0;cursor: e-resize;cursor: col-resize;&::-webkit-scrollbar {width: 20px;height: 100vh;}&:hover {+ .resize-line {opacity: 1;}}}> .resize-line {opacity: 0;position: absolute;top: 0;right: -4px;bottom: 0;width: 4px;background-color: #A5B1FF;pointer-events: none;}> .column-left-inner {position: absolute;top: 0;left: 0;right: 0;bottom: 0;}}> .column-right {flex: 1;height: 100%;width: 0;/* min-width: 0; */}
}

三.简单解释下样式

HTML 结构比较简单,就不过多解释,CSS 还是有几行的,稍微解释下

.columns-box 整个可拖拽结构的容器,设置了 flex 属性,里面两个dom,一个.column-left,一个.column-right.column-left 这个dom主要控制左侧宽度,右侧的默认填充满剩余空间,实现原理就是 flex-grow 的效果 ,可以看这篇文章,相对于文章里的介绍只是改变了排列方向,flex-direction: row; 默认值

.column-resize-bar 前面我们说了根据 textarea 效果实现,这里直接使用的 div 通过设置 resize: horizontal; 样式,让它也能拖动大小,通过拖动 它 撑开 .column-left 这个左侧容器,实现完整效果。

.resize-line 是拖拽可以使用时触发的展示效果,也可以不要,因为已经设置过 cursor 效果,只是没那么好看


四 完整的DEMO

使用纯CSS 实现 侧边栏 拖拽效果

总结

样式里面还有一些细节,比如可拖拽的范围只能通过滚动条的宽度设置,必须设置 overflow: scroll 才会显示拖拽的范围等,具体其他的细节可以详细看看CSS 代码,上方demo 中有完整的使用效果。

以上信息如有疏漏或错误欢迎指正,谢谢。


http://www.ppmy.cn/embedded/172260.html

相关文章

Spring Boot+Vue项目从零入手

Spring BootVue项目从零入手 一、前期准备 在搭建spring bootvue项目前&#xff0c;我们首先要准备好开发环境&#xff0c;所需相关环境和软件如下&#xff1a; 1、node.js 检测安装成功的方法&#xff1a;node -v 2、vue 检测安装成功的方法&#xff1a;vue -V 3、Visu…

TCP三次握手与四次挥手详解:建立与断开连接的底层逻辑

在计算机网络中&#xff0c;TCP&#xff08;传输控制协议&#xff09;通过三次握手建立连接&#xff0c;通过四次挥手终止连接。这两个过程是确保数据可靠传输的核心机制&#xff0c;下面从原理、步骤和应用场景展开分析。 一、三次握手&#xff1a;建立连接的“默契确认” 1.…

【Linux docker 容器】关于想要让虚拟机在开机时候也docker自己启动,容器也自己启动,省去要自己开docker和容器

确认 Docker 服务状态&#xff1a; 首先&#xff0c;你需要确保 Docker 服务已经在虚拟机上安装并正确配置。你可以使用如下命令来检查 Docker 服务的状态&#xff1a; systemctl status docker.service 如果服务没有运行&#xff0c;你可以使用以下命令启动它&#xff1a; s…

【MapSet】哈希表

目录 1. 搜索树 1.1 概念 1.2 操作-查找 1.3 操作-插入 1.4 操作-删除&#xff08;难点&#xff09; 1.5 性能分析 1.6 和java类集的关系 2. 搜索 2.1 概念及场景 2.2 模型 3. Map的使用 3.1 关于Map的说明 3.2 关于Map.Entry的说明 3.3 Map的常用方法说明 3.4 …

选择循环汇编

一、选择结构&#xff08;if-else&#xff09; 核心逻辑&#xff1a; 比较条件&#xff1a;用 CMP 指令 条件跳转&#xff1a;用 JE&#xff08;等于跳转&#xff09;、JNE&#xff08;不等于跳转&#xff09;、JG&#xff08;大于跳转&#xff09;等 代码块分割&#xff1a…

SVN 拉取,文件冲突 解决办法

情景 svn 在拉取代码时 提示 已跳过&#xff0c;其余有冲突 &#xff0c;警告至少还有一个的文件处于冲突状态 导致文件拉取失败 一、原因 版本库和本地工作副本之间存在文件冲突&#xff0c;导致文件无法正常拉取。 二、 Terminal 窗口解决办法 1.查看冲突文件 在 Termin…

Excel之实践出真知——数据分析

Excel之实践出真知——数据分析 1. 引言2. 内容3. 社群4. 其他文章 1. 引言 学习Excel的过程也许会让你感到很枯燥&#xff0c;这一点我是深有体会的&#xff0c;为什么会这样呢&#xff0c;今天我们要探讨的问题就是这一个&#xff0c;我们开始吧。 学习&#xff0c;学了之后…

交通工具驱动电机技术解析:电瓶车、汽车、地铁与高铁的电机对比

点击下面图片&#xff0c;为您提供全新的嵌入式学习路线 文章目录 [TOC](文章目录)一、引言二、电瓶车&#xff1a;直流无刷电机&#xff08;BLDC&#xff09;三、电动汽车&#xff1a;永磁同步电机&#xff08;PMSM&#xff09;与感应电机1. 永磁同步电机&#xff08;主流选…