CSSでsvgパスの塗りつぶし色を変更できますか?


200

私は次のコードを持っています:

  <span>
     <svg height="32" version="1.1" width="32" xmlns="http://www.w3.org/2000/svg" style="overflow: hidden; position: relative; left: -0.0166626px; top: -0.983337px;">
        <desc></desc>
        <defs/>
        <path style="" fill="#333333" stroke="none" d="M15.985,5.972C8.422,5.972,2.289999999999999,10.049,2.289999999999999,15.078C2.289999999999999,17.955,4.302999999999999...............1,27.68,22.274Z"/>
      </svg>&nbsp;
  </span>

実際にパスタグ内で変更せずに、CSSまたは他の方法でSVGパスの塗りつぶし色を変更することはできますか?



今日では、あなたは、ビアスタイル外部ファイルすることができます<symbol><use>この回答を参照してください。
totymedli

回答:


218

はい、CSSをSVGに適用できますが、HTMLのスタイルを設定するときと同じように、要素を一致させる必要があります。それをすべてのSVGパスに適用したいだけの場合、たとえば次のように使用できます。

path {
    fill: blue;
}​

外部CSS fillは、少なくとも私がテストしたWebKitおよびGeckoベースのブラウザーでは、パスの属性をオーバーライドするようです。もちろん、たとえば、あなたが書いた場合、<path style="fill: green">それは外部CSSもオーバーライドします。


7
これはまだChromeで動作しますか?CSSでSVGパスの色を変更するのに苦労しています。
ダラスクラーク

5
ニコラスに感謝します。理由を見つけたと思います。私のSVGは<img>タグを介してページに埋め込まれましたが、CSSはコンテンツを変更できないようです。これは正しいです?
ダラスクラーク

40
CSSでSVGのスタイルを設定するには、SVGコードをマークアップに含める必要があります<svg>。タグを介してSVGを含めても機能しません。
Ricardo Zea

2
@RicardoZeaこれに対する1つの警告:外部SVGファイルからのオブジェクトを含めることができ、<use href="external.svg#objId" />ローカルCSSはある程度適用されます。
ケンベローズ

1
@KenBellowsそれは本当です、私は今それを学びました。注意すべきことの1つは、CSSでSVG固有のプロパティを使用する必要があることです。そうしないと機能しません。たとえば、のfill: #000;代わりに使用する背景色を変更しますbackground: #000;
Ricardo Zea 2017年


28

SVGファイルのソースコードに移動する場合、塗りつぶしプロパティを変更することにより、塗りつぶしを変更できます。

<svg fill="#3F6078" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
</svg> 

お好みのテキストエディタを使用して、SVGファイルを開き、それをいじってください。


2
「...パスタグ内で実際に変更せずに他の手段をとる」という質問の表現に基づいて技術的に正しく、私が必要とする方法で正確に機能しました。賛成投票してください!
Travis Watson

5
これはどのように答えますか?問題はCSSであり、ネイティブSVGではありません
zhuhang.jasper

2
あなた自身のジャスパー氏の答えはありますか?
Samuel Ramzan

2
これは答えではありません。これは質問の歪みです。
QMaster

16

あなたはこのCSSをSVGサークルに置きました。

svg:hover circle{
    fill: #F6831D;
    stroke-dashoffset: 0;
    stroke-dasharray: 700;
    stroke-width: 2;
}

8

css-tricksで素晴らしいリソースを見つけました:https : //css-tricks.com/using-svg/

そこで説明されている解決策はいくつかあります。

私はソースのsvgを最小限に編集する必要があり、HTMLドキュメントに埋め込む必要がないものを選択しました。このオプションは<object>タグを利用します。


を使用してsvgファイルをHTMLに追加します<object>。html属性とも宣言widthしましたheight。これらの幅と高さを使用すると、svgドキュメントは拡大縮小されません。関連するsvg cssファイルのタグにcss transform: scale(...)ステートメントを使用して回避しましたsvg

<object type="image/svg+xml" data="myfile.svg" width="64" height="64"></object>

svnドキュメントに添付するcssファイルを作成します。私のソースsvgパスは16pxにスケーリングされましたが、4倍にして64にアップスケールしました。パスは1つしかなかったので、具体的に選択する必要はありませんでしたが、パスには塗りつぶし属性があったため!IMPORTANT、cssに優先させる必要がありました。

#svg2 {
    width: 64px; height: 64px;
    transform: scale(4);
}
path {
    fill: #333 !IMPORTANT;
}

開始<svgタグの前にターゲットsvgファイルを編集して、スタイルシートを含めます。hrefはsvgファイルのURLに関連していることに注意してください。

<?xml-stylesheet type="text/css" href="myfile.css" ?>

4

この構文を使用できますが、SVGファイルを変更する必要があります。そして、SVG自体からすべての塗りつぶし/ストロークを削除します。

icon.svg

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<!-- use symbol instead of defs and g, 
  must add viewBox on symbol just copy yhe viewbox from the svg tag itself
  must add id on symbol
-->
<symbol id="location" viewBox="0 0 430.114 430.114">
  <!-- add all the icon's paths and shapes here -->
  <path d="M356.208,107.051c-1.531-5.738-4.64-11.852-6.94-17.205C321.746,23.704,261.611,0,213.055,0   C148.054,0,76.463,43.586,66.905,133.427v18.355c0,0.766,0.264,7.647,0.639,11.089c5.358,42.816,39.143,88.32,64.375,131.136   c27.146,45.873,55.314,90.999,83.221,136.106c17.208-29.436,34.354-59.259,51.17-87.933c4.583-8.415,9.903-16.825,14.491-24.857   c3.058-5.348,8.9-10.696,11.569-15.672c27.145-49.699,70.838-99.782,70.838-149.104v-20.262   C363.209,126.938,356.581,108.204,356.208,107.051z M214.245,199.193c-19.107,0-40.021-9.554-50.344-35.939   c-1.538-4.2-1.414-12.617-1.414-13.388v-11.852c0-33.636,28.56-48.932,53.406-48.932c30.588,0,54.245,24.472,54.245,55.06   C270.138,174.729,244.833,199.193,214.245,199.193z"/>
</symbol>

icon.html

<svg><use xlink:href="file_path/location.svg#location"></use></svg>

「塗りつぶし/ストロークをすべて削除」—塗りつぶしとストロークを削除すると、svgが壊れる可能性があります(少なくとも、私のアイデアでこれを実行し、結果をプレビューウィンドウで確認する場合)。また一つは使用することができますcurrentColor
フランクNocke

4

svgのパスの塗りつぶし色を変更することができます。CSSスニペットについては、以下を参照してください。

  1. すべてのパスに色を適用するには: svg > path{ fill: red }

  2. 最初のdパスを申請するには: svg > path:nth-of-type(1){ fill: green }

  3. 2番目のdパスを申請するには: svg > path:nth-of-type(2){ fill: green}

  4. 別のdパスに適用するには、パス番号のみを変更します。
    svg > path:nth-of-type(${path_number}){ fill: green}

  5. Angular 2から8でCSSをサポートするには、カプセル化の概念を使用します。

:host::ng-deep svg path:nth-of-type(1){
        fill:red;
    }

2

すべてのSVGを入力します。

fill="var(--svgcolor)"

Cssの場合:

:root {
  --svgcolor: tomato;
}

疑似クラスを使用するには:

span.github:hover {
  --svgcolor:aquamarine;
}

説明

root = htmlページ。
--svgcolor =変数。
span.github =クラスgithub、内部のsvgアイコンでスパン要素を選択し、疑似クラスホバーを割り当てます。


Neto StackOverflowへようこそ。これは良い答えのようです。助けてくれてありがとう。
srm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.