如何在:before伪类中设置SVG图像的大小?

34

我想在CSS的:before元素中显示一张图片。

.withimage:before {
  content: url(path/to/image.svg);
  display: block;
  height: 20px;
  width: 20px;
}

问题在于,heightwidth被应用于元素,但SVG不会缩小。我该如何将大小应用于之前创建的实际元素?

Plnkr示例:https://plnkr.co/edit/UgryaObojs6PCU579oGY


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Anthony
5个回答

45

您可以使用SVG作为背景图像:

.withimage:before {
  content: "";
  display:block;
  height:125px;
  width:125px;
  background-size: 125px 125px;
  background-image: url(test.svg);
  background-repeat: no-repeat;
}

这里是示例

此外,您也可以尝试使用以下内容:

.withimage:before {
  content: url("data:image/svg+xml; utf8, <svg.. code here</svg>");
    display:block;
    height:20px;
    width:20px;
}

1
你的示例在Chrome中可以缩放(测试时,将所有125px设置为225px并查看图像增长)。然而,在Edge和Explorer中没有缩放。 - thund

6

缩放变换对我有用:

::before {
    content: url(path/to/image.svg); // source image is 24px wide
    transform: scale(0.5);           // will be rendered 12px wide
  }

这可能是调整图像大小最灵活可靠的方式。 - thomasdao

2
有时候出于某些原因我们不想使用背景图像。我遇到了与你相同的问题,无论SVG的宽度和高度如何都没有效果。原因是SVG缺少viewBox属性。 我只需在内容的标签中添加viewBox='0 0 16 16'即可解决!

1

大多数浏览器不支持在img标签上使用:after:before,但您可以创建一个具有高度和宽度的div并为其设置background

编辑您的Plunker

/* Styles go here */
.withimage:before {
  content:"";
  background: url(test.svg);
  background-size: cover;
  display: block;
  width:20px;
  height: 10px;
}
.withimage{
  background: pink;
  height: 100px;
  width: 100px;
}

-1
你可以直接编辑SVG文件:

他正在使用它在伪元素之前,如果他直接使用SVG标签,你的答案可能是正确的,但现在是不正确的,我不会给它点踩,但我建议你编辑或删除它。 - Mahdiar Mransouri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接