我切换到新计算机,突然间,CSS :after
和:before
选择器不再工作。
真正奇怪的是,我之前在另一台计算机上添加的 例如,这个: html CSS 此代码在复制并直接粘贴到小提琴中时起作用:(http://jsfiddle.net/rlnrtu0x/),但只有红色框在我的本地浏览器上显示。无论我做什么,蓝色框都不会显示。所有其他CSS的行为正常。 有人知道我可能做错了什么吗? 在Mozilla 35.0.1和Chrome 42.0.2311.152(64位)上测试了Ubuntu 14.04。我无法在旧计算机上重新测试它,因为它破裂了,但是以前我从来没有遇到过 我刚刚与检查员一起找到了选择器。它们实际上是正常显示的,但是它们是相对于:before/:after
选择器完全正常显示在我的新计算机上。但是我现在添加的任何新的都不出现,即使我将旧代码复制到新的div。<div id="wtf"></div>
#wtf {
width: 10px;
height: 20px;
background: red;
}
#wtf:after {
content: "";
position: absolute;
left: 100px;
top: 10px;
width: 20px;
height: 20px;
background: blue;
}
:before/:after
选择器的问题。 update
html
而不是父母div的定位。再次,在计算机更改之前添加的代码后,:before/:after
选择器的定位相对于父级。但是,即使新代码是复制的,也将选择器相对于html
定位。为什么会这样?
父容器需要具有position
绝对定位的元素被定位为"相对于其最接近的祖先或包含块的指定位置。"(SRC:MDN)
因此,您的:after
假元素不包含其父母,因为父母没有"定位"或将其位置设置为static
。
唯一的解释是,您以前的设置中一定有一些将position
应用于#wtf
的设置,这使其孩子可以绝对放置在其中。
您可以通过将位置应用于#wtf
之类的"解决"问题:
#wtf {
width: 10px;
height: 20px;
background: red;
position: relative;
}
#wtf:after {
content: "";
position: absolute;
left: 100px;
top: 10px;
width: 20px;
height: 20px;
background: blue;
}
<div id="wtf"></div>
事实证明,它与计算机更改无关。:before/:after
选择器实际上是显示的,但是它们是相对于HTML而不是父级的定位,因为父级是绝对定位的。