当前位置: 首页 > article >正文

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

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

文章目录

  • 前言
  • 一、效果实现原理
  • 二、代码演示
  • 三.简单解释下样式
  • 四 完整的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 语法

.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.kler.cn/a/582728.html

相关文章:

  • 【经典算法】Leetcode-零钱兑换问题
  • android 无障碍开发辅助工具uiautomatorviewer
  • 面试提问(1)
  • Ubuntu 24.04 Rootless Docker 安装指南
  • 一周学会Flask3 Python Web开发-使用SQLAlchemy动态创建数据库表
  • UE5以插件的形式加载第三方库
  • 科技工作者之家建设扬帆起航,为科技人才提供更多优质服务
  • Web服务器配置、虚拟主机配置、访问权限控制
  • 无人机+无人车+机器狼+DeepSeek:智能化设备集群技术详解
  • 【docker】Windows10启动Docker Desktop - WSL update failed
  • 安装 ubuntu 2404 LTS 服务器 设置 服务器名称
  • JVM的垃圾回收器都有哪些?
  • Vite打包原理: Tree-shaking在Vue3项目中的实际效果
  • JVM垃圾收集器合集
  • 查看linux系统重启的日志
  • 利用8个参数定义一个汽轮机,然后根据这8个参数生成汽轮机性能试验时的测点清单-pycharm-源代码(适用所有类型汽轮机)
  • 数智读书笔记系列016 从《理解和改变世界》探寻AI时代的知识与智能密码
  • 邮箱验证:外贸邮件营销中的关键策略
  • 在终端中用code命令打开vscode并加载当前目录了
  • 部署项目至服务器:响应时间太长,无法访问此页面?