【问题标题】:CSS :before/:after selectors are suddenly being positioned separately of parent divCSS :before/:after 选择器突然与父 div 分开放置
【发布时间】:2015-05-15 03:47:31
【问题描述】:

我换了一台新电脑,突然间 CSS :after:before 选择器不再工作。

真正奇怪的是,我之前在另一台计算机上添加的:before/:after 选择器在我的新计算机上完全正常显示。但是我现在添加的任何新代码都不会显示,即使我将旧代码复制并粘贴到新 div 上也是如此。

比如这个:

html

<div id="wtf"></div>

css

#wtf {
    width: 10px;
    height: 20px;
    background: red;
}
#wtf:after {
    content: "";
    position: absolute;
    left: 100px;
    top: 10px;
    width: 20px;
    height: 20px;
    background: blue;
}

此代码在复制并直接粘贴到小提琴中时有效:(http://jsfiddle.net/rLnrtu0x/)但我的本地浏览器上只显示红色框。无论我做什么,蓝色框都不会显示。所有其他 CSS 行为正常。

有人知道我做错了什么吗?

在 Ubuntu 14.04 上的 Mozilla 35.0.1 和 Chrome 42.0.2311.152(64 位)上测试。我不能在我的旧电脑上重新测试它,因为它坏了,但我以前从未遇到过:before/:after 选择器的问题。

更新

我刚刚和我的检查员一起找到了选择器。它们实际上正常显示,但它们的定位是相对于html,而不是它们的父 div。同样,使用我在计算机更改之前添加的代码,:before/:after 选择器相对于父 div 定位。但是新代码,即使它是复制粘贴的,也会相对于html 定位选择器。为什么会这样?

【问题讨论】:

  • 您可能做错了什么。因为这不太可能只发生在你身上。
  • 什么版本的“Mozilla”?
  • 您需要进行所谓的“故障排除”。这意味着系统地提出关于可能问题的假设,并一一测试它们。例如,在这种情况下,将编辑后的文件复制回之前的计算机,看看它是否有效。在两台机器上尝试不同的浏览器和版本。查看控制台。运行 CSS linter。
  • @Mr_Green 这就是问题所在。但我看不出我可能做错了什么,因为小提琴中的代码实际上是复制和粘贴的。
  • @misterManSam 我在上面添加了 mozilla 和 chrome 版本。

标签: html css pseudo-element


【解决方案1】:

父容器需要有position

绝对定位的元素被定位在“相对于其最近定位的祖先或包含块的指定位置”。 (来源: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;
}
&lt;div id="wtf"&gt;&lt;/div&gt;

【讨论】:

    【解决方案2】:

    事实证明,它与计算机更改无关。 :before/:after 选择器实际上是显示的,但它们是相对于 html 而不是父 div 定位的,因为父 div 是绝对定位的。

    【讨论】:

    • 如果父 div 设置了 position: absolute,那么 :after 伪元素将相对于它定位。问题似乎是没有位置应用于父容器。见我上面的回答。
    猜你喜欢
    • 2011-06-18
    • 2010-12-27
    • 2011-08-17
    • 2016-12-25
    • 2015-01-04
    • 2021-12-24
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多