2022-09-15 03:35:27

CSS 定位

position 用来控制元素的定位方式,以及元素是否脱离普通文档流。

属性值:

  • static:静态定位,默认值
  • relative:相对定位
  • absolute:绝对定位
  • fixed:固定定位
  • sticky:粘性定位

定位方式对比

定位方式是否脱离文档流定位参照说明
static普通文档流默认定位方式,偏移属性通常不生效
relative自身原本位置视觉上发生偏移,但原本空间保留
absolute最近的非 static 定位祖先元素不占据原本空间,常配合父元素 relative 使用
fixed通常是视口页面滚动时位置保持固定
sticky最近的滚动容器和父元素边界滚动前像 relative,达到阈值后产生粘性效果

定位相关属性

属性作用
top设置元素上边缘的偏移距离
right设置元素右边缘的偏移距离
bottom设置元素下边缘的偏移距离
left设置元素左边缘的偏移距离
z-index控制元素在层叠方向上的显示顺序

toprightbottomleft 并不是在所有定位方式下都会生效。如 position: static 时,不会生效。

static

  • 不脱离普通文档流。
  • 按照元素在文档中的顺序正常占位。
  • toprightbottomleft 通常不生效。

relative

  • 元素相对于自身原本的位置进行偏移。
  • 不脱离普通文档流。
  • 原本占据的空间仍然保留。
  • 偏移后的视觉位置不会影响其他普通流元素。

absolute

  • 元素脱离普通文档流,不再占据原来的空间。
  • 优先相对于最近的非 static 定位祖先元素。
  • 如果没有这样的祖先元素,通常相对于初始包含块定位(页面根区域)。
  • 元素在布局表现上会发生块级化,如普通行内元素也可以设置宽高。

fixed

  • 脱离普通文档流。
  • 通常相对于视口定位。
  • 页面滚动时,元素位置不会随页面内容滚动。

如果祖先元素设置了 transformfilterperspective 等属性,可能会创建新的包含块,使 fixed 元素相对于该祖先元素定位。

sticky

元素在没有达到指定阈值前,会按照普通文档流排列;当滚动到指定阈值后,会产生类似固定定位的粘性效果。

  • 不脱离普通文档流,原本空间会保留。
  • 必须设置 toprightbottomleft 中至少一个偏移值。
  • 粘性效果会受到父元素和滚动容器边界限制。

一般不生效原因:

  • 没有设置 toprightbottomleft
  • 父元素高度不够,没有可滚动的空间。
  • 祖先元素设置了不合适的 overflow,影响了滚动容器。