前言
本系列主要整理前端面试中需要掌握的知识点。本节介绍flex弹性布局和grid网格布局。
一、flex弹性布局
1、flex弹性布局是什么
对父盒子设置成弹性布局,他的所有子元素自动成为容器成员,称为flex项目item。容器中默认存在两条轴,主轴和交叉轴,呈90度关系。项目默认沿主轴排列,通过flex-direction来决定主轴的方向。每个轴都有自己的起点和终点。
2、容器的属性
容器属性名称 | 属性意义 | 属性可能的值 |
---|---|---|
flex-direction | 决定item排列方向 | row,row-reverse,column,column-reverse |
justify-content | item在主轴上的对齐方式 | flex-start,flex-end,center,space-between,space-around |
flex-wrap | 排列不下时,item如何换行 | nowrap,wrap,wrap-reverse |
align-content | 侧轴上子元素的排列方式(多行) | flex-start,flex-end,center,space-between,space-around,stretch |
align-items | 侧轴上子元素的排列方式(单行) | flex-start,flex-end,center,space-between,space-around,stretch |
flex-flow | 复合属性 | 相当于同时设置了flex-direction和flex-wrap |
- flex-direction:决定主轴的方向
.container {
flex-direction: row | row-reverse | column | column-reverse;
}
(1)row(默认):主轴为水平方向,起点在左端;
(2)row-reverse:主轴为水平方向,起点在右端;
(3)column:主轴为垂直方向,起点在上沿;
(4)column-reverse:主轴为垂直方向,起点在下沿。
2. justify-content:在主轴上的对齐方式
.box {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
(1)flex-start(默认值):左对齐
(2)flex-end:右对齐
(3)center:居中
(4)space-between:两端对齐,项目之间的间隔都相等
(5)space-around:两个项目两侧间隔相等
3. flex-wrap:排列不下时,item如何换行。
(1)nowrap(默认值):不换行
(2)wrap:换行,第一行在下方
(3)wrap-reverse:换行,第一行在上方
-
align-content :侧轴上子元素的排列方式(多行),如果项目只有一根轴线,该属性不起作用。
(1)flex-start:与交叉轴的起点对齐
(2)flex-end:与交叉轴的终点对齐
(3)center:与交叉轴的中点对齐
(4)space-between:与交叉轴两端对齐,轴线之间的间隔平均分布
(5)space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍
(6)stretch(默认值):轴线占满整个交叉轴 -
align-items:定义项目在交叉轴上如何对齐
(1)lex-start:交叉轴的起点对齐
(2)flex-end:交叉轴的终点对齐
(3)center:交叉轴的中点对齐
(4)baseline: 项目的第一行文字的基线对齐
(5)stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度
3、成员的属性
成员属性名称 | 属性意义 | 属性可能的值 |
---|---|---|
item的属性 | order | 定义item的排列顺序 |
flex-grow | 当有多余空间时,item的放大比例 | 默认为0,即有多余空间时也不放大 |
flex-shrink | 当空间不足时,item的缩小比例 | 默认为1,即空间不足时缩小 |
flex-basis | 项目在主轴上占据的空间 | 长度值,默认为auto |
flex | grow,shrink,basis的简写 | 默认值为0 1 auto |
align-self | 单个item独特的对齐方式 | 同align-items,可覆盖align-items属性 |
二、grid网格布局
1、grid布局是什么
grid布局是一个二维布局,由纵横相交的两组网格线形成的框架性布局结构,能够同时处理行与列。它擅长将一个页面划分为几个主要区域,以及定义这些区域的大小、位置、层次等关系。
<body>
<div class="container">
<div class="item item-1">
<p class="sub-item"></p>
</div>
<div class="item item-2"></div>
<div class="item item-3"></div>
</div>
</body>
.container
元素是容器,.item
就是项目,由于网格元素只能是容器的顶层子元素,所以p
元素并不是网格元素。
2、容器的属性
容器属性名称 | 属性意义 | 属性可能的值 |
---|---|---|
display | 网格容器类型 | grid,inline-grid |
grid-template-columns | 列宽 | |
grid-template-rows | 行高 | |
grid-row-gap | 行间距 | |
grid-column-gap | 列间距 | |
grid-template-areas | 一个区域由一个或者多个单元格组成 | |
grid-auto-flow | 划分网格以后,容器的子元素会按照顺序,自动放置在每一个网格。 | |
justify-items,align-items | 单元格内容的水平位置,垂直位置 | start ,end,center,stretch |
justify-content,align-content | 整个内容区域在容器里面的水平位置,垂直位置 | start ,end,center,stretch,space-around,space-between,space-evenly |
3、项目属性
-
grid-column-start 属性、grid-column-end 属性、grid-row-start 属性以及grid-row-end 属性
指定网格项目所在的四个边框,分别定位在哪根网格线,从而指定项目的位置
(1)grid-column-start 属性:左边框所在的垂直网格线
(2)grid-column-end 属性:右边框所在的垂直网格线
(3)grid-row-start 属性:上边框所在的水平网格线
(4)grid-row-end 属性:下边框所在的水平网格线 -
grid-area 属性:指定项目放在哪一个区域,与上述讲到的grid-template-areas搭配使用。
-
justify-self 属性、align-self 属性以及 place-self 属性:
(1)justify-self属性设置单元格内容的水平位置(左中右),跟justify-items属性的用法完全一致,但只作用于单个项目。
(2)align-self属性设置单元格内容的垂直位置(上中下),跟align-items属性的用法完全一致,也是只作用于单个项目。