html左右分隔可调整,CSS实现可拖拽分割面板
项目中经常会用到左右分栏布局方式,一般情况左侧面板大小都是固定的,但是有时会有需求做成拖拽式的,能够自由拖拽调整面板大小。(作为当年的资深Java Swing开发人员,对于JSplitPane印象深刻。。。)
一般在web应用中的实现方式是封装成组件,通过JavaScript添加事件监听来实现。
今天给大家介绍的是一种新的实现方式,不通过JavaScript,只借助借助CSS的resize属性,
就可以实现交互式的可拖拽分割面板。
请参考以下代码部分,具体实现和技术细节,代码中已经做了注释。
LESS代码如下(如果想要CSS格式,请查看本页面源代码)
@divider_color: #ccc; //分隔条颜色
@divider_hover_color: #17a2b8;//hover时分隔条颜色
@horizontal_left_size: 200px;//左右布局时,左侧面板宽度
@vertical_top_size: 100px;//上下布局是,上册面板宽度
.split {
overflow: hidden;
border: 1px solid #ccc;
width: 100%;
height: 100%;
.split {
border: none;
}
.resize {
overflow: scroll;
opacity: 0; //通过透明度将resize设置为不可见,但是仍然可以交互
&::-webkit-scrollbar { //设置resize的大小,只有webkit的浏览器支持
width: 100%;
height: 100%;
}
}
.divider {
position: absolute;
pointer-events: none; //禁止divider影响鼠标事件
}
.content {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
&.horizontal {//横向布局
> div:first-child { //左侧面板
overflow: hidden;
float: left;
position: relative;
height: 100%;
.resize {
width: @horizontal_left_size; //★左侧面板的预置宽度
height: 100%;
resize: horizontal;
&:hover ~ .divider, &:active ~ .divider {
border-left-color: @divider_hover_color;
border-left-style: dashed;
}
}
.divider {
right: 0;
top: 0;
bottom: 0;
border-left: 1px solid @divider_color;
border-right: 2px solid transparent;
}
.content {
right: 4px; //content不能充满左侧面板,否则会覆盖resize面板
}
}
> div:last-child { //右侧面板
position: relative;
overflow: hidden;
height: 100%;
box-sizing: border-box;
}
}
&.vertical {//纵向布局
> div:first-child { //上侧面板
overflow: hidden;
position: relative;
.resize {
height: @vertical_top_size; //★上册面板的预置高度
width: 100%;
resize: vertical;
&:hover ~ .divider, &:active ~ .divider {
border-top-color: @divider_hover_color;
border-top-style: dashed;
}
}
.divider {
left: 0;
right: 0;
bottom: 0;
border-top: 1px solid @divider_color;
border-bottom: 2px solid transparent;
}
.content {
bottom: 4px;
}
}
> div:last-child { //下侧面板
position: relative;
overflow: hidden;
width: 100%;
box-sizing: border-box;
}
}
}
//针对Firefox浏览器
@-moz-document url-prefix() {
.resize {
overflow: auto !important;
opacity: 1 !important;
}
}
测试代码和呈现效果如下:
left
right-top
right-top
left
right-top
right-top
请注意,resize有浏览器的兼容性问题,本实现只针对支持resize属性的浏览器。
html左右分隔可调整,CSS实现可拖拽分割面板相关推荐
- canvas读取图片,输入文字,调整文字属性,拖拽文字位置,并保存图片
不是专门做前端的,代码写的不太好,权当抛砖引玉. 整体思路: 共有5层,除了背景颜色的div没什么用之外,canvas1用来读取图片作为背景,canvas2把文字展示出来,并记录拖拽文字的位置,can ...
- 纯CSS实现左右拖拽改变布局大小 使用CSS3中resize属性 水平,垂直拖动元素,改变大小
利用浏览器非overflow:auto元素设置resize可以拉伸的特性实现无JavaScript的分栏宽度控制. webkit浏览器下滚动条可以自定义,其中resize区域大小就是scrollbar ...
- Unity 窗口制作 调整窗口大小 动态调整UI大小 窗口拖拽 UI拖拽
Unity 简易窗口: 首先咱们看一下是不是自己想要的效果 组件可调整参数: 下面是同比例缩放的调整效果,如果只是缩放这个窗口里面的内容,这个是个不错的选择 资源链接: 下载地址.
- 【css】禁止拖拽选择图片
img{user-select: none;-webkit-user-drag: none; }
- CSS # 禁止图片拖拽、文字选中
-webkit-user-select: none; cursor: default; pointer-events: none;
- html水平分隔线样式,CSS生成漂亮的水平分隔线(horizontal rule)设计效果
HTML代码中,我们常常使用 标签来生成水平分隔线,下面分享几款不同样式的水平分隔线 相关CSS代码 /* 渐变 color1 - color2 - color1 */ hr.style-one { ...
- css拖拽调整高度,两种为wangEditor添加拖拽调整高度的方式:CSS3和jQuery UI
wangEditor是一款优秀的Web富文本编辑器,但如果能像KindEditor那样支持拖拽调整高度就更好了.有两种方式可以为wangEditor添加这一功能,这里使用的wangEditor版本为2 ...
- web前端入门学习 css(7)css高级技巧 (精灵图、字体图标、css三角、鼠标样式、表单轮廓线、文本框拖拽、垂直对齐、图底空白缝隙、margin负值、溢出文字省略号、文字环绕、css初始化)
文章目录 精灵图 为什么需要精灵图? 精灵图的使用 精灵图课堂案例 用精灵图拼出自己的名字 字体图标 字体图标的下载 字体图标的引入 字体图标的追加 css三角(用边框border制作) 案例:京东三 ...
- css元素可拖动,使用css-transform实现更好的拖拽功能
拖拽功能是目前网页上一种非常常见的功能,例如"登录弹窗"的拖拽.本文将使用transform来实现这一功能. 一.拖拽的用户行为分析与原理解析 二.代码实现 三.总结 本文所涉及的 ...
最新文章
- iOS音频——AudioToolbox
- 一个智能机器人的语录
- 【SpringCloud】高可用Eureka
- 剖析ifstream打开含中文路径名文件失败的原因(转)
- java 之在校期间最后一次实训记录
- 从性能方面谈系统设计
- C++实现有序表折半查找
- Spring 通过@Import实现Bean的注册
- 微信小程序想通过场景化缩短路径
- 冲动是魔鬼!国庆换机如何不花冤枉钱?
- 紧急!Log4j2 再再爆雷:刚升级,又连爆 “核弹级” 远程数据泄露 ! v2.17.0 横空出世。。。...
- HTML5 FileAPI读取实例---(一)
- [BZOJ 3052] [wc2013] 糖果公园 【树上莫队】
- httphandler防图片盗链
- OSChina 周四乱弹 —— 懦夫!你就不能找富婆吗
- Windows server2012R2 企业内部搭建虚拟专用网络服务
- matlab实现A律13折线的编码和译码以及量化误差的计算
- NVIDIA GeForce Experience无法登录
- vsCode使vue中的代码高亮
- CAD画图 ——基础和直线