Sass Mixin 使用 SVG 作为背景并改变颜色

Posted

技术标签:

【中文标题】Sass Mixin 使用 SVG 作为背景并改变颜色【英文标题】:Sass Mixin to use SVG as background and change color 【发布时间】:2018-08-14 11:25:31 【问题描述】:

我会使用 SVG 作为背景,并且能够通过 css 方式更改颜色。 所以在搜索之后,我找到了这个帖子,但我不确定在我的 mixin 中放置 svg url 的位置。

SVG as a background-image in MIXIN setting color via a SASS variable

我的出发点:

$imagedir:'../images/'; // definir ici le chemin vers le dossier image
@mixin backgroundSVGandColor($filename,$color:red) 
  background-image: url('data:image/svg+xml;utf8,<svg xmlns='#$imagedir#$filename'><g stroke="#$color" ... /></g></svg>');


但是这个“g”元素是什么?它应该包含我的 svg url 吗?

谢谢

编辑:我的 mixin 的新版本,灵感来自你的 cmets

@mixin backgroundSVGandColor($filename,$color:red) 
background-image: url("data:image/svg+xml,<'svg xmlns="http://www.w3.org/2000/svg" "'#$imagedir#$filename",$color'></svg>");

    

URI 在正确的位置吗?

EDIT2:新版本

   @mixin backgroundSVGandColor($filename,$color:red) 
    background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="url('#$imagedir#$filename')" color='$color');

        

【问题讨论】:

【参考方案1】:

不可能仅通过 CSS 将样式调整应用于通过 URL 加载的 SVG,无论它是通过 img[src] 加载到您的 html 中还是通过 url('https://image-path') 加载到您的 CSS

为了完全通过 CSS 改变 SVG 的样式,它必须是内联,无论是在 HTML 中,还是在你的 mixin 通过 data-URI 的方式。


在 HTML 中设置 SVG 样式

SVG 是一种基于 XML 的标记语言。

SVG 标记被认为是有效的 HTML,因此可以将 .svg 文件的文件内容直接复制并粘贴到您的 HTML 文档中。

这意味着您不必在 HTML 中使用 img[src] 加载 svg,并且通过将内容直接放在 HTML 中,您可以使用 CSS 选择器对其应用 CSS 样式。


在 CSS 中设置 SVG 样式

正如您的 mixin 所展示的,SVG 的内容已被复制并粘贴为 data-URI。使用一些special care 来包含正确的编码并转义奇怪的字符,以确保浏览器正确解释代表您的 SVG 图像的数据。


关于 svg xmlns 属性

您当前的 mixin 中的这段代码有问题:

<svg xmlns='#$imagedir#$filename'>

xmlns 属性用作您的 svg 图片的路径!用于告诉浏览器在SVG中使用how to interpret the XML tags,所以应该指向标准的xmlns="http://www.w3.org/2000/svg"

【讨论】:

【参考方案2】:

很简单,但是函数需要其他参数,有$filename和$color但是需要$imagedir,应该是这样的:

backgroundSVGandColor($imagedir,$filename,$color:red)...

$filename 是您的 svg 文件的名称 $imagedir 是你的 svg 文件的路径 $color 很明显……

在 SASS 中,您可以通过以下方式访问变量内容:#$varName

&lt;g&gt; 标签用于一组对象,您可以在此链接中了解:

https://developer.mozilla.org/es/docs/Web/SVG/Element/g

【讨论】:

谢谢,但是我应该把我的网址放在哪里? backgroundSVGandColor('./assets/imgs/','image.svg',#c0c0c0) 如果答案正确,请查我。

以上是关于Sass Mixin 使用 SVG 作为背景并改变颜色的主要内容,如果未能解决你的问题,请参考以下文章

scss 可重复使用的SVG SASS mixin

scss 可重复使用的SVG SASS mixin

在嵌套的 mixin 中使用 SASS @each 变量

scss 灰度和棕褐色滤镜SASS mixin(支持SVG滤镜)

scss 灰度和棕褐色滤镜SASS mixin(支持SVG滤镜)

SASS mixin中的背景位置问题