【问题标题】:CSS background image doesn't show up on IE11 when on position:fixed pseudo-elementCSS背景图像在位置时不显示在IE11上:固定伪元素
【发布时间】:2020-02-02 13:42:23
【问题描述】:

JSfiddle 演示了这个问题:

https://jsfiddle.net/qjtbchpu/11/

<div id="container">
  <article>
    blah
  </article>
  <article>
    blah
  </article>
</div>

#container::before {
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  content: '';
  background: url(https://imgur.com/qYUPJgv.jpg);
  position: fixed;
}

article {
  position: relative;
  height: 500px;
  background: rgba(255, 255, 255, .75);
  margin: 4em;
  padding: 2em;
  border: 1px solid black
}

这在我尝试过的所有主要浏览器中都能完美运行,除了 IE11,其中照片仅在我使用 position:absolute 时才会出现,这不会给我想要的效果。

任何已知的解决方案或变通方法?谢谢

【问题讨论】:

  • 您的代码运行良好,可能需要一些时间来加载
  • 没有理由将 position:fixed 应用于伪元素...应该是 position:absolute
  • 我用 IE 11 测试了这个问题,我能够产生这个问题。图像一开始没有加载。奇怪的是,如果你调整窗口大小,它会立即显示图像。
  • ...除非我想要一个固定位置的伪元素,否则在滚动视口时不会移动@Paulie_D

标签: css internet-explorer css-position pseudo-element


【解决方案1】:

IE11 根本不会在那里加载巨大的图像,猜测在创建伪元素时,它们不在缓存中。您的代码适用于一些简单/小图像,但对于较大的图像(需要时间加载),您可以使用这个技巧:

#container::before {
    left: 0;
    right: 0;
    bottom: 0;
    top: 0;
    content: url(https://imgur.com/qYUPJgv.jpg);
    background: url(https://imgur.com/qYUPJgv.jpg);
    background-size: cover;
    text-indent: -9999px;
    overflow: hidden;
    position: fixed;
}
article {
    position: relative;
    height: 500px;
    background: rgba(255, 255, 255, .75);
    margin: 4em;
    padding: 2em;
    border: 1px solid black
}
<div id="container">
    <article>
        blah
    </article>
    <article>
        blah
    </article>
</div>

经过测试,在 JSFiddle 上也可以正常工作。

强制浏览器加载图片的关键行是:

content: url(https://imgur.com/qYUPJgv.jpg);

【讨论】:

  • 谢谢,这完全修复了它并解释了为什么它偶尔会在 IE11 中工作。您是否预计使用此修复跨浏览器会有任何缺点/并发症?
  • 不,文本缩进和溢出隐藏的技巧已经使用了至少 15 年(成功)。
  • 我自己以前也用过,只是从来没有将图像 URL 作为伪元素 content 值。我可以看到它有效,但不确定它是否带有任何警告!
最近更新 更多