具有动态填充颜色的SVG文件-Vue



我正在用VueJS 3制作一个twitter克隆应用程序。

我将Twitter的徽标保存为.svg文件,并可以将其与<img />标记一起使用。当我为<svg>标记赋予fill="#fff"属性时,我也可以更改其颜色。然而,我想在多个地方使用这个.svg文件,并使用不同的颜色。

因此,我尝试通过给<img />标记类fill-whitebg-whitetext-white来动态更改svg的颜色,但没有成功。

我当前的.svg文件-带白色

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" aria-hidden="true">
<g>
<path fill="#fff" d="M23.643 4.937c-... 1.7-1.477 2.323-2.41z"></path>
</g>
</svg>

Img标签

<img
src="/twitter-bird.svg"
draggable="false"
class="w-52 lg:w-96 fill-white"
alt="Twitter Bird"
/>

我在.svg文件上尝试过

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" aria-hidden="true">
<g>
<path fill="params(fill) #fff" d="M23.643 4.937c-... 1.7-1.477 2.323-2.41z"></path>
</g>
</svg>

我知道我需要使这个svg的颜色可编辑。但我不知道该怎么做。

您可以从svg文件中制作组件,并将填充绑定到prop:

const app = Vue.createApp({
data() {
return {
colors: ['#8A2BE2', 'rgb(255,255,0)', '#008000'],
};
},
})
app.component('myImg', {
template: `
<svg height="40" viewBox="0 0 107.1 107.1" style="enable-background:new 0 0 107.1 107.1;" xml:space="preserve">
<path :fill="color" d="M2.287,47.815l23.096,19.578L18.2,96.831c-1.411,5.491,4.648,9.998,9.575,6.901L53.55,87.813l25.774,15.916   c4.79,2.955,10.844-1.408,9.576-6.902l-7.184-29.435l23.099-19.579c4.363-3.661,2.111-10.844-3.662-11.267l-30.282-2.255   L59.464,6.266c-2.112-5.211-9.577-5.211-11.832,0L36.225,34.292L5.944,36.547C0.174,37.113-2.081,44.154,2.287,47.815z"/>
</svg>
`,
props: ['color']
})
app.mount('#demo')
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
<div id="demo">
<div v-for="col in colors">
<my-img :color="col"></my-img>
</div>
</div>

const app = Vue.createApp({
data() {
return {
colors: ['#8A2BE2', 'rgb(255,255,0)', '#008000'],
};
},
})
app.component('myImg', {
template: `
<svg height="40" viewBox="0 0 107.1 107.1" style="enable-background:new 0 0 107.1 107.1;" xml:space="preserve">
<path :fill="color" d="M2.287,47.815l23.096,19.578L18.2,96.831c-1.411,5.491,4.648,9.998,9.575,6.901L53.55,87.813l25.774,15.916   c4.79,2.955,10.844-1.408,9.576-6.902l-7.184-29.435l23.099-19.579c4.363-3.661,2.111-10.844-3.662-11.267l-30.282-2.255   L59.464,6.266c-2.112-5.211-9.577-5.211-11.832,0L36.225,34.292L5.944,36.547C0.174,37.113-2.081,44.154,2.287,47.815z"/>
</svg>
`,
props: ['color']
})
app.mount('#demo')
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
<div id="demo">
<div v-for="col in colors">
<my-img :color="col"></my-img>
</div>
</div>

最新更新