【问题标题】:CSS: nesting absolute div within an absolute div?CSS:在绝对div中嵌套绝对div?
【发布时间】:2017-01-26 04:35:25
【问题描述】:
<div style="position:absolute; height:500px;">
  <div style="position:absolute; bottom:0;">xxx</div>
</div>

如果我将一个具有底部:0 的绝对 div 定位在另一个绝对 div 中,内部 div 会始终粘在父 div 的底部还是会粘在窗口底部(在某些浏览器中)?在实践中,内部 div 粘在父 div 的底部,但感觉不是很好的做法,我担心它可能会被弃用或被弃用。或者这完全没问题?

【问题讨论】:

  • 对我来说看起来不错,您可以在子级上设置一个最大高度和溢出,这样它就可以在超出父级顶部时显示一个滚动条。父级也可以处于相对位置以保持在整个文档的变化中。
  • 这是根据规范嵌套绝对元素的行为。您所指的元素粘在窗口底部是一个完全不同的position 值,称为fixed。使用嵌套的、绝对定位的元素是非常安全的。

标签: html css


【解决方案1】:

阅读:https://developer.mozilla.org/en/docs/Web/CSS/position

绝对定位:

不要为元素留出空间。相反,将其定位在相对于其最近定位的祖先(如果有)或相对于初始包含块的指定位置。绝对定位的框可以有边距,并且它们不会与任何其他边距一起折叠。

一般来说,当你有一个定位元素(基本上除了static)时,它会为子元素创建一个新的定位上下文。 (好吧,实际上这可能不是那么简单,并且有一些浏览器依赖性,尤其是在涉及 fixed 时。)在您的示例中,内部 div 将粘在外部 div 的底部。

就最佳实践而言,创建具有绝对定位的成熟布局通常不是一个好主意。对于布局,使用浮动和display 属性之类的东西。但除此之外,将绝对定位用于诸如位于其他事物之上,因此实际上不是基本布局的一部分。也不怕被弃用。

【讨论】:

  • 那么一个绝对定位的 div 只有在它不在另一个 div 中时才会粘在窗口上?
  • @5south 具体来说,如果唯一的父级是body,它将坚持body。不是窗户。使用fixed 坚持视口,如我链接的 MDN 页面所示。​​
  • 因此,无论父 div 是绝对还是相对,绝对定位的子 div 都会一直粘在父 div 上。
  • @5south 绝对和相对定位的父母确实是定位,所以是的。
  • position:fixed for parent 也以这种方式工作,只有static 不会被视为定位参考;)