Flex 弹性布局

目前 CSS3 中新增的 Flex 弹性布局已经成为前端页面布局的首选方式,因此这里来介绍一下何为 Flex 弹性布局。

Flex 布局可以为盒状模型提供最大的灵活性,自动弹性伸缩,合适适配不同大小的屏幕。

说明

当父盒子设置为 flex 布局后,子元素的 floatclearvertical-align 属性将失效。

伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 = flex 布局。

任何一种元素都可以指定为 flex 布局。

.wrap {
  display: flex
}
/* 行内元素也可以 */
span {
  display: inline-flex
}

Flex 布局原理

Flex 布局的原理就是通过向父盒子添加 flex 属性,来控制子盒子的位置和排列方式。

1. 基本概念

容器 —— 采用 flex 布局的元素;项目 —— flex 布局中的子元素。

image-20220408170800980

2. 父项常见属性

父项常见属性有 6 个:

属性说明
flex-direction设置主轴方向
justify-content设置主轴上子元素排列方式
flex-wrap设置子元素是否换行
align-content设置侧轴上子元素排列方式(多行)
align-items设置侧轴上子元素排列方式(单行)
flex-flow等于 flex-direction + flex-wrap

父项常见属性


1. 主轴与侧轴

在 flex 布局中,分为主轴(默认 x 轴)和侧轴两个方向:

image-20220408170800980

2. flex-dirction

该属性用于设置主轴方向,有 4 个属性值:

属性值说明
row默认,从左到右
row-reverse从右到左
column从上到下
column-reverse从下到上

注意:主轴和侧轴会发生变化的,子元素根据主轴排列。

3. justify-content

该属性用于设置主轴子元素排列,有 5 个属性值:

属性值说明
flex-start默认(从左到右),从头部开始
flex-end从尾部开始
center在主轴居中对齐
space-around平分剩余空间
space-between先两边贴边,再平分剩余空间

重点记忆:space-between —— 先贴边,在分配剩余空间。

image-20220408170800980

4. flex-wrap

该属性用于设置子元素是否换行,有 2 个属性值:

属性值说明
nowrap默认,不换行
wrap换行

flex 布局中,默认子元素不换行。如果装不下,会自动缩小子元素宽度。

image-20220408170800980

可以通过修改 flex-wrap: wrap 使得换行显示,保留原有大小。

5. align-items

该属性用于设置侧轴上子元素排列方式,适用于单行元素。

属性值说明
flex-start从上到下
flex-end从下到上
center挤在一起居中,垂直居中
stretch默认,拉伸

利用此属性,配合 justify-content 可以实现水平居中、垂直居中。

div {
  display: flex;
  justify-content: center;			// 主轴,默认 x
  align-items: center;					// 侧轴,默认 y
}

注意:重点记忆垂直居中即可。

6. align-content

该属性用于设置侧轴上子元素排列方式,适用于多行元素。

此属性只能用于子项 出现换行 的情况,单行下是无效的。

属性值说明
flex-start默认,侧轴头部开始
flex-end侧轴尾部开始
center在侧轴中间显示
space-around子项在侧轴平分空间
space-between子项在侧轴线分布在两头,在平分空间
stretch设置子项元素高度平分父元素高度
image-20220408193231079

7. flex-flow

flex-flow 属性是 flex-direction 和 flex-wrap 属性的复合属性。

flex-direction: column;
flex-wrap: wrap;
// 以上两句可以简写为
flex-flow: column wrap;

子项常见属性

主要有以下 3 种属性:

属性说明
flex子项占剩余空间的份数
align-self控制子项在侧轴的排列方式
order定义子项的排列顺序(前后顺序)

1. flex

该属性用于说明子项占剩余空间的份数,默认值是 0 。

image-20220408170800980
/* 给定一个父盒子,由三个子盒组成。左右两个子盒宽度固定,中间子盒宽度自适应 */
section {
  display: flex;
  width: 60%;
  height: 150px;
  margin: 0 auto;
}
section div:nth-child(1) {
  width: 100px;
  height: 150px;
  background-color: red;
}
section div:nth-child(1) {
  flex: 1;					/* 将剩余空间分成一份,也就是独占剩余空间 */
  background-color: green;
}
section div:nth-child(3) {
  width: 100px;
  height: 150px;
  background-color: blue;
}

这就是有名的 ” 圣杯布局 “。

2. align-self

该属性用于控制子项自己在侧轴上的排列,不是整体排列,而是让某个子盒单独排列。

image-20220408170800980
div span:nth-child(3) {
	align-self: flex-end;
}

3. order

该属性用于定义项目的排列顺序。数值越小,排列越靠前,默认为 0 。

image-20220408170800980
div span:nth-child(2) {
  order: -1;		// 默认 0
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

imByte

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

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

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

打赏作者

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

抵扣说明:

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

余额充值