布局
约 922 个字 20 行代码 预计阅读时间 3 分钟
1 Flex
子元素宽度
- 当 flex 容器宽度足够时,子元素宽度默认为
max-content - 当 flex 容器宽度不足时,子元素宽度默认为
min-content,即最长的单个单词长度
宽度膨胀逻辑
flex-basis: 50px可以直接指定元素宽度- 同时指定
width: npx; flex-basis: auto;时,以width的值为标准
- 同时指定
flex-grow: n中n即为该元素在富余宽度中分的的份数(比例)flex-grow: 2的子元素增长两份宽度,flex-grow: 1仅增长一份- 单纯想一个元素宽为另一个的 n 倍时,可以直接使用
flex-basis: 0 + flex-grow: n/1 - 当想让某个元素的宽为其他的 100倍时,需要追加设定
width: 0px来覆盖min-content
- 等分父元素 -
flex-basis: 0px; flex-grow: 1; - 最大不超过具体指定的
max-width
宽度缩小逻辑
- 父元素宽度不足时生效
flex-shrink: 1默认值,每个子元素缩小同样宽度以适应flex-shrink: 0子元素不收缩 - 会导致溢出(自适应的时候挺有用的)- 同理,设置
flex-shrink: n会收缩基础份额的 n倍
- 最低宽度不小于
min-content / min-width
对齐
- 交叉轴对齐
align-itemsstretch默认值,把所有元素的高度统一为 max(子元素 height)flex-start / flex-end分别使得子元素在副轴起始/终止处对齐(此时高度为 fit)center使得子元素关于副轴中心对齐baseline首行文字基线对齐(某一个 font-size 特别大可能会导致对齐线下移)
- 主轴对齐
justify-contentflex-start默认按照主轴起点对齐space-between两端没有空格,中间间隙均分富余空间space-around中间间隔为 2 * 两端space-evenly中间与两端间隔大小一致
- 多轴对齐(多行情况下)
align-contentnormal默认,不对齐flex-start按副轴开始处对齐(行高适应改行最高元素),flex-end基本同理space-around同行元素无间隔,行间距中间为 2 * 首尾,其余同理
换行
flex-wrapno-wrap默认不换行wrap换行wrap-reverse把最后一行当成第一行
排序
order0默认值,正序排列(html书写顺序)1-N排列下标(从 1 开始编号,可以手动指定标签视觉上的排列顺序)
2 Grid - 网格
列
display: gird默认为 1 列- 我们可以通过
grid-template-columns: 100px 100px 100px; / repeat(12, 50px);- 此处我们可以手动依次输入每一列的宽度
- 也可以使用
repeat(times, width_each)达到同时指定多列的效果
- 平分父元素
grid-template-columns: 1fr 1fr 1fr;- 此处的
fr = fraction即为宽度所占总宽的份数 - 实现一个 1:2:1 的布局可以这样
grid-template-columns: 1fr 2fr 1fr; fr中间也可以突然嵌入px作为固定宽度单位
- 此处的
- 自动决定列数
grid-template-columns: repeat(autofill, width_each)会根据父元素的实际宽度决定每行具体填入多少个元素,是动态的- 我们也可以手动设置最小最大值
repeat(autofill, minmax(50px, 1fr))
- 我们也可以手动设置最小最大值
grid-column-gap手动指定列艰间距
行
gird-template-rows手动指定,基本同理grid-auto-rows: auto / 100px前者即为元素本身高度,后者为定高gird-template-rows优先级高于grid-auto-rows,未被前者指定的宽度将使用后者的规则grid-row-gap: 20px手动指定行距
合并单元格
- 描述每一个单元格的位置信息
- 在涉及合并的表格中。需要手动描述每一个单元格的范围信息
- 以分割线为单位计量(也可以理解为前闭后开?)
- 列
grid-column-startgrid-column-end- 简写
gird-column: start/end,跨度为1时可以只写start
- 行
grid-row-startgrid-row-end- 简写
grid-row: start / end,跨度为1时可以只写start
- 在父元素中划分
grid-area(一个 3*2 的例子)