快速入门Flex布局

561 阅读4分钟

Flex布局

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

一、flex弹性盒子概念

弹性盒子是一种用于按行或按列布局元素的一维布局方法 。元素可以膨胀以填充额外的空间, 收缩以适应更小的空间。

而我们为什么需要使用flex布局呢,相较于position定位布局和float浮动布局,flex布局操作更加的灵活和简便,解决元素居中问题, 自动弹性伸缩,适配不同大小的屏幕,和适配移动端。

二、flex模型

如果一个元素设置了display:flex(即开启了flex布局),那么它就是这个弹性盒子的flex container,其直接子元素叫做flex items

当元素表现为flex盒子是,它们沿着两个轴布局:

01.png

flex布局是用于按行或按列布局元素当布局方法,其中设定有主轴main axis,交叉轴cross axis(垂直于主轴),它们代表着flex元素排列的方向,比如为flex盒子设置主轴flex-direction:row(默认值),即该弹性盒子横向排列,所以主轴为横向的行,交叉轴为纵向的列。

两条轴有起始线(main/cross-start)与结束线(main/cross-end)。

三、flex布局方法

flex-container

02.png

html代码结构:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
	<style>
		#flexbox{
			display: flex;
			background-color: aqua;
			width: 600px;
			height: 600px;
			flex-flow: row wrap;
			align-items: center;
		}
		.item{
			width: 120px;
			height: 100px;
			background-color: antiquewhite;
			border: 3px solid black;
			margin : 1px;
			font-size: 30px;
		}
	</style>
</head>
<body>
	<div id='flexbox'>
		<div class="item">1</div>
		<div class="item">2</div>
		<div class="item">3</div>
		<div class="item">4</div>
		<div class="item">5</div>
		<div class="item">6</div>
		<div class="item">7</div>
		<div class="item">8</div>
		<div class="item">9</div>
	</div>
</body>
</html>

flex-direction 设置主轴方向

参数主轴方向
row(默认值)左⇒右
column上⇒下
row-reverse右⇒左
column-reverse下⇒上

主轴方向默认为row(从左到右) 03.png

设置主轴为column(从上到下) 04.png

flex-direction:row-reverse 05.png

flex-direction:column-reverse 06.png

flex-wrap 主轴 行满是否换行

参数操作
nowrap(默认值)不换行压缩密度
wrap换行
wrap-reverse反向换行

07.png

08.png

09.png

flex-flow

flex-direction 和 flex-wrap的结合体

flex-low: [flex-direction] [flex-wrap]

10.png

justify-content 主轴元素对齐方式

参数操作
flex-start(默认值)与main-start对齐(一般是左方向)
flex-end与main-end对齐(一般是右方向)
center靠着主轴居中对齐(一般就是居中对齐)
space-between两端对齐,靠着容器壁,剩余空间平分
space-around分散对齐,不靠着容器壁,剩余空间在每个项目二侧平均分配
space-evenly平均对齐,不靠着容器壁,剩余空间平分

11.png

12.png

13.png

之上所有操作都是只对于主轴,要想达到完全效果,还有接下来的交叉轴元素对齐设置。

align-items item在交叉轴上的对齐方式

参数操作
stretch(默认值)如果项目未设置高度或设为auto,将占满整个容器的高度
flex-start交叉轴的起点对齐
flex-end交叉轴的终点对齐
center交叉轴的中点对齐
baselineitem的第一行文字基线对齐

14.png

15.png

align-content 交叉轴行对齐方式 多行

参数操作
flex-start(默认)靠着cross-start对齐
flex-end靠着cross-end对齐
center靠着cross线居中对齐
space-between两端对齐,靠着容器上下壁,剩余空间平分
space-around分散对齐,不靠着容器壁,剩余空间在每个项目二侧平均分配
strentch伸缩,占满整个高度

16.png

17.png

18.png

flex-items

19.png

flex-grow

参数操作
0默认值不放大,保持初始值
initial设置默认值,与0等效
n放大因子: 正数

20.png

flex-shrink

1 默认值允许项目收缩
initial设置初始默认值,与 1 等效
0禁止收缩,保持原始尺寸
n收缩因子: 正数

21.png

flex-basis

参数操作
autoitem原来大小
其它大小设置item

22.png

order

参数操作
o (默认值)顺序不变
任意数数值越小,排列越前

23.png

align-self 自定义某个item的对齐方式

参数操作
auto默认值继承 align-items 属性值
flex-start与交叉轴起始线对齐
flex-end与交叉轴终止线对齐
center与交叉轴中间线对齐: 居中对齐
stretch在交叉轴方向上拉伸
baseline与基线对齐(与内容相关用得极少)

24.png

四、总结

相信看到这里,你对flex布局已经了解了不少,本文只是对常用对flex布局对一些属性做了简单对介绍,对于更多flex相关的知识可以移步MDN文档flexBox了解更多!