为什么我们需要flex?

xjj金蘑菇
发布于 2022-6-21 14:45
浏览
0收藏

为什么我们需要 flex?
解决元素居中问题
自动弹性伸缩,合适适配不同大小的屏幕,和移动端
flex布局
flex布局是CSS3新增的一维布局,类似的还有GRID布局,是二维布局。如果使用flex解决CSS早期三大难题,难度瞬间降低一半。
flex布局分为容器(container)属性和项目(item)属性。
(注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。)
为什么我们需要flex?-鸿蒙开发者社区

一、FLEX容器属性

1、flex-direction

项目的排列方向。默认row,即横向水平向右排列
为什么我们需要flex?-鸿蒙开发者社区

2、flex-wrap
定义换行方式。默认不换行nowrap。
为什么我们需要flex?-鸿蒙开发者社区
3、flex-flow
flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
4、justify-content
项目在main-axis上的对齐方式。默认为flex-start。
为什么我们需要flex?-鸿蒙开发者社区

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

3、http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

标签
4
收藏
回复
举报
4条回复
按时间正序
/
按时间倒序
xjj前端妹_雅
xjj前端妹_雅

flex 前端人的布局好助手

回复
2022-6-21 16:15:44
xjj_snntH
xjj_snntH

实用,有点忘了可以回来看一看

回复
2022-6-21 16:22:55
xjj_xnkl
xjj_xnkl

遇事不决flex,yyds

回复
2022-6-21 18:41:41
xjjFeRookie
xjjFeRookie

没有 flex 前,水平垂直居中一个盒子一般用定位,但是不够优雅,有了 flex 后,真香!

回复
2022-6-21 22:08:58
回复
    相关推荐