为什么我们需要flex?
为什么我们需要 flex?
解决元素居中问题
自动弹性伸缩,合适适配不同大小的屏幕,和移动端
flex布局
flex布局是CSS3新增的一维布局,类似的还有GRID布局,是二维布局。如果使用flex解决CSS早期三大难题,难度瞬间降低一半。
flex布局分为容器(container)属性和项目(item)属性。
(注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。)
一、FLEX容器属性
1、flex-direction
项目的排列方向。默认row,即横向水平向右排列
2、flex-wrap
定义换行方式。默认不换行nowrap。
3、flex-flow
flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
4、justify-content
项目在main-axis上的对齐方式。默认为flex-start。
5、align-item
项目在cross-axis上的对齐方式。默认flex-start
6、align-content
定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
二、项目属性
1、order
属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
2、flex-grow
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
3、flex-shrink
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
4、flex-basis
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
5、flex
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
6、align-self
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
三、子项目flex属性详解
flex 是 flex-grow、flex-shrink、flex-basis的缩写。flex-grow、flex-shrink、flex-basis这三个属性的作用是:在flex布局中,父元素在不同宽度下,子元素是如何分配父元素的空间的。
1、 flex-grow
该属性来设置,当父元素的宽度大于所有子元素的宽度的和时(即父元素会有剩余空间),子元素如何分配父元素的剩余空间。
flex-grow的默认值为0,意思是该元素不索取父元素的剩余空间,如果值大于0,表示索取。值越大,索取的越厉害。
2、flex-shrink
该属性来设置,当父元素的宽度小于所有子元素的宽度的和时(即子元素会超出父元素),子元素如何缩小自己的宽度的。
flex-shrink的默认值为1,当父元素的宽度小于所有子元素的宽度的和时,子元素的宽度会减小。值越大,减小的越厉害。如果值为0,表示不减小。
px,最终B的大小为 自身宽度(300px)- B减小的宽度(100px * (300px * 2/(200 * 3 + 300 * 2))) = 250px
3、flex-basis
该属性来设置该元素的宽度。当然,width也可以用来设置元素宽度。如果元素上同时设置了width和flex-basis,那么flex-basis会覆盖width的值。
总结:
父级的空间足够:flex-grow有效,flex-shrink无效。
父级的空间不够:flex-shrink 有效,flex-grow无效。
四、前端CSS早期三大难题使用flex解决
1、垂直居中
.container{
display:flex;
justify-content:center;
align-items:center;
}
2、多列等高
.container{
display: flex;
}
3、自适应宽
.container{
display: flex;
}
/左侧定宽高,右侧设置自适应的元素/
.right {
flex: 1;
}
五、FLEX浏览器兼容性
Chrome 29+
Firefox 28+
Internet Explorer 11+
Opera 17+
Safari 6.1+ (prefixed with -webkit-)
Android 4.4+
iOS 7.1+ (prefixed with -webkit-)
六、参考资料
1、https://css-tricks.com/snippets/css/a-guide-to-flexbox/
2、https://scotch.io/tutorials/a-visual-guide-to-css3-flexbox-properties
flex 前端人的布局好助手
实用,有点忘了可以回来看一看
遇事不决flex,yyds
没有 flex 前,水平垂直居中一个盒子一般用定位,但是不够优雅,有了 flex 后,真香!