如何让 IE8 接受 CSS :before 标签?

Posted

技术标签:

【中文标题】如何让 IE8 接受 CSS :before 标签?【英文标题】:How can I get IE8 to accept a CSS :before tag? 【发布时间】:2011-02-02 12:38:08 【问题描述】:

我有以下 CSS 代码

.editable:before 
    content: url(../images/icons/icon1.png);
    padding-right:5px;

这与以下标记结合使用:

<span class="editable"></span>

在世界上所有其他有福的浏览器中,我的图标都出现了,但 IE8 似乎有这个问题。 :before 不是 CSS2 伪元素吗? content: 不也是 CSS2 命令吗?什么给了?

【问题讨论】:

我不了解 IE8,但是 :before 和 :after 在 IE7 及以下版本中不支持。不知道他们是否最终在 8 中添加了支持。如果他们确实确保页面没有在 IE7 仿真中呈现。 【参考方案1】:

更新:我误读了页面! IE 8 确实支持:之前有图片,只是在 IE7 兼容模式下不支持。

IE8 支持:before但不支持,并且在不处于兼容模式时也支持图像作为内容。感谢@toscho 的测试!

Source

Detailed comparison of which browsers can deal with what sort of content

我多么喜欢 quirksmode.org,这使得处理这些东西至少可以忍受一半。这家伙应该获得奖牌!

【讨论】:

啊,如果我没记错的话,你也不能把html代码放进去,所以用就不行了…… @SLC:它被渲染为文本,是的。【参考方案2】:

您可以将图像用作生成内容的背景:

<!DOCTYPE html>
<meta charset="UTF-8">
<title>Generated content with an image</title>
<style>
p:before
    
        content:    '';
        padding:    20px;
        background: url("css.png") center center no-repeat;
    
</style>
<p>Test</p>

适用于 IE 8、Opera 和 Mozilla。 Live-Demo.

【讨论】:

你是对的! IE8 作为 IE8 支持图像作为内容。干杯,更新了我的答案。 +1。【参考方案3】:

其实你应该在这里小心并阅读详细信息。有关完整详细信息,请参阅this link - 其中指出

在 Windows Internet Explorer 8 以及更高版本的 Windows 中 IE8 标准模式下的 Internet Explorer,只有一个冒号形式 这个伪元素被识别——即:before。以。。。开始 Windows Internet Explorer 9,::before 伪元素需要两个 冒号,尽管单冒号形式仍然被识别并表现 与双冒号形式相同。

对于浏览器的含义 &lt;IE9 - 您必须使用 :before 和对于 &gt;=IE9 - 您必须使用 ::before

【讨论】:

看到这为我节省了很多时间,IE8 不适合我,因为我有 :: 双冒号是我的问题,感谢您的提醒。如何使这种向前兼容? IE。如果小于 IEX 则使用单冒号,如果大于 IEY 则使用双冒号? @Jacques 单冒号在 IE>=9 中也能正常工作。所以现在只要坚持使用单冒号(这是 CSS2.1 标准)。只有 CSS3 区分伪选择器和伪元素的单冒号和双冒号。【参考方案4】:

使用 :before 和 :after 时,请注意不要使用双冒号(::after - 无效,但 :after 有效)。我为此损失了大约 20 分钟...

【讨论】:

谢谢,这实际上是我个人一直在寻找的答案。 IE8 现在对我来说是一个工作。 (愚蠢的 IE8!) 您先生,将我从可能长达一天的调试会话中拯救出来,为什么这个 &$(*# 不起作用,而每个兼容性表都说它应该起作用。 但最好在现代浏览器中使用 ::before 不确定是否可以像 close:before、close::beforeetc... 【参考方案5】:

这与 Pekka 的真棒示例不同... 我在我的项目中的高度是高的...所以我添加了一个 padding-bottom: 0px;

以防万一你下雨了......

.icon-spinner:before 
    content: '';
    padding: 15px;
    padding-bottom: 0px;
    background: url("css.png") no-repeat left top;

【讨论】:

以上是关于如何让 IE8 接受 CSS :before 标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 MS Outlook 接受 CSS 样式 display:block?

IE8 :nth-child 和 :before

可以使用带有 CSS ::after 和 ::before 标签的媒体查询吗?

IMG标签与before,after伪类

:after/::after和:before/::before的区别

解决ie8以下不兼容h5的新标签