解决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 相关文章推荐
CSS3教程(2):网页边框半径和网页圆角
Apr 02 HTML / CSS
一款基于css3的动画按钮代码教程
Nov 23 HTML / CSS
CSS3中Animation属性的使用详解
Aug 06 HTML / CSS
CSS3 Flex 弹性布局实例代码详解
Nov 01 HTML / CSS
使用CSS3实现input多选框自定义样式的方法示例
Jul 19 HTML / CSS
html5仿支付宝密码框的实现代码
Sep 06 HTML / CSS
HTML5 Canvas图像模糊完美解决办法
Feb 06 HTML / CSS
Html5如何唤起百度地图App的方法
Jan 27 HTML / CSS
html5构建触屏网站之网站尺寸探讨
Jan 07 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(二)
Jan 21 HTML / CSS
html5页面结构_动力节点Java学院整理
Jul 10 HTML / CSS
简述Html5 IphoneX 适配方法
Feb 08 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
ASP和PHP都是可以删除自身的
2007/04/09 PHP
php explode函数实例代码
2012/02/27 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
js倒计时显示实例
2016/12/11 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
python文件操作相关知识点总结整理
2016/02/22 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
经济管理专业自荐信
2013/12/30 职场文书
大学生创业计划书的范文
2014/01/07 职场文书
护士岗位职责
2014/02/16 职场文书
项目经理任命书范本
2014/06/05 职场文书
大学生求职信
2014/06/17 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
公司慰问信范文
2015/03/23 职场文书
婚礼父母致辞
2015/07/28 职场文书
四年级作文之说明文作文
2019/10/14 职场文书