Flexbox弹性盒子
Flexbox(弹性盒布局)是一种 CSS 布局模型,用于设计和布局复杂的网页布局,尤其是在响应式设计中非常有用。它使得容器中的子元素可以灵活地排列和对齐,即使在不同的屏幕尺寸和容器大小下也能保持一致的布局。
Flexbox 的基本概念
- Flex容器(Flex Container):这是你要应用 Flexbox 布局的父元素。通过设置
display: flex;
或display: inline-flex;
,你将一个元素转变为 Flex 容器。 - Flex 项目(Flex Items):这是 Flex 容器中的子元素,自动成为 Flex 项目。
Flexbox 的主要属性
1. Flex 容器的属性
display
flex
:将元素定义为 Flex 容器,启用 Flexbox 布局。inline-flex
:将元素定义为内联 Flex 容器,和inline
元素一样在行内显示。
1 | css复制代码.container { |
flex-direction
:定义主轴的方向(即项目排列的方向)。
row
(默认):从左到右排列。column
:从上到下排列。row-reverse
:从右到左排列。column-reverse
:从下到上排列。
1 | css复制代码.container { |
flex-wrap
:定义 Flex 项目是否换行。
nowrap
(默认):不换行。wrap
:换行。wrap-reverse
:反向换行。
1 | css复制代码.container { |
- **
flex-flow
**:简写属性,用于设置flex-direction
和flex-wrap
。
1 | css复制代码.container { |
justify-content
:定义主轴上项目的对齐方式。
flex-start
(默认):对齐到主轴的开始位置。center
:对齐到主轴的中心。flex-end
:对齐到主轴的结束位置。space-between
:项目之间留有均匀的间隔。space-around
:项目周围有均匀的间隔。space-evenly
:项目之间和项目与容器边缘的间隔均匀。
1 | css复制代码.container { |
align-items
:定义交叉轴(主轴的垂直方向)上项目的对齐方式。
stretch
(默认):项目被拉伸以填充容器。flex-start
:对齐到交叉轴的开始位置。center
:对齐到交叉轴的中心。flex-end
:对齐到交叉轴的结束位置。baseline
:项目的文本基线对齐。
1 | css复制代码.container { |
align-content
:定义多行(如果有的话)之间的对齐方式。
stretch
(默认):行之间拉伸以填充容器。flex-start
:对齐到交叉轴的开始位置。center
:对齐到交叉轴的中心。flex-end
:对齐到交叉轴的结束位置。space-between
:行之间留有均匀的间隔。space-around
:行周围有均匀的间隔。space-evenly
:行之间和行与容器边缘的间隔均匀。
1 | css复制代码.container { |
align-items
和
align-content
的区别:
align-items
是用来对齐单行项目。align-content
是用来对齐多行项目。
2. Flex 项目的属性
flex-grow
:定义项目的放大比例。默认为 0,即项目不放大。
- 值为
1
表示项目会填充剩余空间。
- 值为
1 | css复制代码.item { |
flex-shrink
:定义项目的缩小比例。默认为 1,即项目会缩小以适应容器。
- 值为
0
表示项目不会缩小。
- 值为
1 | css复制代码.item { |
flex-basis
:定义在分配多余空间之前,项目占据的初始空间。默认值为
1
auto
。
- 可以设置具体的像素值或百分比。
1 | css复制代码.item { |
flex
:简写属性,用于设置
1
flex-grow
、
1
flex-shrink
和
1
flex-basis
。
- 例如:
flex: 1 0 200px;
相当于设置flex-grow
为1
,flex-shrink
为0
,flex-basis
为200px
。
- 例如:
1 | css复制代码.item { |
align-self
:允许单个项目在交叉轴上的对齐方式不同于其他项目。
- 取值和
align-items
类似:auto
,flex-start
,center
,flex-end
,baseline
,stretch
。
- 取值和
1 | css复制代码.item { |
Flexbox 实例
1 | html复制代码<div class="container"> |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.