您现在的位置是:网站首页> 编程资料编程资料
详解flex布局中flex-grow与flex-shrink的计算方式flex-grow、flex-shrink、flex-basis和九宫格布局理解详解关于flex-shrink如何计算的冷知识CSS3 Flexbox中flex-shrink属性的用法示例介绍
2021-09-03
893人已围观
简介 这篇文章主要介绍了详解flex布局中flex-grow与flex-shrink的计算方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
CSS 中的 Flex(弹性布局) 可以很灵活的控制网页的布局,其中决定 Flex 布局内项目宽度/高度的是三个属性:flex-basis, flex-grow, flex-shrink.
flex-basis
flex-basis 决定了项目占据主轴的空间,除非使用 box-sizing 进行设置,否则它将设置内容框的大小,因此当你指定一个flex项的大小时需要额外小心,因为它很肯能包含内边距与边框。
你可以为其指定一个具体的CSS尺寸值,也可以指定其占据父元素的百分比,它的默认值为 auto(根据内容自动调整大小)
100px200px10%20%30%auto

flex-grow
flex-grow 设置当 flex 容器存在剩余空间(flex容器的大小减去所有flex项的大小之和)时项目的放大比例,它的默认值为 0 (即使存在剩余空间也不放大)。如果所有项目的 flex-grow 属性值都是相同的,则它们将等分剩余空间,否则,将根据不同的属性值所定义的比率进行分配。
例如,主轴长度为600px, 项目1占据50px, 项目2占据100px, 项目3占据150px, 则剩余空间为:600px - (50px + 100px + 150px) = 300px
假如每个项目的 flex-grow 属性值都相同(例如都为1),则所有项目分配到相同的剩余空间:
- 项目1: 300px * (1 / (1 + 1 + 1)) = 100px;
- 项目2: 300px * (1 / (1 + 1 + 1)) = 100px;
- 项目3: 300px * (1 / (1 + 1 + 1)) = 100px;
50px + 100px100px + 100px150px + 100px

假设每个项目的 flex-grow 属性的值并不都是相同的,例如项目1为 1, 项目2为 2, 项目3为 3, 则它们分配到的剩余空间分别为:
- 项目1: 300px * (1 / (1 + 2 + 3)) = 50px;
- 项目2: 300px * (2 / (1 + 2 + 3)) = 100px;
- 项目3: 300px * (3 / (1 + 2 + 3)) = 150px;
50px + 50px100px + 100px150px + 150px

要是属性值为小数怎么办呢?这里分两种情况:
1. 所有flex项的 flex-gorw 属性值之和大于1,仍然按照上述方式进行计算;
2. 所有flex项的 flex-gorw 属性值之和小于1,基值按照1来进行计算,例如项目1为 0.2, 项目2为 0.3, 项目3为 0.4, 则它们分配到的剩余空间分别为:
- 项目1: 300px * (0.2 / 1) = 60px;
- 项目2: 300px * (0.3 / 1) = 90px;
- 项目3: 300px * (0.4 / 1) = 120px;
50px + 60px100px + 90px150px + 120px

同样的,当 flex-shrink 的值为小数时,也分两种情况:
1. 所有flex项的 flex-shrink 属性值之和大于1,仍然按照上述方式进行计算;
2. 所有flex项的 flex-shrink 属性值之和小于1,只收缩溢出空间的一部分,例如项目1为 0.1, 项目2为 0.3, 项目3为 0.2, 则总的收缩空间为:
300px * (0.1 + 0.3 + 0.2) = 180px
每个项的权重计算方式是不变的,每个项目分别缩小:
- 项目1: 180px * 0.05 = 9px;
- 项目2: 180px * 0.45 = 81px;
- 项目3: 180px * 0.50 = 90px;
100px - 9px300px - 135px500px - 90px

由于只收缩了溢出空间的一部分,div 内的元素总宽度实际上是超出 div 的宽度的。
以上就是关于使用flex布局中 flex-grow 与 flex-shrink 计算方式的简单介绍。
该篇博客内的代码已同步到Github
参考资料:
[1]. MDN文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/flex-basis
[2]. MDN文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/flex-grow
[3]. MDN文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/flex-shrink
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- CSS样式 解决文字过长显示省略号问题css多行文本溢出时出现省略号的示例纯CSS定制文本省略的方法大全css3实现渐变、阴影、超出指定文本省略号显示等一些效果实例CSS实现标题文字过长部分显示省略号的方法
- 使用css画一个文件上传图案css input[type=file] 样式美化(input上传文件样式 )基于jQuery+CSS3实现带动画效果文件上传插件特效源码HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)文件上传input file简便美化方案(css)利用label标签和CSS美化文件上传表单(不兼容IE6)css 表单上传文件的“浏览”按钮修改
- CSS 点击radio实现两个图片样式切换并且多个radio中只能有一个checked利用纯CSS自定义Checkbox和Radio的样式示例代码一款纯css3实现简单的checkbox复选框和radio单选框纯css3实现效果超级炫的checkbox复选框和radio单选框CSS3实例分享--超炫checkbox复选框和radio单选框css3和jquery实现自定义checkbox和radiobox组件
- css3实现背景动态渐变效果通过css3背景控制属性+使用颜色过渡实现渐变效果css3 给背景设置渐变色的方法用CSS3实现背景渐变的方法CSS3实现渐变背景兼容问题
- 不可思议的CSS导航栏下划线跟随效果CSS 带搜索导航栏的示例代码html+css+js实现导航栏滚动渐变效果css锚点定位被顶部固定导航栏遮住的解决方案html+css 实现简易导航栏功能CSS导航条菜单之带小三角形的实现代码css实现导航切换的实例代码CSS设置列表样式和创建导航菜单实现代码CSS中的导航栏和下拉菜单的实现纯CSS + 媒体查询实现网页导航效果CSS3 二级导航菜单的制作的示例
- 2分钟教你实现环形/扇形菜单(基础版)CSS3 分类菜单效果CSS实现菜单按钮动画CSS导航条菜单之带小三角形的实现代码CSS多级菜单的实现代码css利用transform skewX制作平行四边形导航菜单CSS设置列表样式和创建导航菜单实现代码CSS中的导航栏和下拉菜单的实现HTML+CSS实现下拉菜单的实现纯CSS实现的大型下拉菜单的示例代码纯CSS实现可折叠树状菜单
- css3一个简易的 LED 数字时钟实现方法纯CSS3实现运行时钟的示例代码css3 利用transform打造走动的2D时钟利用CSS3 动画 绘画 圆形动态时钟CSS实现漂亮的时钟动画效果的实例代码
- 通过CSS边框实现三角形和箭头的实例代码CSS中三角形的绘制与巧妙应用实例详解纯CSS3+DIV实现小三角形边框效果的示例代码CSS3 SVG实现三角形场景图中的日落月出,飞鸟归林动画效果源码用CSS画一个带阴影的三角形的示例代码老生常谈 使用 CSS 实现三角形的技巧(多种方法)
- CSS像素以及移动端不同屏幕适配问题解决css列表滑动防止被底部遮住和适配屏幕长一点的机型处理 CSS3中媒体查询结合rem布局适配手机屏幕
- css实现悬浮客服效果css做个波浪悬浮球的实现方法css3实现的多种3d纸张鼠标悬浮特效源码
