flex布局全解析

1 认识flex布局

flex布局是目前web开发中使用最多的布局方案

flex布局(flexible布局),弹性布局

目前在移动端应用最多,目前PC端也开始使用

1.1 两个重要概念

开启了flex布局的元素叫flex container
flex container里面的直接子元素叫做flex items

1.2 开启flex布局

设置display属性为flex或者inline-flex
flex: 设置元素为块级元素
inline-flex: 设置元素为行内元素

2 flex布局模型

在这里插入图片描述

主要概念:

  • 主轴 main axis
  • 交叉轴 cross axis
  • 主轴开始位置 main start
  • 主轴结束位置 main end
  • 交叉轴开始位置 cross start
  • 交叉轴结束位置 cross end
  • 主轴大小 main size
  • 交叉轴大小 cross size

flex相关属性:

  • 应用在flex container

    • flex-flow
    • flex-direction
    • flex-wrap
    • justify-content
    • align-items
    • align-content
  • 应用在flex item

    • flex
    • flex-grow
    • flex-basic
    • flex-shrink
    • order
    • align-self

3 flex container 属性介绍

3.1 flex-direction

flex-direcotion决定主轴的方向,默认主轴的方向是x轴从左到右

可选参数:

  • row 默认值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8fq5Ehbp-1646636952144)(flex_files/2.jpg)]

  • row-reverse x轴从右到左

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vr85CXV1-1646636952144)(flex_files/3.jpg)]

  • column 主轴为y方向,从上到下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q14NR94z-1646636952144)(flex_files/4.jpg)]

  • column-reverse 主轴为y方向,从下到上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OoWh5poc-1646636952145)(flex_files/5.jpg)]

3.2 justify-content

justify-content决定flex items沿主轴的对齐方式

可选参数:

  • flex-start 从main start开始往后排列各个flex item

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j1aVT1iT-1646636952145)(flex_files/6.jpg)]

  • flex-end 从main end开始往后排列各个flex item

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGW4NukX-1646636952145)(flex_files/7.jpg)]

  • center 居中排列各个flex item

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F3SJavFj-1646636952145)(flex_files/8.jpg)]

  • space-between 左右两个靠边,中间间隔相等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zd3t3p8S-1646636952146)(flex_files/9.jpg)]

  • space-evenly 所有间隔均相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WqttekSe-1646636952146)(flex_files/10.jpg)]

  • space-around 左右两个旁边的间距是中间间距的1/2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y5iJ6ZYf-1646636952146)(flex_files/11.jpg)]

3.3 align-item

align-item决定flex items在交叉轴的对齐方式
可选参数:

  • auto 默认值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eRs6l1sg-1646636952147)(flex_files/12.jpg)]

  • stretch 与auto相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b00nQuBW-1646636952147)(flex_files/13.jpg)]

  • center

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oaU7jtUa-1646636952147)(flex_files/14.jpg)]

  • flex-start

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OfzztfDt-1646636952147)(flex_files/15.jpg)]

  • flex-end

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6LwRebaH-1646636952148)(flex_files/16.jpg)]

3.4 flex-wrap

决定多行显示
可选参数

  • nowrap 默认值,将所有flex items都放在同一行显示,如果宽度不够,则压缩flex items

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r30PU4Ky-1646636952148)(flex_files/17.jpg)]

  • wrap 分行显示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PGa9Eu2T-1646636952148)(flex_files/18.jpg)]

  • wrap-reverse 沿着cross axis方向调换两部分内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IrDBvIUl-1646636952148)(flex_files/19.jpg)]

3.5 flex-flow

是flex-direction和flex-wrap的缩写属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pfk8Zxzj-1646636952148)(flex_files/20.jpg)]

相当于:
flex-direction: row-reverse;
flex-wrap: wrap;
justify-content:space-evenly;(保证flex items平均分布)

3.6 align-content

align content 决定多行flex items在cross axis上的对齐方式,用发与justify-content类似

可选参数:

  • strech(默认值)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ePUZsZl-1646636952149)(flex_files/28.jpg)]

  • fixed-start:与cross start对齐

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sDQYdjVu-1646636952149)(flex_files/29.jpg)]

  • fixed-end:与cross end对齐

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cIG9Jmpp-1646636952149)(flex_files/30.jpg)]

  • center:以cross axis的中部对齐

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pmYYktt1-1646636952149)(flex_files/31.jpg)]

  • space-between:flex items之间的距离相等;与cross start、cross end两端对齐

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6JEXAs1p-1646636952149)(flex_files/33.jpg)]

  • space-around: flex items之间的距离相等;flex items与cross start、cross end之间的距离是flex items之间距离的一半

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lPuPtuT1-1646636952150)(flex_files/32.jpg)]

  • space-evenly:flex items之间的距离相等;flex items与cross start、 cross end之间的距离等于flex items之间的距离

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqz3Z7hY-1646636952150)(flex_files/21.jpg)]

4 flex items 属性介绍

4.1 order

决定了flex items 的排布顺序,可以设置任意整数,越小越排在前面,默认值是0

.item1 {
    background-color: aqua;
    /* order: 1 */
}
.item2 {
    background-color: bisque;
}
.item3 {
    background-color: red;
    /* order: -1 */
}

(C:\Users\z004abwh\AppData\Roaming\Typora\typora-user-images\image-20220307135602447.png)]

.item1 {
    background-color: aqua;
    order: 1

}
.item2 {
    background-color: bisque;
}
.item3 {
    background-color: red;
    order: -1
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2OOp7Wpi-1646636952150)(C:\Users\z004abwh\AppData\Roaming\Typora\typora-user-images\image-20220307135705749.png)]

4.2 align-self

覆盖flex-container设置的align-items,默认值为auto,align-self与flex-container的align-items

<style>
.box {
    width: 550px;
    height: 500px;
    background-color: orange;
    display: flex;
    align-items: center;

}
.item {
    height: 100px;
    width: 100px;
    text-align: center;
    color: black;
    font-weight: bold;
}
.item1 {
    background-color: aqua;
    align-self: auto

}
.item2 {
    background-color: bisque;
    align-self: flex-start;
}
.item3 {
    background-color: red;
    align-self: flex-end;
}
</style>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-af4gOk2X-1646636952150)(C:\Users\z004abwh\AppData\Roaming\Typora\typora-user-images\image-20220307141054207.png)]

4.3 flex-grow

flex-grow决定了flex items如果扩展

可以设置任意非负数字(正整数,正小数,0).默认值是0

当flex container在main axis方向上有剩余size时,flex-grow属性才会有效

flex-grow扩展到最大不能超过max-height和max-width

  • flex items的flex grow加和大于1

flex items扩展的size = flex container剩余size(250px)* flex-grow(1) / sum(1+1+1)

<style>
.box {
    width: 550px;
    height: 500px;
    background-color: orange;
    display: flex;

}
.item {
    height: 100px;
    width: 100px;
    text-align: center;
    color: black;
    font-weight: bold;
}
.item1 {
    background-color: aqua;
    flex-grow: 1;
}
.item2 {
    background-color: bisque;
    flex-grow: 1;

}
.item3 {
    background-color: red;
    flex-grow: 1;
}
</style>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AIONEm8c-1646636952150)(C:\Users\z004abwh\AppData\Roaming\Typora\typora-user-images\image-20220307142942381.png)]

  • flex items的flex grow加和小于1

flex items扩展的size = flex container剩余size * flex-grow

<style>
.box {
    width: 550px;
    height: 500px;
    background-color: orange;
    display: flex;

}
.item {
    height: 100px;
    width: 100px;
    text-align: center;
    color: black;
    font-weight: bold;
}
.item1 {
    background-color: aqua;
    flex-grow: 0.2;
}
.item2 {
    background-color: bisque;
    flex-grow: 0.3;

}
.item3 {
    background-color: red;
    flex-grow: 0.1;
}
</style>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RGQBs4Qb-1646636952151)(C:\Users\z004abwh\AppData\Roaming\Typora\typora-user-images\image-20220307143501719.png)]

4.4 flex-shrink

flex-shrink决定了flex items如何收缩,可以设置正数,和0,默认值为1

当flex items在main axis 方向上超过了flex container的size,flex-shrink属性才会有效

flex-shrink收缩后最终size不能小于min-width/min-height

  • 如果所有flex items的flex-shrink总和超过1
<style>
.box {
    width: 500px;
    height: 500px;
    background-color: orange;
    display: flex;

}
.item {
    height: 100px;
    width: 200px;
    text-align: center;
    color: black;
    font-weight: bold;
}
.item1 {
    background-color: aqua;

}
.item2 {
    background-color: bisque;


}
.item3 {
    background-color: red;
    flex-grow: 0.1;
}
</style>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-US1sdza7-1646636952151)(C:\Users\z004abwh\AppData\Roaming\Typora\typora-user-images\image-20220307144319315.png)]

从渲染效果可看出,flex-shrink默认为1

  • 如果所有flex items的flex-shrink总和不超过1
<style>
.box {
    width: 500px;
    height: 500px;
    background-color: orange;
    display: flex;

}
.item {
    height: 100px;
    width: 200px;
    text-align: center;
    color: black;
    font-weight: bold;
}
.item1 {
    background-color: aqua;
    flex-shrink: 0.1;

}
.item2 {
    background-color: bisque;
    flex-shrink: 0.2;


}
.item3 {
    background-color: red;
    flex-shrink: 0.2;
}
</style>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HoFLnjon-1646636952151)(C:\Users\z004abwh\AppData\Roaming\Typora\typora-user-images\image-20220307150350774.png)]

4.5 flex-basis

flex-basic用来设置flex items在main axis方向上的base size 默认值为auto,具体宽度数据为100px

决定flex items最终base size的因素,从优先级高到低

1.max-width\max-height\min-width\min-height

2.flex-basis

3.width\height

4.内容本身的size

4.6 flex

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7vL6FWLy-1646636952151)(C:\Users\z004abwh\AppData\Roaming\Typora\typora-user-images\image-20220307150817822.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kobe_OKOK_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值