1. 弹性盒模型简介
弹性盒模型(Flexbox)是CSS3中新增的一种布局模式,它使得容器能够轻松地处理在不同屏幕尺寸下的布局问题。弹性盒模型可以将容器分割成一个或多个弹性盒子(Flex Box),并且通过设置容器的属性与子元素的属性来控制这些弹性盒子的大小、位置、排列等。
弹性盒模型的使用优势主要有以下几点:
能够自适应不同屏幕尺寸
能够方便的进行垂直或水平居中
能够实现复杂的布局
能够控制容器内部元素的排列方式
2. 弹性盒模型的属性
2.1. 容器属性
2.1.1. display
display属性指定一个元素是否被渲染为弹性盒子容器,并且可以取下列值:
flex:将容器设置为弹性盒子,弹性盒子会按照内部元素自动排列,此为初始值
inline-flex:与flex相似,但是弹性盒子将渲染为行内元素
none:完全隐藏元素
实例代码如下:
.flex-container {
display: flex;
}
.inline-flex-container {
display: inline-flex;
}
.hidden {
display: none;
}
2.1.2. flex-direction
flex-direction属性指定弹性盒子内部的子元素排列方向,可以取下列值:
row:弹性盒子内部的子元素排列为水平方向,此为初始值
row-reverse:与row相似,但是子元素排列方向与row相反
column:弹性盒子内部的子元素排列为垂直方向
column-reverse:与column相似,但是子元素排列方向与column相反
实例代码如下:
.flex-row {
flex-direction: row;
}
.flex-row-reverse {
flex-direction: row-reverse;
}
.flex-column {
flex-direction: column;
}
.flex-column-reverse {
flex-direction: column-reverse;
}
2.1.3. justify-content
justify-content属性指定弹性盒子内部子元素在主轴上的对齐方式,可以取下列值:
flex-start:子元素在主轴方向上起点对齐,此为初始值
flex-end:子元素在主轴方向上终点对齐
center:子元素在主轴方向上居中对齐
space-between:子元素在主轴方向上平均分布,最左边和最右边子元素分别与父元素的起点和终点对齐
space-around:子元素在主轴方向上平均分布,中间子元素之间的间距是边缘子元素到父元素边缘的间距的一半
space-evenly:子元素在主轴方向上平均分布,每个子元素之间的间距相等
实例代码如下:
.justify-start {
justify-content: flex-start;
}
.justify-end {
justify-content: flex-end;
}
.justify-center {
justify-content: center;
}
.justify-between {
justify-content: space-between;
}
.justify-around {
justify-content: space-around;
}
.justify-evenly {
justify-content: space-evenly;
}
2.1.4. align-items
align-items属性指定弹性盒子内部子元素在交叉轴上的对齐方式,可以取下列值:
stretch:子元素在交叉轴上拉伸以填满父元素,此为初始值
flex-start:子元素在交叉轴方向上起点对齐
flex-end:子元素在交叉轴方向上终点对齐
center:子元素在交叉轴方向上居中对齐
baseline:子元素在交叉轴方向上以其基线对齐
实例代码如下:
.align-stretch {
align-items: stretch;
}
.align-start {
align-items: flex-start;
}
.align-end {
align-items: flex-end;
}
.align-center {
align-items: center;
}
.align-baseline {
align-items: baseline;
}
2.1.5. align-content
align-content属性指定弹性盒子内部多行子元素在交叉轴上的对齐方式,可以取下列值:
stretch:多行子元素在交叉轴方向上拉伸以填满父元素,此为初始值
flex-start:多行子元素在交叉轴方向上起点对齐
flex-end:多行子元素在交叉轴方向上终点对齐
center:多行子元素在交叉轴方向上居中对齐
space-between:多行子元素在交叉轴方向上平均分布,最上面和最下面子元素分别与父元素的起点和终点对齐
space-around:多行子元素在交叉轴方向上平均分布,中间子元素之间的间距是边缘子元素到父元素边缘的间距的一半
space-evenly:多行子元素在交叉轴方向上平均分布,每个子元素之间的间距相等
实例代码如下:
.align-content-stretch {
align-content: stretch;
}
.align-content-start {
align-content: flex-start;
}
.align-content-end {
align-content: flex-end;
}
.align-content-center {
align-content: center;
}
.align-content-between {
align-content: space-between;
}
.align-content-around {
align-content: space-around;
}
.align-content-evenly {
align-content: space-evenly;
}
2.2. 子元素属性
2.2.1. order
order属性指定弹性盒子内部子元素的排列顺序,可以取任意整数值,值越小的元素越靠前。此属性不参与大小或位置计算。
实例代码如下:
.item1 {
order: 1;
}
.item2 {
order: 2;
}
.item3 {
order: 3;
}
2.2.2. flex-grow
flex-grow属性指定弹性盒子内部子元素在剩余空间中占据的比例。该属性的默认值为0,即完全不会分配空间给该元素。如果所有的元素都设置了该属性,它们将按照其值的比例来分配剩余空间。
实例代码如下:
.item1 {
flex-grow: 1;
}
.item2 {
flex-grow: 2;
}
.item3 {
flex-grow: 3;
}
2.2.3. flex-shrink
flex-shrink属性指定弹性盒子内部子元素在空间不足的情况下所允许的缩小比例。该属性的默认值为1,即如果空间不足,该元素会相对于其他元素缩小。如果其中一个元素设置了该属性,而其他元素未设置,则该元素将独自承担所有空间分配问题。
实例代码如下:
.item1 {
flex-shrink: 1;
}
.item2 {
flex-shrink: 2;
}
.item3 {
flex-shrink: 3;
}
2.2.4. flex-basis
flex-basis属性指定弹性盒子内部子元素在弹性盒子容器中分配空间之前,元素的占据空间。如果元素的flex-basis属性设置为auto,则其计算值为元素的宽度或高度,具体取决于flex-direction的值。如果指定flex-basis时同时指定了width或height,则flex-basis会被width或height所替代。
实例代码如下:
.item1 {
flex-basis: 20%;
}
.item2 {
flex-basis: 100px;
}
.item3 {
flex-basis: auto;
}
2.2.5. flex
flex属性是flex-grow、flex-shrink和flex-basis的缩写。该属性可以设置子元素占据的空间,并且该属性的默认值为0 1 auto。通常在使用flex的时候,建议设置两个具体的值,而非使用auto。
实例代码如下:
.item1 {
flex: 1 2 20%;
}
.item2 {
flex: 2 1 100px;
}
.item3 {
flex: 3 1 auto;
}
3. 结语
弹性盒模型的属性不仅仅包括上文介绍的这些,还有其他的属性,如align-self、flex-wrap、order等。弹性盒子布局模式是一个强大的工具,可以帮助我们在设计网页时更加方便地处理不同屏幕尺寸的布局问题。在实际开发过程中,我们可以根据实际需要灵活运用这些属性来完成各种复杂的布局效果。