簡體   English   中英

使用 svg 背景圖像時如何設置自定義描邊顏色

[英]How to set custom stroke color when using svg background-image

我是 css 初學者。

在過去的幾個小時里,我一直在努力創建一個切換開關以使用代表當前模式的圖標來切換暗模式。 幸運的是,我設法擁有不同的圖標,具體取決於復選框是否被選中。

現在,剩下的是將圖標描邊設置為根據當前主題(亮/暗)而不同的顏色變量。

我創建了一個codepen https://codepen.io/jam2020/pen/ExEozxw?editors=1100 ,我將內圈的背景顏色設置為紅色以使其有點明顯

 :root { --n: gray; --s: white; --b1: black; --b3: red; --tt-width: 40px; --tt-height: 22px; --tt-border-radius: 11px; --tt-circle-size: calc(var(--tt-height) - 4px); --tt-icon-size: calc(var(--tt-circle-size) - 2px); --tt-light-icon: url('data:image/svg+xml;utf8,<svg class="ThemeTogglerIcon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z" /><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z" /><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z" /><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z" /><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z" /><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z" /><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z" /><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z" /><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z" /></svg>'); --tt-dark-icon: url('data:image/svg+xml;utf8, <svg class="ThemeTogglerIcon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z" /></svg>'); }.ThemeToggler { width: var(--tt-width); height: var(--tt-height); flex-shrink: 0; border-radius: var(--tt-border-radius); background-color: var(--n); border: 1px solid var(--b1); display: inline-block; cursor: pointer; }.ThemeToggler:hover { border-color: hsl(var(--s)); }.ThemeTogglerInput { display: none; }.ThemeTogglerFill { position: relative; }.ThemeTogglerFill::before { content: ""; position: absolute; top: 1px; left: 1px; height: var(--tt-circle-size); width: var(--tt-circle-size); background: var(--b3); box-shadow: 1px 0px 4px rgba(0, 0, 0, 0.15); border-radius: var(--tt-border-radius); /* icon Configuration */ background-image: var(--tt-light-icon); background-size: auto var(--tt-icon-size); background-repeat: no-repeat; background-position: center; color: red; transition: background-color 0.25s, transform 0.25s; }.ThemeTogglerInput:checked~.ThemeTogglerFill::before { transform: translateX(var(--tt-circle-size)); background-image: var(--tt-dark-icon); }
 <label class="ThemeToggler" for="ThemeTogglerID"> <input id="ThemeTogglerID" class="ThemeTogglerInput" type="checkbox" /> <div class="ThemeTogglerFill" > </div> </label>

我現在的問題是如何在使用 svg 背景圖像時設置自定義筆觸顏色?

提前致謝

由於 svg 是背景圖像,因此您只能真正編輯 svg 代碼以更改筆畫。

如果您想完全通過 css 控制顏色,則需要將 svg 直接嵌入到您的 hmtl 代碼中。 然后你可以像其他任何 html 元素一樣設置它

這是直接 svg-edit 的示例,月亮圖標上的顏色為黃色:

 :root { --n: gray; --s: white; --b1: black; --b3: red; --tt-width: 40px; --tt-height: 22px; --tt-border-radius: 11px; --tt-circle-size: calc(var(--tt-height) - 4px); --tt-icon-size: calc(var(--tt-circle-size) - 2px); --tt-light-icon: url('data:image/svg+xml;utf8,<svg class="ThemeTogglerIcon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z" /><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z" /><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z" /><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z" /><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z" /><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z" /><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z" /><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z" /><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z" /></svg>'); --tt-dark-icon: url('data:image/svg+xml;utf8, <svg class="ThemeTogglerIcon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="yellow" stroke="yellow" d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z" /></svg>'); }.ThemeToggler { width: var(--tt-width); height: var(--tt-height); flex-shrink: 0; border-radius: var(--tt-border-radius); background-color: var(--n); border: 1px solid var(--b1); display: inline-block; cursor: pointer; }.ThemeToggler:hover { border-color: hsl(var(--s)); }.ThemeTogglerInput { display: none; }.ThemeTogglerFill { position: relative; }.ThemeTogglerFill::before { content: ""; position: absolute; top: 1px; left: 1px; height: var(--tt-circle-size); width: var(--tt-circle-size); background: var(--b3); box-shadow: 1px 0px 4px rgba(0, 0, 0, 0.15); border-radius: var(--tt-border-radius); /* icon Configuration */ background-image: var(--tt-light-icon); background-size: auto var(--tt-icon-size); background-repeat: no-repeat; background-position: center; color: red; transition: background-color 0.25s, transform 0.25s; }.ThemeTogglerInput:checked~.ThemeTogglerFill::before { transform: translateX(var(--tt-circle-size)); background-image: var(--tt-dark-icon); }
 <label class="ThemeToggler" for="ThemeTogglerID"> <input id="ThemeTogglerID" class="ThemeTogglerInput" type="checkbox" /> <div class="ThemeTogglerFill" > </div> </label>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM