Skip to content

CSS Position(定位)

position 决定元素如何在文档中定位:是否脱离正常流、相对于谁偏移。配合 top / right / bottom / left 可以精确控制元素的位置,常用于层叠、悬浮、固定栏等效果。

position 的取值

说明
static默认,正常流,忽略 top/right/bottom/left
relative相对自身原位置偏移,仍占原位置空间
absolute相对最近「定位祖先」定位,脱离正常流
fixed相对视口定位,脱离正常流,滚动时不动
sticky在阈值内像 relative,超过后像 fixed

1. static(默认)

  • 元素按正常文档流排列。
  • 设置的 top、right、bottom、leftz-index 无效。

2. relative(相对定位)

  • 元素仍占原来的空间,再根据 top/right/bottom/left 相对自身原位置偏移。
  • 其它元素布局时仍按它「没偏移前」的位置算,所以会留下空白。
css
.box {
  position: relative;
  top: 10px;
  left: 20px;
}

常用于:微调位置,或作为 absolute 子元素的「定位参考」(见下)。


3. absolute(绝对定位)

  • 元素脱离正常流,不再占位。
  • 位置由 top / right / bottom / left 决定,相对于最近一个 position 不为 static 的祖先(即「定位祖先」);若没有,则相对初始包含块(通常是视口)。
  • 常把父元素设为 position: relative,再让子元素 position: absolute,这样子元素就相对父元素定位。
css
.parent {
  position: relative;  /* 作为子元素的定位参考 */
  width: 300px;
  height: 200px;
}

.child {
  position: absolute;
  bottom: 10px;
  right: 10px;
}

4. fixed(固定定位)

  • 相对视口定位,脱离正常流
  • 滚动页面时,元素位置不变,适合做「固定顶栏」「固定侧边栏」「固定弹窗」等。
css
.header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 100;
}

5. sticky(粘性定位)

  • 在「未滚过阈值」时表现像 relative(仍占位);滚过阈值后像 fixed,相对视口固定。
  • 通过 top(或 bottom 等)设定「粘住」时的位置。
css
.nav {
  position: sticky;
  top: 0;   /* 滚到顶部时粘在视口顶部 */
  background: white;
  z-index: 10;
}

注意:父元素不能有 overflow: hidden,否则 sticky 可能失效。


top / right / bottom / left

  • relative:相对自身原位置偏移。
  • absolute / fixed:相对其定位参考(定位祖先或视口)的对应边。
  • 单位可用 px、em、%、等。同时设 left 和 right 可间接定宽度(需配合 width 或留空让浏览器算)。

z-index(层叠顺序)

当多个定位元素重叠时,z-index 数值大的在上层。仅对 position 不为 static 的元素有效。

css
.modal {
  position: fixed;
  z-index: 1000;
}

小结

  • static:默认,正常流。
  • relative:相对自身偏移,仍占位;常作 absolute 的参考。
  • absolute:相对定位祖先定位,脱离流。
  • fixed:相对视口,滚动不动。
  • sticky:滚动到阈值后「粘」在视口。
  • 定位后用 top/right/bottom/left 设位置,用 z-index 控制谁在上层。

下一节学习 CSS Overflow:内容溢出时的裁剪与滚动。