- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
情况如下:
body {
margin: 0;
background: pink;
color: #fff;
}
.box {
margin-top: 20px;
background: red;
}
.bottom {
text-align: right;
background: green;
animation: animate 2s infinite alternate linear;
}
@keyframes animate {
from {
margin-top: 10px;
}
to {
margin-top: -40px;
}
}
<div class="box">
some content
</div>
<div class="bottom">
other content
</div>
正如您所见,我们有两个 div
,没有任何复杂的样式(只是背景颜色)。我通过应用负的 margin-top
使第二个 div
与第一个 div 重叠。我期望看到一个完全重叠另一个,但事实并非如此。第二个 div
在第一个 div 的内容和背景之间滑动,这对我来说是一种奇怪行为。
动画与这里无关,我只是用它来更好地展示行为。我们可以简单地添加负边距而不使用动画,我们将得到相同的结果:
body {
margin: 0;
background: pink;
color: #fff;
}
.box {
margin-top: 20px;
background: red;
}
.bottom {
margin-top:-10px;
text-align: right;
background: green;
}
<div class="box">
some content
</div>
<div class="bottom">
other content
</div>
所以我的问题是:为什么会有这样的行为?
<小时/>顺便说一句,我们都知道 CSS 有一些棘手的事情,当我们第一次面对它们时,我们不会怀疑它们(例如边距折叠、从 body 到 html 的背景传播、空白问题等)。 ..)但它们在某处得到了明确的解释,我希望找到一个官方资源,我可以清楚地理解这一点,而不仅仅是得到类似“也许发生这种情况是因为......”,”我怀疑这与...有关”,“我认为这与...有关”,等等。
我认为像文本这样的内容比背景和其他视觉样式更重要,所以也许当我们重叠时,我们将所有文本放在顶部,将所有其他样式放在底部,我们决定每个组内的顺序,然后我们打印结果。
这是一个更复杂的示例:
body {
margin: 0;
background: pink;
color: #fff;
}
div {
font-size: 39px;
line-height: 28px;
margin-bottom: -20px;
font-weight: bold;
}
body :nth-child(1) {
background: red;
border:3px solid brown;
}
body :nth-child(2) {
background: blue;
border:3px solid yellow;
color: #000;
}
body :nth-child(3) {
background: green;
border:3px solid orange;
}
<div>
some content
</div>
<div>
other content
</div>
<div>
more content
</div>
我们可以清楚地看到视觉堆栈如下(从下到上):
重要通知:在回答之前,请注意我并不是在寻找解决此问题或如何避免此问题的方法。通过简单地添加 position:relative
行为就会消失,我们可以使用 z-index
来决定堆叠。我希望了解为什么会发生这样的事情。
最佳答案
警告:阅读以下信息可能会影响您的心理健康。
The painting order for the descendants of an element generating a stacking context (see the z-index property) is:
- If the element is a root element:
- background color of element over the entire canvas.
- background image of element, over the entire canvas, anchored at the origin that would be used if it was painted for the root element.
- If the element is
- a block, list-item, or other block equivalent:
- background color of element unless it is the root element.
- background image of element unless it is the root element.
- column rule of the element.
- border of element.
- Otherwise, if the element is a block-level table:
- table backgrounds (color then image) unless it is the root element.
- column group backgrounds (color then image).
- column backgrounds (color then image).
- row group backgrounds (color then image).
- row backgrounds (color then image).
- cell backgrounds (color then image).
- cell column rule for multi-column.
- all table borders (in tree order for separated borders).
- Stacking contexts formed by positioned descendants with negative z-indices (excluding 0) in z-index order (most negative first) then tree order.
- 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:
- background color of element.
- background image of element.
- column rule of the element.
- border of element.
- Otherwise, the element is a table:
- table backgrounds (color then image).
- column group backgrounds (color then image).
- column backgrounds (color then image).
- row group backgrounds (color then image).
- row backgrounds (color then image).
- cell backgrounds (color then image).
- cell column rule (multi-column).
- all table borders (in tree order for separated borders).
- All non-positioned floating descendants, in tree order. For each one of these, treat the element as if it created a new stacking context, but any positioned descendants and descendants which actually create a new stacking context are considered part of the parent stacking context, not this new one.
- If the element is an inline element that generates a stacking context, then:
- For each line box that the element is in:
- Jump to 7.2.1 for the box(es) of the element in that line box (in tree order).
Otherwise: first for the element, then for all its in-flow, non-positioned, block-level descendants in tree order:
- If the element is a block-level replaced element, then: the replaced content, atomically.
Otherwise, for each line box of that element:
For each box that is a child of that element, in that line box, in tree order:
- background color of element.
- background image of element.
- column rule of the element.
- border of element.
- For inline elements:
- For all the elements 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:
- If this is a run of text, then:
- any underlining affecting the text of the element, in tree order of the elements applying the underlining (such that the deepest element’s underlining, if any, is painted topmost and the root element’s underlining, if any, is drawn bottommost).
- any overlining affecting the text of the element, in tree order of the elements applying the overlining (such that the deepest element’s overlining, if any, is painted topmost and the root element’s overlining, if any, is drawn bottommost).
- the text
- any line-through affecting the text of the element, in tree order of the elements applying the line-through (such that the deepest element’s line-through, if any, is painted topmost and the root element’s line-through, if any, is drawn bottommost).
- Otherwise, jump to 7.2.1 for that element
- For inline-block and inline-table elements:
- For each one of these, treat the element as if it created a new stacking context, but any positioned descendants and descendants which actually create a new stacking context are considered part of the parent stacking context, not this new one.
- For inline-level replaced elements:
- the replaced content, atomically.
- Optionally, the outline of the element (see 10 below).
Note, some of the boxes may have been generated by line splitting or the Unicode bidirectional algorithm.
可选地,如果元素是 block 级的,则元素的轮廓(参见下面的 10)。
所有定位、不透明度或变换后代,按树顺序分为以下类别:
所有使用“z-index: auto”或“z-index: 0”定位的后代,按树顺序排列。对于那些具有“z-index:auto”的元素,将元素视为 它创建了一个新的堆叠上下文,但任何定位的后代和 实际创建新堆栈上下文的后代应该是 被视为父堆叠上下文的一部分,而不是这个新的。为了 那些带有 'z-index: 0' 的处理生成的堆叠上下文 原子地。
所有不透明度小于 1 的不透明度后代,按树顺序,创建一个原子生成的堆叠上下文。
- 除无变换之外的所有具有变换的变换后代,按树顺序,创建一个自动生成的堆叠上下文。
- 由 z 索引大于或等于 1 的定位后代形成的堆叠上下文,按 z 索引顺序(最小的在前),然后是树 订单。
现在说真的,请参阅the w3c paint order documentation
第4.1点,绘制了 child 的背景
在第 4.4 点中,绘制了子项的边框。
第 4 点完成后,代码片段的所有背景和边框均已绘制
现在,在第 7.2.1.5.1.1.3 点,子级的文本已绘制。
这就是您所看到的行为。
还请注意,更改此行为很容易。我们可以激活点 8.2(设置不透明度),它会像您预期的那样绘制:
body {
margin: 0;
background: pink;
color: #fff;
}
.box {
margin-top: 20px;
background: red;
}
.bottom {
text-align: right;
background: green;
animation: animate 2s infinite alternate linear;
opacity: 0.9999;
}
@keyframes animate {
from {
margin-top: 10px;
}
to {
margin-top: -40px;
}
}<div class="box">
some content
</div>
<div class="bottom">
other content
</div>另一个片段,显示文档中的几个要点:
请注意,步骤 4 中的所有边框和背景均在步骤 3 之后、setp 5 之前渲染。但是步骤 4 中的文本是步骤 7,因此在步骤 5 中的文本之后渲染
div {
width: 200px;
height: 100px;
border: solid 10px;
font-size: 40px;
}
.step3 {
border-color: red;
background-color: lightpink;
z-index: -1;
position: relative;
margin-left: 10px;
}
.step41 {
border-color: brown;
background-color: yellow;
margin-left: 30px;
margin-top: -40px;
}
.step42 {
border-color: blue;
background-color: lightblue;
margin-left: 50px;
margin-top: -40px;
color: red;
}
.step43 {
border-color: green;
background-color: lightgreen;
margin-left: 160px;
margin-top: -150px;
color: crimson;
}
.step5 {
float: left;
background-color: white;
margin-top: -30px;
}
div:hover {
position: relative;
}<div class="step3">Step 3 negative zindex</div>
<div class="step41">step4 In flow, number 1</div>
<div class="step42">In flow, number 2</div>
<div class="step43">In flow, number 3</div>
<div class="step5">step 5 float</div>我不知道这是否算作一个用例:这是由相对定位的元素设置的初始行为更自然
div {
width: 100px;
height: 1.3em;
border: solid 12px tomato;
font-size: 18px;
}
div:hover {
position: relative;
}<div>a long stretch of text overflowing to the other div</div>
<div></div>
关于html - 为什么内容没有被重叠元素的背景覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48731110/
在开发中的网页上,我在 IE 上遇到此错误 element = $(element); 此代码位于prototype.js 预期对象 如何消除此错误。 更新: 现场也使用了 jQuery。 最佳答
我有两个大小相同的嵌套数组: Array1 =[[1, 2], [], [2, 3]] Array2= [[1, 4], [8, 11], [3, 6]] 我需要将它们合并到一个数组中,如下所示: A
我有一些 jQuery 代码,当单击具有特定 ID 的项目时运行。当 ID 是 的一部分时,它就可以工作。元素,但当它位于 中时则不然元素。为什么会这样呢?我想使用 an,因为如果用户关闭了 Ja
Flex-box 规范 3声明 flex 元素不是 block 容器: A flex item establishes a new formatting context for its content
我遇到了一个意想不到的问题。 HTML JS $(function() { var $divs = $('.myDiv'); // create new div not in
我使用 Bootstrap 和 Ember.js 得到了一个无序列表。每个列表项都是一个显示新帖子的链接,每当您单击该链接时,Ember 都会添加类 active默认情况下。我正在使用 Bootstr
我正在尝试让一个函数正常工作,但运气不佳,所以我想向 Stackoverflow 智囊团提出一个新手问题! 基本上,我有一个表单,并且循环遍历所有元素以查看是否存在自定义数据属性。如果存在,则保持该元
我想映射一个可选数组,删除那些 nil 值,并使用另一个函数映射非 nil 值。 我知道我可以通过使用 compactMap 然后使用常规 map 来实现这一点,但我只想遍历数组一次。 我为此实现了一
我如何定位 li 元素,除非它们出现在 之后元素?换句话说,我想针对步骤而不是注释。 我尝试向 OL 添加一个我想从选择中排除的类,但我想出的代码不起作用。 (顺便说一句,重构 html 不是一种选
Warning 1 The element 'system.webServer' has invalid child element 'rewrite'. List of possible eleme
我正在尝试编写一个脚本,该脚本将遍历 HTML 源并创建 DOM 的 JSON 文件,然后使用 d3.js 在 TreeView 中显示该文件。我遇到的问题是不仅希望显示元素(TITLE、P、LI 等
我有以下 HTML 表单:- Option 1 Option 2
我试图在选定的 HTML 元素之后选择下一个具有类名 slider-value 的 span 元素。我尝试了多种解决方案,但没有一个有效。 我可以通过 id 选择它,但我不希望那样做使代码冗余。 $(
如果电子邮件地址无效,我想在屏幕上显示一条消息“请输入有效的电子邮件地址”。 body 元素的innerHTML 语句工作正常,但我用于p 元素的innerHTML 语句不起作用。 有一次,当我测试它
以下 jQuery 代码调用 ul 元素,查找元素内的前 三个 li 列表项,并隐藏剩余的 li 项目。然后,它附加一个 li 元素,其中显示“显示更多...”,并且在单击时显示之前隐藏的列表项。 (
我问了a question早些时候关于将编辑/删除链接与 h1 元素内联的最佳方法。我能够通过给出的答案实现这一点,但我现在有额外的要求,我需要在 h1 下方显示一个段落并编辑/删除链接。 到目前为止
我使用 MVC 4 和 knockout.js 库版本 2.1.0 显示从服务器检索到的大量文件的表中的以下摘录。 0)"> 正在正确检索数据,
我创建了一个脚本,该脚本在鼠标悬停在父容器上时激活,并且应该将其子元素移离鼠标。我目前已经让它工作了,但是代码的某些部分似乎与 REACT 代码应该是什么样子相矛盾。特别是两个部分。 我在渲染函数中使
我是 JS 新手,正在尝试理解项目 https://github.com/tastejs/todomvc 的代码 请参阅屏幕截图,我尝试对 button X 以及其父元素 div 设置断点,但在这两种
例如,假设有一个带有奇特颜色的标记: Something written here 使用 Visual Studio 2017 和 MVC 5 元素,有没有办法检查和定位当前应用了哪些样式,以及负责它
我是一名优秀的程序员,十分优秀!