1. 容器的布局方向和排列方向
???? flex-direction管制主轴是哪一根同时管制主轴的方向(排列形式)
row:从左往右的x轴row-reverse:从右往左的x轴column:从上往下的y轴column-reverse:从下往上的y轴
2. 富裕空间的治理
????只决定富裕空间的地位,不会给项目区调配空间
????主轴 :justify-content
flex-start:在主轴的正方向flex-end: 在主轴的反方向center: 在两边space-between:在我的项目之间space-around:在我的项目两边
????侧轴 : align-items 治理单行的富裕空间 垂直于主轴的轴
flex-start:在侧轴的正方向flex-end: 在侧轴的反方向center:在两边baseline: 基线对齐stretch: 等高布局(我的项目没有高度)space-aroundspace-evently
3. 弹性空间的治理
flex-grow:弹性因子(默认值为0)
4. flex容器(CSS3新增)
???? flex-wrap 管制侧轴的方向 可选值:wrap-reverse、wrap、 nowrap
nowrap 不换行wrap 侧轴方向由上而下(flex-shrink生效)wrap-reverse 侧轴方向由下而上(flex-shrink生效)
???? align-content 多行多列时,富裕空间的治理,会把所有行、列看成一个整体
????侧轴富裕空间的治理总结:
单行单列
align-itemsalign-self(优先级高)
多行多列
align-content(多行时以它为基准)
????flex-flow :flex-direction和flex-wrap的简写属性,实质上管制了主轴和侧轴别离是哪一根,以及他们的方向。
????flex-grow:将主轴上的富裕空间按比例调配到我的项目上!属于定义弹性盒子(flex-item)的弹性因子,默认值为0
????代码示例:
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } #wrap{ width: 400px; height: 300px; border: 1px solid; margin:100px auto; display:flex; /*flex-direction: row;*/ /*flex-wrap: wrap-reverse;*/ flex-flow:row wrap-reverse; justify-content: flex-start; align-items: flex-start; align-content: flex-end; } #wrap > .item{ width: 50px; height: 50px; background: pink; text-align: center; line-height: 50px; flex-grow: 1; } #wrap > .item:nth-child(1){ align-self: center; flex-grow: 4; order:3; } </style> </head> <body> <div id="wrap"> <div class="item">1</div> <div class="item">2</div> <div class="item">3</div> <div class="item">4</div> <div class="item">5</div> </div> </body></html>
5.flex布局——我的项目新增
order:管制我的项目的排列程序,order越大我的项目越后
align-self:我的项目本身富裕空间的治理
flex-shrink:膨胀因子(默认值为1);起作用前提:flex-wrap为nowrap;我的项目的总宽度超出容器时,进行伸缩
flex-basis:(默认值为auto)伸缩规定计算的基准值(默认拿主轴width或height的值)
伸缩规定
????flex-grow拉伸因子规定 以下面demo为例
可用空间 = (容器大小 - 所有相邻我的项目flex-basis的总和) 400 - 50*5 =150可扩大空间 = (可用空间/所有相邻我的项目flex-grow的总和) //一个flex-grow所要占据的空间 150/(1*4+4)=18.75每项伸缩大小 = (伸缩基准值flex-basis + (可扩大空间 * flex-grow值)) 50+18.75*1=68.75 50+18.75*4=125
????flex-shrink 膨胀因子规定
①.计算膨胀因子与基准值乘的总和
var a = 每一项flex-shrink*flex-basis之和a = 1*200+1*4*50=400
②.计算膨胀因数
膨胀因数=(我的项目的膨胀因子*我的项目基准值)/第一步计算总和var b = (flex-shrink*flex-basis)/ab = (1*200)/400=1/2 b'=(1*50)/400=1/8
③移除空间的计算
移除空间= 我的项目膨胀因数 x 负溢出的空间var c = b * 溢出的空间c = 1/2*|(100-400)| = 150 c' =1/8*300 =37.5剩下的空间→ 我的项目1:200-150=50 其余我的项目:50-37.5=12.5
注:外部是个递归循环,如果其中某个我的项目内容增多,比方内容>12.5, 它会把宽度减去12.5,剩下的值依照规定让其余四个再来承当,重新分配空间
代码示例:
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } #wrap{ width: 100px; height: 400px; border: 1px solid; display:flex; } .item{ width: 50px; height: 50px; background: pink; text-align: center; flex-shrink: 1; } .item:nth-child(1){ width: 200px; } </style> </head> <body> <div id="wrap"> <div class="item">1</div> <div class="item">2</div> <div class="item">3</div> <div class="item">4</div> <div class="item">5</div> </div> </body></html>
6.flex的简写属性
flex:1 (flex-basis:0% flex-grow:1 flex-shrink:1)
等分布局剖析
flex-basis为0,则可用空间就等于容器的大小;
flex-grow为1,将主轴上富裕空间平均分配到每个我的项目上;
fle-shrink的值影响不大
flex 能够设置弹性元素所有的三个款式: flex 增长 缩减 根底
initial "flex: 0 1 auto". auto "flex: 1 1 auto" none "flex: 0 0 auto" 弹性元素没有弹性
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } #wrap{ width: 400px; height: 300px; border: 1px solid; margin:100px auto; display: flex; } #wrap > .item{ height: 50px; background: pink; text-align: center; line-height: 50px; /*flex-shrink: 1; flex-grow: 1; flex-basis: 0;*/ flex: 1; } </style> </head> <body> <div id="wrap"> <div class="item">11</div> <div class="item">222</div> <div class="item">3333</div> <div class="item">44444</div> <div class="item">555555</div> </div> </body></html>
以上是集体对于flex布局的学习总结,欢送多多交换和学习!如需转载,请分割作者~