加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

用css如何完美实现左右拖动改变布局大小的效果?

发布时间:2023-07-31 14:31:26 所属栏目:语言 来源:
导读:今天给大家分享的是关于用css实现左右拖动改变布局大小效果的内容,也就是通过拖动两栏布局中间线来改变左右布局的大小,小编觉得这个效果比较实用,对大家学习CSS有一定的帮助,感兴趣的朋友可以了解看看,接下来就
今天给大家分享的是关于用css实现左右拖动改变布局大小效果的内容,也就是通过拖动两栏布局中间线来改变左右布局的大小,小编觉得这个效果比较实用,对大家学习CSS有一定的帮助,感兴趣的朋友可以了解看看,接下来就跟随小编一起学习一下吧。
 
    利用浏览器非overflow:auto元素设置resize可以拉伸的特性实现无JavaScript的分栏宽度控制。
 
    webkit浏览器下滚动条可以自定义,其中resize区域大小就是scrollbar的大小,于是,我们可以将整个拉伸区域变成和容器一样高。

    实现原理
 
    CSS中有一个resize属性,如果一个元素的overflow属性值不是visible,则通过设置resize属性可以拉伸这个元素尺寸。
 
    但是,这种拉伸却有一个问题,那就是拖拽的区域太小了,就右下角那么一丢丢地方:
 
    那有什么办法可以把这个拖拽区域变大呢?
 
    后来经过我的研究发现,resize属性的拖拽bar和滚动条的拖拽bar是一个体系里面的东西,只需要对滚动条进行自定义,就能间接设置resize bar的尺寸。
 
例如:
 
.resize-bar::-webkit-scrollbar {
 
 width: 200px; height: 200px;
 
}
 
    此时,拉伸区域就很大了:

    接下来做的事情就是把这个拖拽区域藏在某一栏布局的后面,然后透出部分宽度可以用来拖拽,如下图所示:

    最后,我们的左右分栏采用自适应布局就能实现我们想要的效果。
 
    您可以狠狠地点击这里:纯CSS实现分栏宽度拉伸demo
 
    代码如下:
 
.column {
 
    overflow: hidden;
 
}
 
.column-left {
 
    height: 400px;
 
    background-color: #fff;
 
    position: relative;
 
    float: left;
 
}
 
.column-right {
 
    height: 400px;
 
    padding: 16px;
 
    background-color: #eee;
 
    box-sizing: border-box;
 
    overflow: hidden;
 
}
 
.resize-save {
 
    position: absolute;
 
    top: 0; right: 5px; bottom: 0; left: 0;
 
    padding: 16px;
 
    overflow-x: hidden;
 
}
 
.resize-bar {
 
    width: 200px; height: inherit;
 
    resize: horizontal;
 
    cursor: ew-resize;
 
    opacity: 0;
 
    overflow: scroll;
 
}
 
/* 拖拽线 */
 
.resize-line {
 
    position: absolute;
 
    right: 0; top: 0; bottom: 0;
 
    border-right: 2px solid #eee;
 
    border-left: 1px solid #bbb;
 
    pointer-events: none;
 
}
 
.resize-bar:hover ~ .resize-line,
 
.resize-bar:active ~ .resize-line {
 
    border-left: 1px dashed skyblue;
 
}
 
.resize-bar::-webkit-scrollbar {
 
    width: 200px; height: inherit;
 
}
 
/* Firefox只有下面一小块区域可以拉伸 */
 
@supports (-moz-user-select: none) {
 
    .resize-bar:hover ~ .resize-line,
 
    .resize-bar:active ~ .resize-line {
 
        border-left: 1px solid #bbb;
 
    }
 
    .resize-bar:hover ~ .resize-line::after,
 
    .resize-bar:active ~ .resize-line::after {
 
        content: '';
 
        position: absolute;
 
        width: 16px; height: 16px;
 
        bottom: 0; right: -8px;
 
        background: url(./resize.svg);
 
        background-size: 100% 100%;
 
    }
 
}
 
<div class="column">
 
    <div class="column-left">
 
        <div class="resize-bar"></div>
 
        <div class="resize-line"></div>
 
        <div class="resize-save">
 
            左侧的内容,左侧的内容,左侧的内容,左侧的内容
 
        </div>                                            
 
    </div>
 
    <div class="column-right">
 
        右侧的内容,右侧的内容,右侧的内容,右侧的内容
 
    </div>
 
</div>
 
    利用浏览器非overflow:auto元素设置resize可以拉伸的特性实现无JavaScript的分栏宽度控制。
 
    webkit浏览器下滚动条可以自定义,其中resize区域大小就是scrollbar的大小,于是,我们可以将整个拉伸区域变成和容器一样高。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章