type
status
date
slug
summary
tags
category
icon
password
在
CSS的领域中,有着各种方式的布局。今天,笔者记录一下自己目前最常用的Flex布局。谁用谁知道,这也太舒爽了😎前言
先来准备一段
html代码,之后的代码解释都是用此代码。我们给父元素
.parent添加display: flex;,这样就创建了Flex布局。css如下:父元素
.parent称为flex容器,里面的子元素.child称为flex子项。Flex布局中的所有属性都作用在flex容器或者flex子项上介绍
由于
Flex的属性作用在容器或者子项上,所以笔者分两块进行介绍。Flex布局是分主轴和交叉轴的,可以简单的理解为水平方向和垂直方向作用在容器上的属性
该标题下所介绍的所有属性,均写在父元素
.parent下justify-content
justify-content决定了水平方向上flex子项的对齐方式,属性值有center | space-around | space-between | space-evenly | flex-start | flex-end。其中:
center:居中对齐
space-around:每个
flex子项左右两边有等宽的间距。所以,第一个flex子项的左侧和最后一个flex子项的右侧间距只有中间间距的一半
space-between:两端对齐

space-evenly:每个
flex子项左右两边间距完全相等。注意和space-around区分
flex-start:左对齐(默认值)

flex-end:右对齐

align-items
align-items决定了垂直方向上flex子项的对齐方式,属性值有center | stretch | flex-start | flex-end | baseline。其中:
center:垂直居中对齐

stretch:
flex子项拉伸(默认值)。如果子项没有指定高度,则会拉伸至容器高度。反之就渲染指定的高度
flex-start:容器顶部对齐

flex-end:容器底部对齐

baseline:相对于容器的基准线对齐

flex-direction
flex-direction决定了flex子项的整体布局方向,属性值有:row | row-reverse | column | column-reverse。其中:
row:行排列(默认值),方向从左往右

row-reverse:行排列,方向从右往左

column:竖排列,方向从上往下

column-reverse:竖排列,方向从下往上

flex-wrap
flex-wrap决定了flex子项整体是单行显示还是换行显示,属性值有:nowrap | wrap | wrap-reverse。其中:
nowrap:单行显示(默认值),因此容易出现宽度溢出的情况

wrap:换行显示

wrap-reverse:换行显示,且换行的元素在上方显示

flex-flow
flex-flow是flex-direction和flex-wrap的缩写形式,格式如下:flex-flow: row wrap;align-content
align-content和justify-content属性是相似的。justify-content规定了flex子项水平方向上对齐方式,而align-content则是规定flex子项垂直方向上的对齐方式。属性值和justify-content的值一样,这里就不再一一介绍了。Tips:如果
flex子项只有一行的话,该属性是没有效果的作用在子项上的属性
该标题下所介绍的所有属性,均写在具体某一个子元素下。笔者将属性写在第三个子元素
.third上flex-grow
flex-grow:扩展flex子项所占据的宽度。什么意思呢?当某一个子项设置该属性时,会根据该属性的值进行除去元素外剩余空间的占据。属性值是0 ~ 1之间的数字。我们先来看只有一个子项(第三个子元素)设置该属性时其中:
0:不占据剩余空间(默认值)

0.5:占据剩余空间的一半

1:占据全部剩余空间。Tips:值大于
1时,效果和1一样
当有多个子项同时设置该属性时,会根据比例进行剩余空间的分配。在此情景中,我给第一和第二个子元素设置
flex-grow: 0.25,这意味着第一和第二子元素平分剩余空间的50%。依旧改变第三个子元素的flex-grow。其中:
0:剩余
50%的剩余空间,另50%由第一二子元素平分
0.25:三个子元素平分
75%的剩余空间。还剩25%的剩余空间
0.5:剩余
0%的剩余空间:第三个子元素占据剩余空间的50%,另50%由第一二子元素平分
1:效果同
0.5
flex-shrink
如果说
flex-grow是子元素利用剩余空间进行扩展,那么flex-shrink则是子元素在空间不足的情况下进行宽度的收缩。我们将.child元素样式进行简单的修改(上文已粘贴样式代码),将width: 50px改为width: 120px。我们先来看看只在一个子项(第三个子元素)上修改该属性时,
其中:
1:默认值,子元素可收缩。此时三个子元素同等收缩

0:子元素不可收缩,保持原始的宽度。所以,第三个子元素保持原有宽度(120px),第一和第二个子元素同等收缩(默认值为1)

2:此时三个子元素的收缩比例为1:1:2

当然,我们也可以同时修改三个子元素的
flex-shrink。在这里,我只展示将三个子元素同时设置为flex-shrink: 0时的情形,其他情况读者可自行敲代码感受🧐
当三个子元素同时设置不可收缩时,很明显已经超出父元素容器......
order
order可以改变某一个子项的位置。属性值有:-1 | 0 | 1。为了有比较直观的感受,该属性的演示将作用于第二个子元素(.second)其中:
0:默认值

-1:可将某一个子项放在最前面显示

1:可将某一个子项放在最后面显示

flex-basis
flex-basis决定了在分配空间之前该元素的默认大小。当某个子元素同时出现width和flex-basis时,会优先使用flex-basis。现在,我们将.child的宽度由120px再改回原来的50px。属性值有:auto | px其中:
auto:默认值。子元素有
width时就占据该width,反之,则根据内容来
还可以设置具体的
px。笔者将第三个子元素的flex-basis分别设置成100px和250px来进行演示:100px
250px,当设置成250px时,由于第一和第二个子元素的宽度为50px,那么剩余空间只有200px(父元素宽为300px),不满足250px,此时,第一和第二个子元素会收缩
flex
flex是flex-grow、flex-shrink和flex-basis的缩写形式(flex-shrink和flex-basis的参数可省略),格式如下:flex-flow: 0 1 auto;align-self
align-self可以单独控制某一个子项的垂直对齐方式。还记得之前介绍的align-items吗?没错,align-items控制的是全体子项的垂直对齐方式。align-self的属性值和align-items的属性值一模一样,在此就不再赘述了🤯 唯一有区别的是:align-self多了一个auto(默认值),代表的意思是继承align-items的属性值结语
注意:在
Flex布局下,子元素的float、clear、vertical-align属性都将失效
Flex布局的相关属性以及注意事项都已介绍完毕👏 发现还是有挺多内容的!但通过实践相信大家都能拿捏这些属性,成为更优秀的打工人😏- 作者:Leeson
- 链接:https://looseli.top//article/flex
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章






