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:居中对齐
notion image
space-around:每个flex子项左右两边有等宽的间距。所以,第一个flex子项的左侧和最后一个flex子项的右侧间距只有中间间距的一半
notion image
space-between:两端对齐
notion image
space-evenly:每个flex子项左右两边间距完全相等。注意和space-around区分
notion image
flex-start:左对齐(默认值)
notion image
flex-end:右对齐
notion image

align-items

align-items决定了垂直方向上flex子项的对齐方式,属性值有center | stretch | flex-start | flex-end | baseline
其中:
center:垂直居中对齐
notion image
stretchflex子项拉伸(默认值)。如果子项没有指定高度,则会拉伸至容器高度。反之就渲染指定的高度
notion image
flex-start:容器顶部对齐
notion image
flex-end:容器底部对齐
notion image
baseline:相对于容器的基准线对齐
notion image

flex-direction

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

flex-wrap

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

flex-flow

flex-flowflex-directionflex-wrap的缩写形式,格式如下:flex-flow: row wrap;

align-content

align-contentjustify-content属性是相似的。justify-content规定了flex子项水平方向上对齐方式,而align-content则是规定flex子项垂直方向上的对齐方式。属性值和justify-content的值一样,这里就不再一一介绍了。
Tips:如果flex子项只有一行的话,该属性是没有效果的

作用在子项上的属性

该标题下所介绍的所有属性,均写在具体某一个子元素下。笔者将属性写在第三个子元素.third

flex-grow

flex-grow:扩展flex子项所占据的宽度。什么意思呢?当某一个子项设置该属性时,会根据该属性的值进行除去元素外剩余空间的占据。属性值是0 ~ 1之间的数字。我们先来看只有一个子项(第三个子元素)设置该属性时
其中: 0:不占据剩余空间(默认值)
notion image
0.5:占据剩余空间的一半
notion image
1:占据全部剩余空间。Tips:值大于1时,效果和1一样
notion image
当有多个子项同时设置该属性时,会根据比例进行剩余空间的分配。在此情景中,我给第一和第二个子元素设置flex-grow: 0.25,这意味着第一和第二子元素平分剩余空间的50%。依旧改变第三个子元素的flex-grow
其中: 0:剩余50%的剩余空间,另50%第一二子元素平分
notion image
0.25:三个子元素平分75%的剩余空间。还剩25%的剩余空间
notion image
0.5:剩余0%的剩余空间:第三个子元素占据剩余空间的50%,另50%第一二子元素平分
notion image
1:效果同0.5
notion image

flex-shrink

如果说flex-grow是子元素利用剩余空间进行扩展,那么flex-shrink则是子元素在空间不足的情况下进行宽度的收缩。我们将.child元素样式进行简单的修改(上文已粘贴样式代码),将width: 50px改为width: 120px
我们先来看看只在一个子项(第三个子元素)上修改该属性时,
其中:
1:默认值,子元素可收缩。此时三个子元素同等收缩
notion image
0:子元素不可收缩,保持原始的宽度。所以,第三个子元素保持原有宽度(120px),第一和第二个子元素同等收缩(默认值为1)
notion image
2:此时三个子元素的收缩比例为1:1:2
notion image
当然,我们也可以同时修改三个子元素的flex-shrink。在这里,我只展示将三个子元素同时设置为flex-shrink: 0时的情形,其他情况读者可自行敲代码感受🧐 当三个子元素同时设置不可收缩时,很明显已经超出父元素容器......
notion image

order

order可以改变某一个子项的位置。属性值有:-1 | 0 | 1。为了有比较直观的感受,该属性的演示将作用于第二个子元素(.second)
其中:
0:默认值
notion image
-1:可将某一个子项放在最前面显示
notion image
1:可将某一个子项放在最后面显示
notion image

flex-basis

flex-basis决定了在分配空间之前该元素的默认大小。当某个子元素同时出现widthflex-basis时,会优先使用flex-basis。现在,我们将.child的宽度由120px再改回原来的50px。属性值有:auto | px
其中:
auto:默认值。子元素有width时就占据该width,反之,则根据内容来
notion image
还可以设置具体的px。笔者将第三个子元素flex-basis分别设置成100px250px来进行演示:
100px
notion image
250px,当设置成250px时,由于第一和第二个子元素的宽度为50px,那么剩余空间只有200px(父元素宽为300px),不满足250px,此时,第一和第二个子元素会收缩
notion image

flex

flexflex-growflex-shrinkflex-basis的缩写形式(flex-shrinkflex-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布局的相关属性以及注意事项都已介绍完毕👏 发现还是有挺多内容的!但通过实践相信大家都能拿捏这些属性,成为更优秀的打工人😏
TypeScript 基础(二)居中对齐的几种方式
Loading...