Web 布局从最初的 Table、Float 发展到现在的 Flex 和 Grid,能力越来越强。掌握 Flex 和 Grid 是现代前端开发的基本功。
Flexbox 用于一维布局(行或列)。
flex-direction: 主轴方向。
row (默认): 水平,从左到右。column: 垂直,从上到下。justify-content: 主轴对齐方式。
flex-start, flex-end, center, space-between (两端对齐), space-around.align-items: 交叉轴对齐方式(单行)。
stretch (默认, 拉伸), flex-start, flex-end, center, baseline.flex-wrap: 是否换行。
nowrap (默认), wrap.flex-grow: 存在剩余空间时,项目的放大比例(默认 0,即存在剩余空间也不放大)。flex-shrink: 空间不足时,项目的缩小比例(默认 1,空间不足时会自动缩小)。flex-basis: 在分配多余空间之前,项目在主轴方向上的初始大小(默认 auto)。flex:
flex: 1 => flex: 1 1 0% (最常用,平均分配剩余空间)。flex: auto => flex: 1 1 auto.flex: none => flex: 0 0 auto (常用于固定侧边栏)。
flex: flex-grow flex-shrink flex-basis的简写,常用来快速设置弹性项目的行为。
Grid 用于二维布局(同时管理行和列),是 CSS 最强大的布局系统。
repeat(): grid-template-columns: repeat(3, 1fr); (3等分)。minmax(): minmax(100px, 1fr) (最小100px,最大自适应)。position 属性指定了元素的定位类型。
| 属性值 | 是否脱离文档流 | 参考点 | 说明 |
|---|---|---|---|
static | 否 | 无 | 默认值,按照正常文档流排列。 |
relative | 否 | 自身位置 | 相对自己原来的位置偏移,原占位保留。常作为 absolute 的父级参照。 |
absolute | 是 | 最近定位祖先 | 相对于最近的非 static 祖先元素定位。若无,则相对于 HTML 根元素。 |
fixed | 是 | 视口 | 随着页面滚动位置固定不变(如导航栏、悬浮按钮)。 |
sticky | 否 (表现像 relative) | 滚动容器 | 粘性定位。跨越特定阈值前为 relative,之后变为 fixed 固定在容器边缘。 |
flex: 1 的完整写法是什么?flex-grow: 1; flex-shrink: 1; flex-basis: 0%;。sticky 定位失效的原因?overflow: hidden / auto / scroll。top / bottom / left / right 阈值。