【问题标题】:why, exactly, does absolute positioning inherit from a relative ancestor? [closed]为什么,确切地说,绝对定位从相对祖先继承? [关闭]
【发布时间】:2012-12-15 01:12:55
【问题描述】:

这几乎是 this question 的副本,但那里的答案似乎都没有真正解释这一点的基本原理,这正是我真正想要的。

我知道绝对定位的元素会检查父系树,直到它们遇到具有绝对、固定或相对定位的东西,然后将自己 w/r/t 放置到该元素。

我的问题是:相对定位(相对于静态的,比如说)我错过了什么会使这变得直观?作为一个新手,从我(完全无知)的角度来看,这感觉非常武断,所以我渴望专家在这里提供帮助。声明某个元素相对的行为是否也使其成为 X,其中 X 是子项继承其右上角的合乎逻辑的东西?是相对定位的元素,没有 toprightbottomleft 设置本质上是静态元素,或者在更深层次上,它是某种根本不同的动物吗?

【问题讨论】:

  • 它是这样工作的,因为这就是规范所说的。规范这么说是因为有一个元素可以重置孩子可以用来定位自己的位置。而那个元素恰好被命名为relative

标签: html css position positioning


【解决方案1】:

如果你读过Specification,那是有道理的:

框的位置(可能还有大小)由“top”、“right”、“bottom”和“left”属性指定。 这些属性指定相对于盒子的包含块的偏移量。 绝对定位的盒子从正常流程中取出。这意味着它们对后面的兄弟姐妹的布局没有影响。此外,虽然绝对定位的框有边距,但它们不会与任何其他边距一起折叠。

我在适当的部分添加了重点。绝对定位的元素被它们的包含块

偏移

containing block 指定:

在 CSS 2.1 中,许多框的位置和大小是相对于称为包含块的矩形框的边缘计算的。一般来说,生成的盒子充当后代盒子的包含块;我们说一个盒子为它的后代“建立”了包含块。短语“盒子的包含块”是指“盒子所在的包含块”,而不是它生成的那个。

相对位置建立了一个新的包含块,因此绝对定位在其中的任何东西都相对于它的包含块的左上角。

不幸的是,这并没有完全进入“为什么”的推理......因为你必须挖掘 W3C 的会议记录才能找出(也许)。所以我们能给你的最好答案是“规范是这样说的”。

【讨论】:

  • 这正是我所需要的,谢谢!对我来说,规范中有助于理解的关键位是“如果元素的 'position' 属性的值不是 'static',则称该元素被定位。定位元素生成定位框”。所以从某种意义上说,除了“静态”之外的所有东西都使用了一个特殊的盒子逻辑,而静态默认情况下没有。我觉得这很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2012-09-18
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 2011-01-03
相关资源
最近更新 更多