为什么不将默认位置设置为相对?

时间:2016-06-29 22:02:45

标签: css layout css-position

我最近意识到position: static是多么无用,除非relative也这样做,否则它不会提供任何内容。
事实上,我的问题是“为什么不将这一行添加到我们的CSS文件中?”

* { position:relative; }

所以我们始终可以轻松地从It的父级定位任何元素absolute或者移动元素它只是left: ...或者任何方向的相同。 那么为什么默认情况下元素不会定位到relative
感谢

2 个答案:

答案 0 :(得分:5)

让我们将一些元素置于其默认静态状态并使其位置为:relative;。仅仅通过改变这个价值,没有任何反应。它出现在改变之前的完全相同的位置。但它确实改变了两件事:

  1. 它的原始位置仍然会被元素占据(就像原始元素的幽灵仍占用空间一样)。
  2. 如果元素具有绝对定位的子元素,则它们现在绝对位于此元素的上下文中。
  3. 优点

    如果所有元素都是以相对定位开始的,那么您上面的所有两个项目都是自然而然的。您的顶部/右侧/底部/左侧值的工作方式与您认为开箱即用的一样。 Z-index"正常工作"同样。定位上下文总是被约束到下一个父元素,这具有逻辑意义。

    缺点

    最值得注意的是,始终将定位上下文约束到父元素是有限的。让我们假设您想要在页面的右上角放置一个元素,而不管元素在标记中的位置。如果元素被埋没在层次结构中,那将是艰难的。您需要为每个父元素重置该定位上下文。这意味着将它们设置回位置:静态;并且在此过程中失去相对定位的所有好处。

答案 1 :(得分:1)

static定位是默认值,因为它不会“干扰”页面上任何其他元素的定位。从这个意义上说,它是一个元素可以拥有的最不具破坏性的状态。 此外,当我们谈论网页的渲染时,这是一个非常昂贵和复杂的操作 - 只需绘制一个包含大量静态元素的页面比其他定位元素更快。现代浏览器在这方面肯定是非常先进的,但它确实在20年前为浏览器发挥了作用。

在便利性方面:想象一下您想要绝对定位的动态页面上的元素。你知道,你想把它放在哪个元素上,但是你不知道它们之间可能有多少层次。 使用静态定位,您只需在锚元素上声明position:relative即可。由于所有元素都具有相对定位,因此您需要重新定位其间的所有元素,这会给您带来困难。