CSS position
属性详解
position
属性用于定义元素的定位方式,结合 top
right
bottom
left
和 z-index
属性控制元素位置。
📌 属性值
1. static
(默认值)
- 特性
- 元素按照正常文档流排列
top
/right
/bottom
/left
/z-index
无效- 不会创建新的层叠上下文
div {
position: static;
}
2. relative
(相对定位)
- 特性
- 元素保留原始文档流位置
- 通过
top
/right
/bottom
/left
相对于原始位置偏移 - 会创建新的层叠上下文
.box {
position: relative;
top: 20px;
left: 30px;
}
3. absolute
(绝对定位)
- 特性
- 元素脱离文档流
- 相对于最近的非
static
定位祖先元素定位 - 如果没有定位祖先,则相对于
<html>
根元素 - 常用组合:父元素
position: relative
+ 子元素position: absolute
.parent {
position: relative;
}
.child {
position: absolute;
top: 0;
right: 0;
}
4. fixed
(固定定位)
- 特性
- 元素脱离文档流
- 相对于浏览器视口 (viewport) 定位
- 滚动页面时保持固定位置
- 常见应用:固定导航栏、弹窗
.navbar {
position: fixed;
top: 0;
left: 0;
width: 100%;
}
5. sticky
(粘性定位)
- 特性
- 混合
relative
和fixed
特性 - 在阈值范围内表现为
relative
,超过阈值后表现为fixed
- 需要指定
top
/right
/bottom
/left
中的至少一个值 - 兼容性:现代浏览器支持良好(需注意 IE 不支持)
- 混合
.header {
position: sticky;
top: 0; /* 当滚动使元素到视口顶部 0px 时固定 */
}
🎯 特殊特性
-
层叠顺序
- 通过
z-index
控制重叠元素的显示顺序(仅对定位元素有效)
- 通过
-
定位上下文
absolute
元素的定位基准取决于最近的定位祖先元素
-
滚动行为
fixed
元素不随页面滚动,但会随包含滚动容器的transform
属性变化
🌟 新增实验性值 (部分浏览器支持)
position: anchor()
元素根据锚点定位(需配合anchor-name
和anchor()
函数使用)
🛠️ 使用场景对比
定位方式 | 文档流 | 定位基准 | 典型应用场景 |
---|---|---|---|
static | 保持 | - | 默认布局 |
relative | 保持 | 自身原始位置 | 微调元素位置 |
absolute | 脱离 | 最近定位祖先 | 弹出菜单/图标定位 |
fixed | 脱离 | 浏览器视口 | 固定导航/广告 |
sticky | 保持→脱离 | 最近滚动祖先视口 | 吸顶导航/表格冻结标题列 |
💡 最佳实践
- 优先使用
flex
/grid
布局,必要时再使用定位属性- 避免滥用
fixed
定位(可能影响移动端体验)- 使用
sticky
时需明确指定阈值(如top: 0
)