flex垂直方向布局与overflow结合使用

el-scrollbar滚动条分析

flex布局左边宽度固定,右边宽度动态扩展问题

在这里插入图片描述

  • 主要是需要留意 flex布局和overflow 之间的关系,

    • 最外面的container 和 里面的main-box 之间分别使用了flex布局 和 overflow:hidden
      • 这个可以理解为一种布局技巧:父元素使用display:flex垂直(或水平)布局,我们在其中的某个子元素中可能会加上flex:1(让这个子元素能够伸缩),但是,此时子元素加起来的高度(或宽度)有可能就会超过父元素的高度(或宽度),这个时候就可以给flex:1的子元素同时加上overflow:hidden;让它不能超出父元素的范围。然后,这个子元素里的内容再加一个div,这个div使用height:100%,占满父元素整个高度,并且overflow:auto,在这个div里面再塞内容,就可以作出自适应的滚动条效果了(这其实就是el-table里的滚动条做法)。
    • main-box 和 里面的main-body 之间分别使用了 flex布局 和 overflow:auto
      • 这里可以理解为上面这种布局的另外一种做法: 父元素使用display:flex垂直(或水平)布局,我们在其中的某个子元素中可能会加上flex:1(让这个子元素能够伸缩),但是,此时子元素加起来的高度(或宽度)有可能会超过父元素的高度(或宽度),这个时候就可以给flex:1的子元素同时加上overflow:auto;,这样它也不会超过父元素的范围。但是,与上面这种布局的区别就在于,这时这个flex:1的子元素中不需要加一个height:100%的div了,只要flex:1的子元素中的内容超过高度(或宽度)它就会出现滚动条
  • 有点类似于聊天的窗口布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            margin: 0;
        }
        .container  {
            width: 800px;
            height: 600px;
            margin: auto;
            background-color: #bfa;

            display: flex;
            flex-direction: column;
        }
        .container-title {
            border: 3px solid red;
            height: 40px;
        }
        .main-box {
            flex: 1;
            overflow: hidden;
            border: 3px solid blue;

            display: flex;
            flex-direction: column;
        }
        
        .main-header {
            height: 80px;
            border: 3px solid pink;

            flex-shrink: 0;
        }

        .main-body {
            border: 3px solid pink;
            flex: 1 1 auto;

            overflow-y: auto;

        }

        .main-body-long-content {
            height: 600px;
        }

        .main-footer {
            height: 80px;
            border: 3px solid pink;
            flex-shrink: 0;

        }
        
    </style>
</head>
<body>

	<!-- container容器有固定的宽高,使用flex布局 -->
    <div class="container">
    
    	<!-- container容器标题有固定的高 -->
        <div class="container-title">容器标题 - 高40px</div>
        
        <!-- container容器中的main-box占满剩余的高度, 
             	且它不能超出container容器的高度(这里给它加上overflow:hidden很关键, 
             	具体原因可以参考:flex布局左边宽度固定,右边宽度动态扩展问题-https://blog.csdn.net/qq_16992475/article/details/129545481) 
		    继续使用flex布局-->
        <div class="main-box">
        
        	<!-- main-header标题有固定的高; flex-shrink: 0;不收缩 -->
            <div class="main-header">
                我是标题 - 80px
            </div>
            
            <!-- 占满中间区域的剩余空间, 使用overflow: auto当内容过长时, 显示滚动条,而不至于超出 -->
            <div class="main-body">
                <div class="main-body-long-content">
                    很的长内容...
                    (这里可以用el-scrollbar)
                </div>
            </div>
            
            <!-- main-footer尾部有固定的高; flex-shrink: 0;不收缩-->
            <div class="main-footer">
                我是尾部 - 80px
            </div>
            
        </div>
        
    </div>
    
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值