css之position的使用

308 阅读3分钟

position

什么元素可以设置position 答: 常见的元素都可以设置position,除position:relativedisplaytable-开头的元素无效。

position取值:

  • static (默认值)
  • relative
  • absolute
  • fixed
  • sticky

static

此时设置toprightbottomleft 和 z-index 属性无效。

1.png

relative

保留元素在标准流的位置,相当于标准流的位置进行定位

  • topbottom,相当于标准流的位置进行y轴定位

4.png

  • leftright,相当于标准流的位置进行x轴定位

8.png

absolute

元素会被移出正常文档流

  • 元素变成块级元素,可以设置widthheight
  • 相对于最近的非 static 定位祖先元素的偏移,默认为document,不受滚动条影响
  • 绝对定位的元素可以设置外边距(margin),且不会与其他边距合并。

直接设置position: absolute;,而不设置toprightbottomleft,则会贴在标准流后面

13.png

设置toprightbottomleft后恢复正常,相当于最近的非 static 定位祖先元素进行偏移

14.png

Attention

元素设置的width,height,marginpadding的值,都相对于最近的非 static 定位祖先元素,而不再是父元素

15.png

fixed

元素会被移出正常文档流

  • 元素变成块级元素,可以设置widthheight
  • 相对于屏幕视口 的位置来指定元素位置,不受滚动条影响
  • 当元素祖先的 transformperspective 或 filter 属性非 none 时,容器由视口改为该祖先。 直接设置position: fixed;,而不设置toprightbottomleft,则会贴在标准流后面

fixed.gif

元素设置的width,height,marginpadding的值,默认都相对于屏幕视口

16.png

sticky

保留元素在标准流的位置,相当于标准流的位置进行定位

  • 相对它的最近滚动祖先最近块级祖先基于toprightbottom, 和 left的值进行偏移。偏移值不会影响任何其他元素的位置。
  • sticky元素会“固定”在离它最近的一个拥有“滚动机制”的祖先上,(当该祖先的overflowhidden,scroll,autooverlay时)

必须设置toprightbottom, 和 left的其中一个,否则无效

没有设置.gif

必须在自己的块级祖先内才可以显示

块级.gif

其他注意点

  1. 设置定位元素会出现层叠上下文,后定位的会遮挡住先定位的,设置z-index解决

19.png 2. 使用position设置widthheight

  • 在没有设置width的定位元素时,如果同时设置rightleft,会被当做width处理

left.png

  • 在没有设置height的定位元素时,如果同时设置topbottom,会被当做height处理

top.png

  1. flex布局中,项目如果设置成position:absolute/fixed中的一个,则会脱离flex布局

23.png 4. 设置position:fixedabsolute后,margin:auto失效

26.png 5. 使用position快速水平垂直居中 默认块级元素可以水平居中,因为块级元素默认占满一行

29.png 使用position占满空间后,使用margin:auto,只占满上下可以垂直居中

32.png