当前位置: 首页 > 知识库问答 >
问题:

IE不将SVG显示为伪元素中的内容:before或:after

薛坚
2023-03-14

此问题是线程下的扩展。有没有一种方法可以将SVG用作伪元素:before或:after中的内容。

我试图使用伪类在div之后附加一个svg三角形。

div{
background-color: black;
width: 48px;
height: 45px;
}

div::before{
content: url('data:image/svg+xml; utf8, <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid meet" viewBox="266.53926701570674 152.66492146596858 44 44"><defs><path d="M267.54 153.66L307.54 193.66L267.54 193.66L267.54 153.66Z" id="d6AN4MEUYO"></path></defs><g><g><use xlink:href="#d6AN4MEUYO" opacity="1" fill="red" fill-opacity="1"></use></g></g></svg>');
right: -47px;
position: relative;

}
<div></div>

上面的代码在chrome中运行良好,但在IE中它没有加载svg内容。

我也尝试了背景图像属性,但它似乎在IE(版本

将此svg附加为带有伪类的内容的正确方法是什么?

共有1个答案

戚育
2023-03-14

我已经用IE 11对其进行了测试,我能够生成该问题。pseudo elements content属性目前似乎不适用于SVG元素。这可能是某种bug,也可能是IE浏览器的默认行为。我将尝试提交有关此问题的反馈。

作为一种解决方法,我建议您使用背景图像属性显示svg内容,如下所示:

<style>
    .div1:after {
        content: '';
        display: block;
        height: 80px;
        width: 80px;
        background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20height%3D%2280%22%20width%3D%22160%22%3E%0D%0A%20%20%3Ccircle%20cx%3D%2240%22%20cy%3D%2240%22%20r%3D%2238%22%20stroke%3D%22black%22%20stroke-width%3D%221%22%20fill%3D%22red%22%20%2F%3E%0D%0A%20%20%3Ccircle%20cx%3D%22120%22%20cy%3D%2240%22%20r%3D%2238%22%20stroke%3D%22black%22%20stroke-width%3D%221%22%20fill%3D%22blue%22%20%2F%3E%0D%0A%3C%2Fsvg%3E);
    }
</style>
<div class="div1" style="background-color:green; width:80px;height:80px"></div>

IE 11浏览器中的结果如下:

编辑:

我无法将我的svg与背景图像属性一起使用,而您的svg正在加载该属性。我的svg有问题吗?

当我们将SVG与背景图像属性一起使用时,我们应该确保对保留的URL字符进行编码(例如<代码>

因此,请将svg元素编码如下:

background-image: url(data:image/svg+xml,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20viewBox%3D%22266.53926701570674%20152.66492146596858%2044%2044%22%3E%3Cdefs%3E%3Cpath%20d%3D%22M267.54%20153.66L307.54%20193.66L267.54%20193.66L267.54%20153.66Z%22%20id%3D%22d6AN4MEUYO%22%3E%3C%2Fpath%3E%3C%2Fdefs%3E%3Cg%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D%22%23d6AN4MEUYO%22%20opacity%3D%221%22%20fill%3D%22red%22%20fill-opacity%3D%221%22%3E%3C%2Fuse%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E);

然后,结果是这样的:

 类似资料:
  • 问题内容: 我想将一些SVG图像放置在某些选定元素之前。我正在使用JQuery,但这无关紧要。我想将:before元素设置为: 如果我如上所示进行操作,它将仅显示字符串。我检查了规格,似乎对内容有一些限制。是否可以解决此限制?只有内容CSS与我的问题有关。 问题答案: 是的你可以!刚刚测试过,效果很好,太棒了!它仍然不能与html一起使用,但可以与svg一起使用。 在我的index.html中,我

  • 问题内容: 我无权访问页面的HTML或PHP,只能通过CSS进行编辑。我一直在网站上进行修改,并通过或伪元素添加文本,并且发现转义Unicode应该用于添加内容之前或之后的空格等内容。 如何在属性中添加多行? 在示例中,HTML换行符 仅用于可视化 我想要实现的目标: 问题答案: 该属性指出: 作者可以通过在“ content”属性之后的字符串之一中写入“ \ A”转义序列来在生成的内容中包含换行

  • 问题内容: 我正在使用和CSS伪元素,并且它在 IE8 和所有现代浏览器中都可以正常工作,但在 IE7中 却不能正常工作。在 IE7中 是否存在已知的解决方法? 问题答案: 我在项目中使用的是IE8.js(http://code.google.com/p/ie7-js/),我必须将其删除,因为它在10/15秒内阻止了IE7。 为了保留用:after和:before伪元素生成的内容,而没有IE8.j

  • 我想使用::before将SVG图像放置在一些选定元素之前: 上面的代码只显示明文。 我检查了规范,似乎对可以是什么有一些限制。CSS属性解决方案更可取。

  • 问题内容: 我正在尝试为HTML5中的提出一些好的默认样式,并尝试了以下方法: las,内容从不显示。对于伪元素,双冒号和单冒号都不是问题。我都尝试过。拥有一个伪元素和一个伪类也不是问题。我已经尝试过不使用和了。在Chrome,Safari和Firefox中,我得到了相同的行为(Firefox没有和类,但是我尝试了不使用它们。) 在伪元素工作细,,,和元素-其中一些是块元件和一些是内联。 因此,我