flex布局在开发中的做用:javascript
1.解决之前须要用定位position,浮动float,百分比%来解决的布局问题,
2.解决之前比较难以把握的垂直居中问题vertical-aligncss
面试中很容易碰到一个题:前端
左边200px,右边占满整屏
之前的写法,会用到左边写固定200px,后边的元素margin-left:200px,而后加上浮动float,有了flex以后呢,写法很是方便java
.left width 200px .right flex 1
自动占满剩余的空间,是否是特别6,固然这个是题外话,咱们要学的是flex:grow,flex:shrink面试
flex: grow 算法
MDN是这样描述的:segmentfault
CSS属性
flex-grow
设置了一个flex项
主尺寸的flex增加系数。它指定了flex容器中剩余空间的多少应该分配给项目(flex增加系数)。
怎么样,看懂了吗,我本身看了也晕,仍是来些栗子吧布局
section div.left div.center div.right
section display flex width 600px height 100px .left flex-grow 1 width 100px background red .center flex-grow 2 width 200px background yellow .right flex-grow 3 width 16px background green
上面这个栗子在实际运行中,会是怎样呢flex
是否是有点意思呢,宽度都按特定的比例拉伸了,这就是咱们flex:grow的功效了flexbox
flex-grow还有一种状况是,flow-grow总和小于1的状况,这时候算法跟上面有所不一样:
栗子:仍是拿上面栗子来看,把flow-grow的值所有改成0.n,相对应
.left flex-grow 0.1 width 100px background red .center flex-grow 0.2 width 200px background yellow .right flex-grow 0.3 width 16px background green
试着想想会获得什么样的一个布局呢,
看图,我已经放在下面了
当子元素的flow-grow加起来不足1的时候,这时候,父元素就会有空间不被占满,那么这个时候得子元素实际宽度是多少呢:
固然啦,这个flex-grow的值是被min/max-width的影响的,本身实际运用的时候要注意哦
flex:shrink
CSS
flex-shrink
属性指定了 flex 元素的收缩规则。flex 元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的值。
一样附上MDN关于flex:shrink的描述。。哈哈
flex:grow是拉伸填补空位,那么flex:shrink则是相对立的,它会收缩哦,也就是子元素的宽度要大于父元素的宽度
一样咱们也来上一个栗子:
仍是沿用上面的代码,可是咱们得修改下css
.left flex-shrink 1 width 200px background red .center flex-shrink 2 width 300px background yellow .right flex-shrink 3 width 160px background green
相信聪明的你已经发现了吧,没错,200+300+160=660,这个值已经超出了父容器的600宽度了,这个时候,在实际运行中会是怎样的呢:
依旧来张图吧~
怎么样,都按照必定的比例本身收缩了吧,是否是很神奇~
flex:shrink跟flex:grow的算法仍是有必定差别的,这里有几个数值要注意(溢出值,总宽度):
这个算法是否是有点很差理解呢,其实总宽度就是把flex:shrink看成是份额,子元素是每一份,每一份*份额再相加,这样就算出了总宽度;而后再算出溢出值在每一个子元素中占的份额,再用子元素的实际宽度减去溢出份额就获得实际宽度啦~
固然了,flex:shrink也有小于1的状况,思考下,若是shrink大于1的状况,通过缩小恰好跟总宽度相等;那么若是小于1的时候会出现什么状况呢
来了来了他来了,
小于1的状况,子元素得不到充分的缩比,依旧会伸到容器外部
194.38 + 283.12 + 146.5 = 624,怎么样,虽然这个时候子元素依然有缩小,可是依旧大于父容器的600,神奇吧
那么,这个时候是怎么计算的实际宽度呢:
固然啦,flex-shrink也会受到max/min-width的影响哦
到此就结束了,你们能够根据本身的理解写个demo加深下记忆哦,谢谢
码农进阶题库,天天一道面试题 or Js小知识 https://www.javascriptc.com/interview-tips/
若是你以为这篇文章对你挺有启发,我想请你帮我两个小忙:
把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一块儿进步,一块儿成长!
关注公众号 「IT平头哥联盟」,公众号后台回复「资源
」 免费领取我精心整理的前端进阶资源教程
JS中文网 - 前端进阶资源教程 www.javascriptC.com
一个致力于帮助开发者用代码改变世界为使命的平台,天天均可以在这里找到技术世界的头条内容
![]()