清除浮动:
- clear 属性 + div 隔墙(或者伪元素)
- bfc
容器属性:
- flex-direction属性决定主轴的方向;
- flex-wrap属性定义,如果一条轴线排不下,如何换行;
- flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap;
- justify-content属性定义了项目在主轴上的对齐方式。
- align-items属性定义项目在交叉轴上如何对齐。
- align-content属性定义了多根轴线(多行)的对齐方式。如果项目只有一根轴线,该属性不起作用。
子元素属性:
- order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
- flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
- flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
- flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。
- flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
- align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。默认值为 auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
六大使用场景
.container {
display: flex;
justify-content: center; /* 主轴居中 */
align-items: center; /* 交叉轴居中 */
}适用:登录弹窗、引导页焦点内容。
.container {
display: flex;
}
.item {
flex: 1; /* 等分剩余空间 */
}适用:卡片内容区、仪表盘统计模块。
.nav {
display: flex;
justify-content: space-between; /* 两侧对齐 */
}适用:顶部导航(左侧Logo + 右侧菜单)、页脚链接。
.container {
display: flex;
flex-wrap: wrap; /* 允许换行 */
gap: 10px; /* 项目间距 */
}适用:商品列表、图片画廊、标签云。
.item:nth-child(1) {
order: 2; /* 调整显示顺序 */
align-self: flex-end; /* 单独对齐 */
}适用:移动端适配调整元素顺序、特殊元素定位。
.form-group {
display: flex;
gap: 8px;
align-items: center;
}
label {
flex: 0 0 100px; /* 固定标签宽度 */
}
input {
flex: 1; /* 输入框自适应 */
}适用:标签-输入框对齐、表单工具条。
作用于父元素:
-
display: grid \ inline-grid
-
用来生成显式的列、行:grid-template-colums/rows: 数值/百分比/fr/repeat() 等
-
规定区域(area)的分布:grid-tempate-areas:
"header header" "sidebar content" "footer footer"; -
规定默认的排序方向:grid-auto-flow: row (dense) I column (dense)
作用于子元素:
- 规定占用的列、行:grid-colum/row:
<start-line>/<end-line> - 规定占用的area:grid-area: header
容器指定了网格布局以后,接着就要划分行和列。grid-template-columns属性定义每一列的列宽,grid-template-rows 属性定义每一行的行高。
.container {
display: grid;
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;
}
.container {
display: grid;
grid-template-columns: 33.33% 33.33% 33.33%;
grid-template-rows: 33.33% 33.33% 33.33%;
}
.container {
display: grid;
grid-template-columns: repeat(3, 33.33%);
grid-template-rows: repeat(3, 33.33%);
}repeat()接受两个参数,第一个参数是重复的次数(上例是3),第二个参数是所要重复的值。
如果希望每一行(或每一列)容纳尽可能多的单元格,这时可以使用auto-fill关键字表示自动填充。
除了auto-fill,还有一个关键字auto-fit,两者的行为基本是相同的。只有当容器足够宽,可以在一行容纳所有单元格,并且单元格宽度不固定的时候,才会有行为差异:auto-fill会用空格子填满剩余宽度,auto-fit则会尽量扩大单元格的宽度。
repeat(auto-fill, 100px)为了方便表示比例关系,网格布局提供了fr关键字(fraction 的缩写,意为"片段")。如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍。
.container {
display: grid;
grid-template-columns: 1fr 1fr;
}表示两个相同宽度的列。
.container {
display: grid;
grid-template-columns: 150px 1fr 2fr;
}第一列的宽度为150像素,第二列的宽度是第三列的一半 75。
minmax()函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值。
grid-template-columns: 1fr 1fr minmax(100px, 1fr);grid-row-gap属性设置行与行的间隔(行间距),grid-column-gap属性设置列与列的间隔(列间距)。
.container {
grid-gap: 20px 20px;
}顺序由grid-auto-flow属性决定,默认值是row,即"先行后列"。也可以将它设成column,变成"先列后行"。
grid-auto-flow: column dense;dense 意思是尽量填满