解决flex布局中子项目尺寸不受flex-shrink限制


Posted in HTML / CSS onMay 11, 2022

预期是写一个如下所示的布局内容:

解决flex布局中子项目尺寸不受flex-shrink限制

即有一个固定高度的外部容器,顶部的header已知高度,在header占据了固定高度后,剩下的都分给body部分。因此采用flex布局,header设置flex-shrink为0,不自动收缩,body则flex-shrink为1,使其高度压缩为剩余高度。这个操作看起来挺符合直觉的。
然后在上述的body中有个content-wrapper内容块,设置height: 100%以及overflow: auto来让他高度占满父容器并且内容过多时生成滚动条。

demo代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>测试pre标签</title>
        <style>
            * {
                padding: 0;
                margin: 0;
            }
            html, body {
                height: 100%;
            }

            .container {
                width: 800px;
                height: 500px;
                display: flex;
                flex-direction: column;
            }
            .header {
                height: 100px;
                background-color: rgb(226, 110, 110);
                flex-shrink: 0;
            }
            .body {
                flex-shrink: 1;
                background-color: rgb(146, 146, 223);
            }

            .content-wrapper {
                height: 100%;
                overflow: auto;
            }
        </style>
    </head>
<body>

    <div class="container">
        <div class="header">Header</div>
        <div class="body">
            <div class="content-wrapper">
                <div style="height: 1000px">很多很多的内容</div>
            </div>
        </div>
    </div>

</body>
</html>

但最终效果确实如此:

解决flex布局中子项目尺寸不受flex-shrink限制

很明显body的高度并没有被限制,实际的高度是子元素的内容高度。

So why? 用搜索引擎搜了许久没找到理想的答案,这种问题确实也很难以表述。我现在真正想知道的是:为什么我给flex布局中的子项目设置了flex-shrink: 1,但它却没按我预期的表现呢。网络上相关的资料都仅仅告知如使用的,对于我想知道的,最适合的资料应该是翻flex这块的实现标准。

依据https://www.w3.org/TR/css-flexbox-1/一节中的描述,首先是这么句话:

Note: The auto keyword, representing an automatic minimum size, is the new initial value of the min-width and min-height properties.

可知弹性项目的min-widthmin-height的默认值是auto,并不同于其他布局中的情况(默认为0)。

再往下来看:

To provide a more reasonable default minimum size for flex items, the used value of a main axis automatic minimum size on a flex item that is not a scroll container is a content-based minimum size; for scroll containers the automatic minimum size is zero, as usual.

这段话描述了在主轴方向上,上述的auto值应该如何计算弹性项目的宽/高度(我的例子中是flex-direction: column,因此主轴为垂直方向,关注点是min-height)。由上可知,对于弹性项目如果其是非滚动容器,min-height值为内容高度;反之则是0。

综上,demo中的问题,修改方法之一就是,将div.body变为滚动容器,即设置overflowscrollauto或者hidden(没错hidden属性也是,因为hidden只是隐藏溢出的内容不提供滚动条,但仍然可以通过js控制里边的内容来达到滚动效果,所以该情况也是滚动容器)。另一种方式是我们可以直接覆盖min-height的默认值,即显示设置min-height: 0 也能达到目的。

到此这篇关于flex布局中子项目尺寸不受flex-shrink限制的问题解决的文章就介绍到这了!

 

Tags in this post...

HTML / CSS 相关文章推荐
CSS心形加载的动画源码的实现
Mar 09 HTML / CSS
a标签的css样式四个状态
Mar 09 HTML / CSS
CSS实现限制字数功能当对象内文本溢出时显示省略标记
Aug 20 HTML / CSS
纯CSS3单页切换导航菜单界面设计的简单实现
Aug 16 HTML / CSS
CSS3 :default伪类选择器使用简介
Mar 15 HTML / CSS
html5理解head_动力节点Java学院整理
Jul 13 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
Dec 13 HTML / CSS
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
Jan 23 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
Mar 14 HTML / CSS
关于html字符串正则判断和匹配的具体使用
Dec 12 HTML / CSS
Html5跳转到APP指定页面的实现
Jan 14 HTML / CSS
使用canvas对video视频某一刻截图功能
Sep 25 HTML / CSS
css3 选择器
May 11 #HTML / CSS
六个好看实用的 HTML + CSS 后台登录入口页面
HTML CSS 一个标签实现带动画的抖音LOGO
常用的文件对应的MIME类型汇总
Apr 26 #HTML / CSS
通过feDisplacementMap和feImage实现水波特效
什么是css原子化,有什么用?
Apr 24 #HTML / CSS
css3 文字断裂效果
You might like
php调用google接口生成二维码示例
2014/04/28 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
jQuery 隔行换色 支持键盘上下键,按Enter选定值
2009/08/02 Javascript
js 文件引入实现代码
2010/04/23 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
Python代码的打包与发布详解
2014/07/30 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python中的XML库4Suite Server的介绍
2015/04/14 Python
TensorFlow损失函数专题详解
2018/04/26 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
高中毕业自我鉴定
2013/12/19 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
爬山的活动方案
2014/08/16 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
初中政治教学反思
2016/02/23 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang