【发布时间】:2018-07-28 13:27:04
【问题描述】:
我正在容器 div 上实现一个 ::after 伪元素。伪元素设置背景颜色,顶部 0,左侧 0,100% 的宽度和高度。在 div 内部,高度设置为 200px。这种 HTML/CSS 组合导致背景色覆盖了整个嵌套的 div,并指定了添加的高度和宽度。
但是,如果我删除 ::after,则会插入背景色,但不会在嵌套 div 的顶部,这似乎完全违反直觉。为什么使用::after(或::before)伪元素会导致内容覆盖嵌套div,而不使用它会导致嵌套div继续覆盖的顶部? ::after 不应该意味着它在内容之后吗?
.container1 {
position:relative;
height: 100%;
}
.overlay::after {
content: '';
position: absolute;
top: 0;
left: 0;
background-color: hsla(211, 100%, 18%,.6);
z-index: 2;
width: 100%;
height: 100%;
}
#hero {
height: 200px;
background: url(https://preview.ibb.co/nRxrBS/hero_truck_lg.jpg) no-repeat;
}
<div class="container1 overlay">
<div id="hero"></div>
</div>
【问题讨论】:
-
Before 和 after 是伪类选择器,前面应该有双冒号
::before和::after -
在这种情况下没有区别
-
我知道,这只是为了通知您,因为在某些浏览器 (IE) 中无法按预期工作。最好使用标准
-
我只是想了解为什么 :after 和 :before 伪选择器会以这种方式运行。如果我希望背景出现在图像之前或之后,不应该使用 :before 或 :after 来完成吗?为什么使用那些仍然覆盖图像?
-
@jeprubio:它们被称为伪元素。 那就是他们有双冒号的原因。伪类有单个冒号。将其更改为双冒号会使它们在旧版本的 IE 中无法按预期工作;留下单冒号是让它们正常工作的原因,因为旧版本的 IE 遵守 - 令人惊讶的 - 旧标准。我觉得有趣的是,您知道双冒号的存在是有原因的,但无论如何仍然设法使事情完全混淆。我开始认为将伪元素的标准更改为双冒号是一个错误。
标签: html css pseudo-element