CSS属性position与display、overflow、float等属性相互叠加会产生什么效果?

9 min read

如果 positiondisplay 之间的值相互叠加,会产生不同的效果,取决于使用哪种属性值:

  • position: staticdisplay: blockdisplay: inline-block:元素将被认为是一个块级元素,并且将按照文档流的方式进行布局,忽略top、right、bottom 和 left 属性。
  • position: staticdisplay: inline:元素将被认为是一个行内元素,并且将按照文档流的方式进行布局,忽略top、right、bottom 和 left 属性。
  • position: relativedisplay: blockdisplay: inline-block:元素将被认为是一个块级元素,并且将相对于它在文档中的位置进行定位,但是将按照文档流的方式进行布局。
  • position: relativedisplay: inline:元素将被认为是一个行内元素,并且将相对于它在文档中的位置进行定位,但是将按照文档流的方式进行布局。
  • position: absolutedisplay: blockdisplay: inline-block:元素将被认为是一个块级元素,并且将相对于它最近的定位祖先进行定位,如果没有定位祖先,则相对于 <html> 元素进行定位。
  • position: absolutedisplay: inline:元素将被认为是一个行内元素,并且将相对于它最近的定位祖先进行定位,如果没有定位祖先,则相对于 <html> 元素进行定位。
  • position: fixed:元素将相对于视口进行定位,不会随着窗口滚动而滚动。
  • position: sticky:元素将在跨越特定阈值点时切换为 fixed 定位,并在阈值条件不满足时切换为 relative 定位。

如果加入了 overflowfloat 属性,也会产生不同的效果:

  • overflow 属性:设置了 overflow 属性的元素的内容会被裁剪,如果元素设置了 position 属性,那么元素的特定部分可能不可见。
  • float 属性:元素将浮动到文档流中,可以设置元素相对于其他元素的位置,但也可以导致其父元素高度塌陷。如果元素设置了 position 属性,则计算基于元素的偏移量可能发生变化。

如果 positionfloat 同时使用,则元素将相对于浮动元素进行定位,但同时可能导致父元素高度塌陷。建议尽量避免同时使用 positionfloat 属性。