gpt4 book ai didi

html堆栈顺序

转载 作者:搜寻专家 更新时间:2023-10-31 22:23:17 25 4
gpt4 key购买 nike

考虑以下代码:

<!DOCTYPE html>
<html lang="en">

<head>
<title>HTML</title>
<meta charset="utf-8" />

<style type="text/css">

h1 {
font-size: 2em;
font-family: Verdana;
font-weight: bold;
}

p {
border: 3px solid blue;
margin-top: -50px;
background-color: green;
color: white;
}

</style>

</head>

<body>

<h1>QUESTION</h1>
<p>The header text in the preceding h1 element is behind this
paragraph's text (as expected), but on top of this paragraph's
background and border (not expected).
</p>

</body>

</html>

请参阅此处示例:http://jsfiddle.net/ZKHc9/

为什么段落的背景和边框不像内容那样呈现在标题顶部?

最佳答案

因为这两个元素都是同一个堆栈上下文中的流内、非定位、 block 级元素

两个流入的、未定位的 block 并不是严格意义上彼此“上方”或“下方”——它们的内容和背景分别堆叠

添加 position: relative 将使元素定位(使用 z-index: auto)并将其放置在同一堆叠上下文中的非定位元素之上:它将在下面的绘画算法中的第 8 步进行渲染。


如果您阅读 CSS2 规范的 Elaborate description of Stacking Contexts仔细观察,您会发现这是正确的行为。

在同一个堆叠上下文中的流内、非定位、 block 级元素首先呈现它们的所有背景,然后呈现它们的所有内容。它们的背景位于具有负 z-index 的定位元素上方,位于其他所有元素下方。

绘画算法中的相关步骤:

  1. ...
  2. ...
  3. ...
  4. For all its in-flow, non-positioned, block-level descendants in tree order: If the element is a block, list-item, or other block equivalent:
    1. background color of element.
    2. background image of element.
    3. border of element.
  5. ...
  6. ...
  7. ... for all its in-flow, non-positioned, block-level descendants in tree order:
    1. ...
    2. ... for each line box of that element:
      1. For each box that is a child of that element, in that line box, in tree order:
        1. ...
        2. ...
        3. ...
        4. For inline elements:
          1. For all the element's in-flow, non-positioned, inline-level children that are in this line box, and all runs of text inside the element that is on this line box, in tree order:
            1. If this is a run of text, then:
              1. ...
              2. ...
              3. the text.
              4. ...
  8. ...
  9. ...
  10. ...

float 和定位元素始终是“原子的”——它们的背景和内容将在一个步骤中一起呈现(第 3、5、8 或 9 步)。但是在同一个堆叠上下文中的流入的、未定位的 block 元素会渲染它们的所有背景(在步骤 4 中),然后渲染它们的所有内容(在步骤 7 中)。

在这种情况下,对于流入的、未定位的兄弟元素 H1 和 P(树中的 H1 在 P 之前),第 4 步渲染 H1 背景,然后渲染 P 背景,然后第 7 步渲染 H1 内容,然后P内容。

关于html堆栈顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5276553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com