CSS Flexbox,灵活盒子布局模块, 是“Flexible Box Layout”的缩写,是一种布局模型,可以安排容器内各个项目之间的空间分布和对齐功能,让您比传统方法更轻松、更高效地设计复杂的网页布局。 它的一个重要优势是更有效的在容器中的项目之间分配空间,即使它们的大小未知或动态。 Flexbox是一维布局工具,一次只处理行或者列(一维布局)。 这与 CSS Grid网格布局的二维模型形成对比,后者同时控制列和行。
以下是 CSS Flexbox 工作原理的详细说明:
容器和项目(项目是容器里面的内容):要使用 Flexbox,您首先需要一个 Flex 容器。 增加CSS属性给容器, display: flex;
或 display: inline-flex;
属性将任何HTML Elements元素设为 Flex 容器。 一旦一个元素成为弹性容器,它的直接子元素就成为flex项目。
.container { display:flex; }
主轴和交叉轴:Flexbox 使用两个轴 - 主轴和交叉轴(或者使用行和列的概念)。 默认情况下,主轴水平延伸(从左到右),交叉轴垂直延伸(从上到下)。 可以根据需要更改这些轴的方向。Flexbox每次只能工作在一个轴向,默认轴是水平轴。
Flex容器的属性
display
:将元素定义为 Flex 容器。flex-direction
:指定主轴方向。 它可以是row
、row-reverse
、column
或column-reverse
。flex-wrap
:确定弹性项目是强制单行还是可以换行。justify-content
:沿主轴对齐弹性项目。align-items
:沿交叉轴对齐弹性项目。align-content
:当横轴上有额外空间时,对齐 Flex 容器内的 Flex 线。
.container {
display: flex;
flex-direction: row; /* or column, row-reverse, column-reverse */
flex-wrap: nowrap; /* or wrap, wrap-reverse */
justify-content: flex-start; /* or flex-end, center, space-between, space-around */
align-items: stretch; /* or flex-start, flex-end, center, baseline */
align-content: stretch; /* or flex-start, flex-end, center, space-between, space-around */
}
flex-direction 排列方向
例一:
flex-direction: row
沿水平方向排列,从左向右1
2
3
例二:
flex-direction: column
沿垂直方向排列,从上向下1
2
3
例三:
flex-direction: row-reverse
水平方向,但顺序颠倒1
2
3
例四:
flex-direction: column-reverse
垂直方向,但顺序颠倒1
2
3
flex-wrap 换行
例一:
flex-wrap: nowrap
强制一行(或一列)width: 50%
width: 20%
width: 50%
例二:
flex-wrap: wrap
允许换行width: 50%
width: 20%
width: 50%
justify-content 内容分布
例一:
justify-content: flex-start;
起始位置,即左对齐1
2
3
例二:
justify-content: flex-end;
终止位置,即右对齐1
2
3
例三:
justify-content: space-around;
空间围绕于项目(左右或上下)1
2
3
例四:
justify-content: space-between;
空间填充于项目之间1
2
3
align-items 项目在垂直轴向对齐
例一:
align-items: center;
对齐于容器中间。对于水平布局,中间是指垂直方向的中间。1
11
111
11
111
2
22
22
3
例二:
align-items: flex-start;
对齐于容器顶部 (或左边)1
2
3
例三:
align-items: flex-end;
对齐于容器底部(或右边)1
2
3
例四:
align-items: stretch;
项目沿着垂直方向拉伸,充满容器1
11
111
11
111
2
3
例五:
align-items: baseline;
沿着基线对齐1
2
3
Flex 项目属性
order
:指定 Flex 项目相对于 Flex 容器中其他项目的显示顺序。flex-grow
:确定当主轴上有额外空间时,弹性项目相对于其他项目增长多少。flex-shrink
:指定当主轴上没有足够空间时,弹性项目相对于其他项目收缩的程度。flex-basis
:定义 Flex 项目在放入 Flex 容器之前的初始大小。flex
:flex-grow
、flex-shrink
和flex-basis
组合的简写。< /里>
.item {
order: 1;
flex-grow: 1;
flex-shrink: 1;
flex-basis: auto;
/* OR */
flex: 1 1 auto; /* flex-grow flex-shrink flex-basis */
}
例一:
order
定义排列顺序1
style="order:2"
2
style="order:3"
3
style="order:1"
例二:
flex-grow
另一种方法定义项目的宽窄(或高低)1
style="flex-grow: 1"
2
style="flex-grow: 6"
3
style="flex-grow: 3"
例三:
flex-shrink
项目收缩1
2
style="flex-shrink: 0"
3
4
5
例四:
flex-basis
项目的初始宽度(高度)1
2
style="flex-basis: 280px"
3
对齐和排序:Flexbox 提供了用于在 Flex 容器内对齐和排序 Flex 项目的属性。 您可以更改项目的顺序、沿主轴或横轴对齐它们、在它们之间或周围分配空间等等。
Flexbox 功能强大且灵活,允许多种布局,而无需诉诸浮动或定位技巧。 它在现代浏览器中得到广泛支持,是响应式网页设计的重要工具。
最后,让我们利用刚刚学习的知识,来生成一个上下左右居中的布局:
<div class="container">中</div>
/* CSS */
.container {
display: flex;
height: 5rem;
justify-content: center;
align-items: center;
background-color: lightyellow;
}
中