web-dev-qa-db-ja.com

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

次のようなコードがあります。

  <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>

SVGパスの塗りつぶしの色をCSSなどの方法でパスタグ内で実際に変更せずに変更することは可能ですか?

159

はい、あなたはCSSをSVGに適用することができますが、HTMLをスタイリングするときと同じように、要素を一致させる必要があります。あなたがそれをすべてのSVGパスに適用したいだけならば、あなたは使うことができます、例えば:

​path {
    fill: blue;
}​

少なくとも私がテストしたWebKitとGeckoベースのブラウザでは、外部CSSはパスのfill属性を上書きするように見えます。もちろん、もしあなたが<path style="fill: green">と書けば、それは外部のCSSも上書きするでしょう。

182
Nicholas Riley

要素内にマウスを移動して色を変更したい場合は、これを試してください。

path:hover{
  fill:red;
}
36

あなたがSVGファイルのソースコードに入るならば、あなたはfillプロパティを修正することによってカラーフィルを変えることができます。

<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ファイルを開き、それを試してみてください。

21
Samuel Ramzan

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

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

私はCSSトリックに関する素晴らしいリソースに出会いました: https://css-tricks.com/using-svg/

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

私はソースのsvgに最小限の編集を要求し、それをhtmlドキュメントに埋め込むことを要求しないものを好みました。このオプションは<object>タグを利用します。


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

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

あなたのSVN文書に添付するCSSファイルを作成します。私のソースSVGパスは16pxに拡大縮小され、私はそれを4倍にして64に拡大しました。パスは1つしかなかったのでそれ以上選択する必要はありませんでしたが、パスにはfill属性が含まれていたので、!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" ?>
6
ThorSummoner

この構文を使用できますが、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>
1
Ahmed Hakim