1.概述
Flexbox
是 flexible box
的简称(注:意思是“灵活的盒子容器
”),是 CSS3 引入的新的布局模式。
它决定了元素如何在页面上排列,使它们能在不同的屏幕尺寸和设备下可预测地展现出来。
它之所以被称为 Flexbox
,是因为它能够扩展和收缩 flex 容器内的元素,以最大限度地填充可用空间。
与以前布局方式(如 table 布局和浮动元素内嵌块元素)相比,
Flexbox
是一个更强大的方式:
- 在不同方向排列元素
- 重新排列元素的显示顺序
- 更改元素的对齐方式
- 动态地将元素装入容器
2.基本概念
采用 Flex
布局的元素,称为 Flex
容器(flex container
),简称"容器
"。
它的所有子元素自动成为容器成员,称为 Flex
项目(flex item
),简称"项目
"。
在 Flexbox
模型中,有三个核心概念:
flex
项(注:也称 flex
子元素),需要布局的元素-
flex
容器,其包含 flex
项 - 排列方向(
direction
),这决定了 flex
项的布局方向
只要在一个元素的 CSS 中添加display: flex;
,
就可以使用其它 flex 属性来构建响应式页面了。
3.属性
(1)flex-direction:
- row(默认值):主轴为水平方向,起点在左端。
- row-reverse:主轴为水平方向,起点在右端。
- column:主轴为垂直方向,起点在上沿。
- column-reverse:主轴为垂直方向,起点在下沿。
(2)justify-content 属性描述
- flex-start(默认值):左对齐
- flex-end:右对齐
- center: 居中
- space-between:两端对齐,项目之间的间隔都相等。
- space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
(3)align-items
align-items
属性与justify-content
类似。
Flex 容器中,与主轴垂直的叫做 cross axis(交叉轴)。
行的交叉轴是垂直的,列的交叉轴是水平的。
- flex-start:交叉轴的起点对齐。
- flex-end:交叉轴的终点对齐。
- center:交叉轴的中点对齐。
- baseline: 项目的第一行文字的基线对齐。
- stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
(4)flex-wrap
CSS flexbox 有一个把 flex 子元素拆分为多行(或多列)的特性。
默认情况下,flex 容器会调整项目大小,把它们都塞到一起。
如果是行的话,所有项目都会在一条直线上。
不过,使用flex-wrap
属性可以使项目换行。
这意味着多出来的项目会被移到新的行或列。
换行发生的断点由项目和容器的大小决定。
换行方向的可选值有这些:
nowrap:默认值,不换行。
wrap:行从上到下排,列从左到右排。
wrap-reverse:行从下到上排,列从左到右排。
(5) flex-shrink
flex-shrink
属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
如果所有项目的flex-shrink
属性都为1,当空间不足时,都将等比例缩小。
如果一个项目的flex-shrink
属性为0,其他项目都为1,则空间不足时,前者不缩小。
项目的flex-shrink
属性接受 number 类型的值。
数值越大,该项目与其他项目相比会被压缩得更厉害。
负值对该属性无效。
(6)flex-grow
与flex-shrink
相对的是flex-grow
。
flex-shrink
会在容器太小时对元素作出调整。
相对应的,flex-grow
会在容器太大时对元素作出调整。
如果一个项目的flex-grow
属性值为 1
,
另一个项目的flex-grow
属性值为 2
,
那么后者会较前者扩大 2 倍。
(7)flex-basis
flex-basis
属性定义了在使用 CSS 的flex-shrink
或flex-grow
属性对项目进行调整前,项目的初始大小。
flex-basis
属性的单位与其他表示尺寸的属性的单位一致(px
、em
、%
等)。
定义在分配多余空间之前,项目占据的主轴空间。
默认值为auto,浏览器根据此属性检查主轴是否有多余空间。
设置的flex-basis
是分配多余空间之前项目占据的主轴空间,如果空间不足则默认情况下该项目也会缩小。
设置flex-basis为350px,但空间充足
空间不足,项目缩小,小于设定值
(8)flex
flex
属性是 flex-grow,flex-shrink 和 flex-basis 的简写。
所以 flex-grow
、flex-shrink
和flex-basis
属性可以在flex
中一同设置。
flex
属性的默认设置是flex: 0 1 auto;
flex: 1 0 10px;
等价于
flex-grow: 1;
flex-shrink: 0;
flex-basis: 10px;
(9)order
order
属性告诉 CSS flex 容器里项目的顺序。
默认情况下,项目排列顺序与源 HTML 文件中顺序相同。
这个属性接受数字作为参数,可以使用负数。
(10)align-self
align-self
属性允许你调整每个项目自己的对齐方式,而不是一次性设置全部项目。
因为float
、clear
和vertical-align
等调整对齐方式的属性都不能应用于 flex 子元素,
所以这个属性显得十分有用。
align-self
可设置的值与align-items
的一样,并且它会覆盖align-items
的值。
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}