position:relative
且子级是position:absolute
时,我理解这种情况。但我不理解以下情况的发生:
- 父级为绝对定位,子级为相对定位
- 父级和子级都是绝对定位
- 父级和子级都是相对定位
position:relative
且子级是position:absolute
时,我理解这种情况。但我不理解以下情况的发生:
点击此处了解有关绝对、相对和固定定位的更多信息,但我将尝试特别回答您关于关系的问题。
position: absolute
会将该元素定位到其最近的具有非static
位置的父元素。 static
是所有元素的默认值。
position: relative
有点奇怪,因为它实际上影响的是该元素的子代而不是自己的位置。它只是告诉它的子元素:“如果你的position
是absolute
,那么相对于我本身来定位自己。” fixed
或absolute
的position
也会产生相同的效果(意味着定位的子元素将相对于它的边界进行定位),但这些样式也会影响它们自己在页面上的位置。具有position: relative
的元素看起来不会有任何不同,但它的子元素可能会。
因此,请考虑以下情况:
<div class="parent">
<div class="child">
<div class="grandchild"></div>
</div>
</div>
如果grandchild
有position: absolute
属性,它将相对于浏览器窗口定位自己,因为没有父元素具有除默认值static
之外的position
属性。
如果parent
也具有position
属性的值为relative
、absolute
或fixed
,grandchild
会相对于parent
的边界进行定位。
但是,如果child
也具有position
属性的值为relative
、absolute
或fixed
,grandchild
将相对于child
的边界进行定位,因为它是具有除static
之外position
属性的最近的父元素。
总之,relative
影响一个元素的子级,而absolute
和fixed
则影响元素本身以及其子级。
请记住,position: fixed
将绕过所有relative
和absolute
父元素,并始终相对于浏览器窗口定位自身。
position: relative
有点奇怪,因为它实际上影响的是该元素的子元素,而不是该元素本身的位置。”并不完全正确。通过使用top
、right
、bottom
和left
属性,你可以以一种其他position
值无法做到的方式改变相对定位元素在屏幕上的位置。 - Mr Lister如果父元素是相对定位,子元素是绝对定位:父元素会像保护自己的孩子一样倾听他的需求。
如果两者都是绝对定位:它们彼此之间没有任何关系,就好像是陌生人一样。
如果父元素是绝对定位,子元素是相对定位:它们是绑定在一起的,孩子的位置(宽度和高度)会相对于父元素进行移动。
这总会有点奇怪,关于这个问题有很多优秀的文章,但对我来说,只需要在相对定位和绝对定位之间不断切换,直到达到预期效果。希望这能够解决你的疑惑。