[英]How do I add color to my svg image in react
我有一個圖標列表。 我想將圖標顏色更改為白色。 默認情況下,我的圖標是黑色的。 大家有什么建議嗎?
我通常在我的 css 中使用'fill: white'
但現在我在 React 中這樣做......它不起作用!
import React from 'react'
import menuIcon from '../img/menu.svg';
import homeIcon from '../img/home.svg';
<ul>
<li>
<a href="/" className="sidebar__link">
<img src={menuIcon} alt="sidebar icon" className="sidebar__icon" />
</a>
</li>
<li>
<a href="/" className="sidebar__link">
<img src={homeIcon} alt="sidebar icon" className="sidebar__icon" />
</a>
</li>
</ul>
.sidebar__icon {
fill: #FFFFF;
width: 3.2rem;
height: 3.2rem;
}
我使用這種方法來避免為每個圖標創建一個 React 組件的需要。 正如文檔所說,您可以將 SVG 文件作為反應組件導入。
import { ReactComponent as Logo } from './logo.svg';
const App = () => (
<div>
{/* Logo is an actual React component */}
<Logo />
</div>
);
如果您想更改 fill 屬性,您必須將 SVG fill
的值設置為current
那么您可以像這樣使用它:
<svg fill="current" stroke="current" ....> ... </svg>
import { ReactComponent as Logo } from './logo.svg';
const App = () => (
<div>
{/* Logo is an actual React component */}
<Logo fill='red' stroke='green'/>
</div>
);
使用您的 svg 作為組件,然后所有 svg 優點都可以訪問:
const MenuIcon = (props) =>(
<svg xmlns="http://www.w3.org/2000/svg" fill={props.fill} className={props.class}></svg>
)
在你的渲染中
<li>
<a href="/" className="sidebar__link">
<MenuIcon fill="white"/>
</a>
</li>
您可以通過訪問g或path來更改 svg 的 css。 從 create-react-app 2.0 版開始
import React from 'react'
import {ReactComponent as Icon} from './home.svg';
export const Home = () => {
return (
<div className='home'>
<Icon className='home__icon'/>
</div>
);
};
.home__icon g {
fill: #FFFFF;
}
.home__icon path {
stroke: #e5e5e5;
stroke-width: 10px;
}
如果您使用的是create-react-app
,則可以使用如下
import { ReactComponent as Logo } from './logo.svg';
const App = () => (
<div>
{/* Logo is an actual React component */}
<Logo />
</div>
);
最重要的部分不要忘記將它們作為ReactComponent as Logo
導入
就我而言,我需要刪除我的 svg 文件的這一部分以使其工作:
<style type="text/css">
.st0{fill:#8AC6F4;}
</style>
然后這有效
import { ReactComponent as Logo } from './logo.svg';
const App = () => (
<div>
{/* Logo is an actual React component */}
<Logo />
</div>
);
從 React 16.13.1
,您可以直接使用 SVG 作為組件並傳遞fill
16.13.1
來更改顏色。 請看下面的例子:
home.svg
<svg fill="#000000" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24px" height="24px"><path d="M 12 2.0996094 L 1 12 L 4 12 L 4 21 L 11 21 L 11 15 L 13 15 L 13 21 L 20 21 L 20 12 L 23 12 L 12 2.0996094 z M 12 4.7910156 L 18 10.191406 L 18 11 L 18 19 L 15 19 L 15 13 L 9 13 L 9 19 L 6 19 L 6 10.191406 L 12 4.7910156 z"/></svg>
ShowIcon/index.js
import React from 'react';
import HomeIcon from './home.svg';
const ShowIcon = props => {
return (
<HomeIcon fill='#ccc' />
)
}
export default ShowIcon;
但是,我在使用幾個圖標進行測試后注意到它不適用於所有圖標。 因此,請在使用前進行測試。
如果你想改變svg的顏色而不改變svg的樣式或者不改變svg本身的代碼。
您也可以將 svg 的顏色更改為圖像。
這可以通過應用 css 的過濾器屬性來完成。 將您的顏色更改為 css filter 。
對於藍色
invert(9%) sepia(99%) saturate(5630%) hue-rotate(246deg) brightness(111%) contrast(148%);
代碼
<img src="path/to/svg"
style={{filter: "invert(9%) sepia(99%) saturate(5630%) hue-rotate(246deg) brightness(111%) contrast(148%)"}}
/>
我遇到了同樣的問題,嘗試了大部分建議都沒有運氣。
我用一種非常簡單的方式解決了它......無需為SVG圖像創建組件
>>> 僅在 .svg 文件中的<path fill='#9d8189' ...></path>
中添加所需的顏色作為填充
我找到了一個有趣的解決方案來解決這個問題。 不知道它是否在所有情況下都有效......好吧,所以我有一個像這樣導入的 svg:
import LockIcon from "../assets/lock.svg"
然后將其渲染為:
<LockIcon color={theme.colors.text.primary} />
然后在 lock.svg 中,我只在 svg 標簽中添加了fill="currentColor"
。
希望這對你們中的一些人有用。
我的建議是使用像 SVG 到字體轉換器這樣的工具, icomoon是我最喜歡的,創建你自己的自定義字體庫來導入你的 SVG 圖標
道具
缺點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.