How to change the color of an svg element in Angular?
我需要通过将不同的CSS类应用于Angular项目来加载,显示和动态更改SVG图像的颜色。
该问题无济于事,因为它利用了Modernizr库,我想避免使用它。我也不想直接在Angular项目的html文件中复制图像的
1 2 | <div class="svg1" aria-label="My icon" [inlineSVG]="'./assets/images/icons/ApplyIcon.svg'"> |
对抗以下CSS类:
1 2 3 | .svg1 { color: green; } |
它完美地将图像作为常规的
此外,我尝试通过以下方式使用对象标签:
1 2 3 4 5 | <object id="svg1" data="./assets/images/icons/ApplyIcon.svg" type="image/svg+xml"> </object> |
但是,再次,如果我使用CSS指令
我尝试了不同的方法来更改img src SVG颜色,最终使用SVG作为蒙版实现了它,并且按我的预期工作。
angularHTML:
1 |
angularCSS
1 2 3 | .icon { background-color: #0000; // Here you can the svg color } |
在component.html文件中使用svg元素,并使用[ngClass]指令根据条件动态更改内部svg类。
示例:
component.ts
1 | data.state ="New" ||"In-Progress" ||"Completed" // this changes dynamically based on the data |
component.html:
1 | <svg <circle class="cls-3" [ngClass] ="{'New': 'blue', 'In-Progress':'orange','Completed':'green'}[data.state]" cx="8.21" cy="8.01" r="2.44" transform="translate(-3.22 8.89) rotate(-48.73)"/></svg> // inner class of svg element |
component.css:
1 2 3 4 5 6 7 8 9 | .blue { fill:blue } .orange{ fill: orange } .green { fill: green } |
可接受的答案很好,但是如果您的SVG膨胀了怎么办?
我们首先需要使用@ ngneat / svg-icon
转换项目中的SVG或所有SVG
如果SVG中元素的填充或笔触属性设置为currentColor,则它们将具有为包含的DOM元素定义的颜色。因此,可以通过更改svg-icon元素上的颜色样式轻松更改颜色。
将您的SVG图标移动到src / assets / svg目录中,然后运行
此命令将svg-icon安装到您的项目中,并自动将svgs生成到ts文件中,其中svgs变成包含
的对象
-
name 键:这是svg的生成名称,将用于标识svg -
data 键:这实际上是从svg文件复制的svg代码
生成的svg可以在app / svg目录中找到
看着
从app / svg目录导入要在项目中使用的所有svg,并将其放在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import { SvgIconsModule } from '@ngneat/svg-icon'; import { appMasterCardLogoIcon, appPaypalLogoIcon, appVisaLogoIcon } from './svg'; @NgModule({ ..., imports: [ BrowserModule, SvgIconsModule.forRoot({ icons: [appApplePayLogoIcon, appMasterCardLogoIcon, appPaypalLogoIcon, appVisaLogoIcon], }) ], ... }) |
您现在可以在组件中的任何位置使用
由于fill或stroke属性设置为currentColor,因此我们可以使用
我们还可以在
控制样式
1 | <svg-icon key={{payment.logoKey}} [ngClass]="{'selected-payment': payment.isSelected}"class="payment-logo"></svg-icon> |
我最近也遇到了同样的问题,并通过生成一个新的Angular组件并使用我的.svg文件代替了该组件的.html文件来解决了该问题。
例如,更新模板路径以指向您的.svg,如下所示:
查看以下示例:https://levelup.gitconnected.com/using-svg-files-as-component-templates-with-angular-cli-ea58fe79b6c1
1 | fill: green; |
仅适用于svg元素中通常存在的path元素。
color属性用于字体颜色,不适用于svg元素。
在您的情况下,您可以在事物下方
1)在您的文件夹/assets/images/icons/ApplyIcon.svg中,编辑svg图标,然后输入该路径
给属性fill = " green "
2)如果您想在具有不同颜色的多个位置上使用该图标,则可以使用上述方法
将无法使用,因为相同的颜色将被应用到所有地方。在这种情况下,您可以简单地从svg内的所有路径中删除fill = " color "。
然后,您可以应用css
1 | fill:color; |
在这种情况下,尽管在SVG上未应用fill:color,但它将遍历到子元素路径,因此它将起作用。
使用
1 | document.getElementById("svg1").setAttribute("fill","green"); |