文章目录

  • 1. 前言
  • 2. 剩余空间
  • 3. 属性
    • [1] flex-grow
    • [2] flex-basis
    • [3] flex-shrink
    • [4] flex

1. 前言

Flex布局的基础以及其他属性,请参考上篇:https://blog.csdn.net/joyce_lcy/article/details/86544661 。

为什么会把这个部分抽出来单独作为一篇呢?因为这三个属性不太容易理解并且需要搭配在一起使用。

2. 剩余空间

剩余空间:是父容器主轴上可以被项目瓜分的空间。

以下图为例,黑色边框是父容器,ABC是项目。白色区域为剩余空间,300px - 50px - 80px - 50px = 120px,计算公式如下:

剩余空间 = container.with - A.width - B.width - C.width

 <ul><li class="a">A</li><li class="b">B</li><li class="c">C</li>
</ul>
ul{display: flex;width: 300px;   border: solid 1px black;
}
li{list-style: none;width: 50px;height: 50px;text-align: center;line-height: 50px;
}
.a{background-color: wheat;
}
.b{background-color: lightcoral;width: 80px;
}
.c{background-color: lightblue;
}

3. 属性

[1] flex-grow

定义项目的放大比例默认0

从上例中可以知道,虽然有剩余空间,但是并没有被项目所瓜分。这是因为默认的放大比例为0,如果设置项目的flex-grow(大于0),就会按照比例进行放大。

上例中的容器宽度为300px,剩余空间为120px。

1)只有A设置了flex-grow为1,则A分到全部剩余空间,原本50px的宽度,变为170px

A B C
flex-grow 1
瓜分比例 100%
瓜分宽度 120px
项目设置宽度 50px 80px 50px
项目实际宽度 170px 80px 50px

2)ABC都设置了flex-grow,所以按照1:1:2都参与瓜分剩余空间

A B C
flex-grow 1 1 2
瓜分比例 25% 25% 50%
瓜分宽度 30px 30px 60px
项目设置宽度 50px 80px 50px
项目实际宽度 80px 110px 110px

示例:https://jsfiddle.net/hwvsr13m/1/

[2] flex-basis

定义在分配多余空间之前,项目占据的主轴空间默认auto

是不是很难理解?实际就是设置项目宽度,会覆盖width

1)设置B的flex-basis为120px,覆盖了原先设置的80px宽度,剩余空间变为80px,全部分配给A。

A B C
flex-grow 1
项目设置宽度 50px 80px 50px
flex-basis 120px
瓜分比例 100%
瓜分宽度 80px
项目实际宽度 130px 120px 50px

2)BC都设置了flex-basis分别为20%和30%,容器宽度为300px,所以被设置为了60px和90px。剩余空间为100px(300 - 50 - 60 - 90),再按照比例瓜分。

A B C
flex-grow 1 1 2
项目设置宽度 50px 80px 50px
flex-basis 20%(60px) 30%(90px)
瓜分比例 25% 25% 50%
瓜分宽度 25px 25px 50px
项目实际宽度 75px 85px 140px

示例:https://jsfiddle.net/g2ran6yt/1/

[3] flex-shrink

定义项目的缩小比例默认1,不允许为负,值越大收缩越多。若值为0,表示不进行缩小

在上述例子中,项目的宽度总和总是小于容器宽度(即有剩余空间可以被瓜分)。但是,如果大于容器宽度会如何?

1)不设置放大缩小比例,flex-shrink默认缩小比为1:1:1。

剩余空间 = 300 - 80 - 160 - 80 = -20,即总共需要缩小20px。

定义缩小率为x,则80 * x + 160 * x + 80 * x = 20,得到 x = 0.0625。

则,AC缩小5px(0.0625 * 80),B缩小10px(0.0625 * 160)

A B C
flex-shrink(默认值) 1 1 1
项目设置宽度 80px 160px 80px
缩小率 0.0625 0.0625 0.0625
缩小宽度 5px 10px 5px
项目实际宽度 75px 150px 75px

2)设置B的flex-shrink为2,ABC的缩小比例为1:2:1。

剩余空间 = 300 - 100 - 150 - 100 = -50,即总共需要缩小50px。

定义A和C的缩小率为x,B缩小率为y。y = 2 * x,100 * x + 150 * y + 100 * x = 50。解后得x = 0.1,y = 0.2。

则AC缩小10px(0.1 * 100),B缩小30px(0.2 * 150)

A B C
flex-shrink 1(默认值) 2 1(默认值)
项目设置宽度 100px 150px 100px
缩小率 0.1 0.2 0.1
缩小宽度 10px 30px 10px
项目实际宽度 90px 120px 90px

示例:https://jsfiddle.net/jx2dtber/

3)设置A的flex-shrink为2,B的flex-shrink为0,ABC的缩小比例为2:0:1。

剩余空间 = 300 - 100 - 130 - 100 = -30,即总共需要缩小30px。

定义C的缩小率为x,A缩小率为y。y = 2 * x,100 * y + 100 * x = 30。解后得x = 0.1,y = 0.2。

则A缩小20px(0.2 * 100),C缩小10px(0.1 * 100),B宽度不变。

A B C
flex-shrink 2 0 1(默认值)
项目设置宽度 100px 130px 100px
缩小率 0.2 0 0.1
缩小宽度 20px 0 10px
项目实际宽度 80px 130px 90px

示例:https://jsfiddle.net/1a9jus4e/

[4] flex

上述三个属性之间有着密切的关系,于是有了flex属性,作为flex-grow, flex-shrink 和 flex-basis的简写,后两个属性可选。

  • 默认值:0 1 auto
  • auto: 1 1 auto
  • none: 0 0 auto
.item {flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

建议优先使用这个属性,而不是单独写三个分离属性

Flex布局——flex-basis、flex-grow、flex-shrink相关推荐

  1. flex布局 flex_时髦的Flickr Flex小部件

    flex布局 flex A web widget, or badge, is a small, embeddable element that you can add to your site tha ...

  2. flex布局一行三个_CSS Flex布局

    Flex之前 在flex布局出现以前,css布局大致就以下几种布局: 主要使用: normal flow 正常流.文档流 float + clearfix position: relative + p ...

  3. css3 flex布局九宫格,css3最全flex布局结构整理

    一切都始于这样一个问题:怎样通过 CSS 简单而优雅的实现水平.垂直同时居中.记得刚开始学习 CSS 的时候,看到 float 属性不由得感觉眼前一亮,顺理成章的联想到 Word 文档排版中用到的的左 ...

  4. html5 flex布局纵向,html最新的flex布局

    每当我们去进行前端页面布局时都会用到float.position.margin等一些属性,这些属性用起来略显麻烦,并且浏览器去进行渲染时会大大消耗性能 所以今天我们来谈谈最新的 flex布局,也叫弹性 ...

  5. flex的三个属性grow、shrink、basis

    个人理解 flex-grow:0; 默认值为0,容器中项目没有占满时,不分配剩余空间. flex-shrink:1; 默认值为1,容器中项目超出容器大小时,把项目平均压缩到容器内. flex-basi ...

  6. flex布局,子元素设置flex: 1和nowrap,内容长度超出盒子

    解决方法:子元素设置宽度即可 {flex: 1;width: 0; } // 或者 {flex: 1;min-width: 0 }

  7. 一篇让你弄懂是什么是flex布局

    一.flex布局与传统布局 传统布局:兼容性好.布局繁琐且不能较好地在移动端布局 flex布局:布局简单方便,很适合在移动端布局,但存在版本兼容支持问题 二.flex布局原理 flex 是 flexi ...

  8. Flex布局教程(来源:阮一峰)

    网页布局(layout)是 CSS 的一个重点应用.Flex 布局将成为未来布局的首选方案.本文介绍它的语法,下一篇文章给出常见布局的 Flex 写法.网友 JailBreak 为本文的所有示例制作了 ...

  9. Flex 布局:语法篇

    2019独角兽企业重金招聘Python工程师标准>>> 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position 属性 + float 属性.它对于那些特殊 ...

  10. 浅谈CSS3中display属性的Flex布局,关于登陆页面属性框的设置

    声明:本文转发自三里屯柯南的浅谈CSS3中display属性的Flex布局http://www.cnblogs.com/xuyuntao/articles/6391728.html 基本概念 采用Fl ...

最新文章

  1. 2022-2028年中国锂电池用聚烯烃隔膜行业市场发展调研及投资方向分析报告
  2. docker日志位置
  3. python3(十三)File对象的属性
  4. PHP中header的用法
  5. 系统间数据传输,产品经理视角的9千字总结:接口、otter、log4j、SFTP、MQ……
  6. Python小白的数学建模课-17.条件最短路径算法
  7. 如何利用jQuery post传递含特殊字符的数据
  8. 五子棋人机对战_10.带人机对战的五子棋程序
  9. ArrayList类源码阅读
  10. officescan使用apache跳轉設置
  11. JavaScript之验证码--常用js特效
  12. 蓝桥杯 java 时间显示
  13. Android如何实现全局的护眼模式
  14. 页面埋点H5 大数据uniapp 按需要更改代码就行
  15. redis案例1--标签实现
  16. There appears to be a gap in the edit log. We expected txid 2289, but got txid 2859.
  17. mysql非结构化查询_Mysql(2.3) 简单查询(SELECT)、子查询
  18. 2、MySQL数据库-表的修改
  19. 7、Chrome插件
  20. 数学建模论文(国赛)写作建议

热门文章

  1. 跨考西电计算机科学与技术研究生经验贴,西安交通大学912计算机133分经验分享...
  2. 串口和VGA接口具体引脚定义
  3. lnmp架构之使用openresty构建memc+srcache
  4. 查看手机包名方法介绍
  5. 第七届全国计算机大赛作品,常熟理工学院新闻网
  6. IoT设备配网方式总结
  7. Word文档目录自动生成和页码设置
  8. Cassandra的使用
  9. android HDMI (一):HDMI基础篇
  10. 解决 413 Request Entity Too Large