【问题标题】:body {position: relative;}身体{位置:相对;}
【发布时间】:2021-11-23 22:37:10
【问题描述】:

我正在寻找使用 CSS 来定位我的文档,我想知道关于将 body 元素的 position 属性设置为 relative 以建立初始包含块的共识是什么。这被认为是不好的做法吗?我读过这不是必需的,也就是说,如果 body 元素的第一个子元素是绝对定位的,那么它的包含块默认为 HTML 元素,相当于视口。我很困惑,因为如果没有 body {position: relative;},我似乎无法让定位工作。

这是 HTML 和 CSS:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="styles.css" type="text/css" rel="stylesheet" />
</head>

<body>
    <div id="div1">

        <p id="p1">
            content
        </p>

    </div>

    <div id="div2">

        <p id="p2">
            content
        </p>

    </div>

</body>
</html>

body{
    position: relative;
}

#div1 {
    position: absolute;
    top: 500px;
    width:auto;
    margin: auto;
}

#p1 {
    position: absolute;
    width: auto;
    background-color: aqua;
}

#div2 {
    position:absolute;
    top: 200px;
    background-color: red;
}

#p2 {
    position: absolute;
}

我把这个例子放在一起,所以我可以开始弄乱positionmarginwidth 的不同值。这与我最初发布的内容有很大不同。我希望了解如何为文档中的所有其他定位元素设置初始上下文,以便最终了解浏览器如何计算自动值。我开始对在页面上自动设置宽度和中心元素感到困惑。

【问题讨论】:

  • 如果您没有在身体上设置相对位置,您会遇到哪些具体问题?
  • 谢谢@Chaim。不使用的时候,一个定位都不起作用,好像一切都是正常的流程,这是我所期望的。我只是想知道我是否不应该这样做,因为我已经读过它是不必要的。对不起,我无法指出回哪里。我掉进了一个兔子洞。如果可以这样做并且不被认为是禁忌,特别是在 body 元素上,那将是完美的。
  • 没有必要。但是,请发布您到目前为止的具体问题/问题,否则我们只是在猜测。
  • 抱歉,还是新手。
  • 请更新您的问题本身,以包含您迄今为止尝试过的代码——没有它,我们无法确定问题所在。话虽如此,我个人从未遇到过需要在 &lt;body&gt; 元素上定义位置的情况。

标签: html css


【解决方案1】:

答案是肯定的和否定的。

是的,不是因为它是 body 标签,而是因为在这种情况下它是您的 position:absolute 标签的父标签。 position:absolute 总是引用它的父级,需要设置为position:relative

一般来说,您不需要为body 标签设置位置。如果您的#div 有一个类似&lt;div class = "container"&gt; 的父容器,则需要将.container 设置为position:absolute

【讨论】:

  • 谢谢,张!如果你不介意的话,还有几个后续问题。我应该澄清一下,对我来说,这个问题主要涉及文档中第一个元素的包含块,该元素的位置值不是静态的。那么该元素的包含块是什么?从概念上讲,我知道它属于 body 元素,但是当我这样做时,似乎包含块没有任何物理尺寸,所以一切都被放置,就好像流动是正常的一样。例如,如果 div.container 没有定位的祖先,#div 是否仍然被放置?
  • 不确定我是否完全理解您的问题。物理维度不必由 div.container 定义,但这并不意味着它没有物理维度,维度可能来自&lt;body&gt; 甚至&lt;html&gt;,如果您查看原生@987654332 @ 使用不同的浏览器,您会看到每个浏览器的尺寸略有不同,边距设置也不同。如果div.container 没有明确的位置,它将假定祖先的默认位置为position=static,这意味着元素按顺序呈现,就像它们出现在文档流中一样。
【解决方案2】:

body 元素上设置position:relative 可以相对于整个正文元素(包括屏幕外部分)进行绝对定位,而不仅仅是页面最初可见的部分。请参阅 CSS 规范中 initial containing block 的定义。例如,position:absolute;bottom:0 通常会将一个元素定位在页面最初可见部分的底部,而 position:relativebody 上,它会将元素定位在页面的最底部(如果它最近定位的祖先是body 元素)。

【讨论】:

    【解决方案3】:

    您输入的所有元素的父级是 body,因此 body 被认为是相对于位置的。因为,您可以在 body 内移动任何元素,这意味着 body 具有位置,并且默认情况下它的位置是相对的,无需输入。所以我不知道您需要什么。但我试图解释它。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多