CSS로 svg 경로의 채우기 색상을 변경할 수 있습니까?


202

다음 코드가 있습니다.

  <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는 내부의 내용을 수정할 수없는 것으로 보입니다. 이 올바른지?
Dallas Clark

40
의 스타일 SVG에 CSS 위해서는, 당신이 있다는 사실을 숙지 마크 업에서 SVG 코드를 포함하는 당신이를 통해 SVG 포함 할 경우이 작업을하지 않는, <svg>태그를.
Ricardo Zea

2
@RicardoZea 한 가지주의 사항 : 외부 SVG 파일의 객체를 포함 할 수 있으며 <use href="external.svg#objId" />로컬 CSS는 어느 정도 적용됩니다.
Ken Bellows

1
@KenBellows 사실은, 지금 배웠습니다. 주목할 것은 CSS에서 SVG 특정 속성 을 사용해야 한다는 것입니다. 그렇지 않으면 작동하지 않습니다. 예를 들어, fill: #000;대신 사용 하는 배경색을 변경합니다 background: #000;.
Ricardo Zea


28

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 파일을 열어서 재생하십시오.


2
기술적으로 "경로 태그 내에서 실제로 변경하지 않고 다른 수단"이라는 질문에 기초하여 정확하고 내가 필요한 방식으로 정확하게 작동했습니다. 공감하다!
트래비스 왓슨

5
이것은 어떻게 대답합니까? 문제는 CSS가 아닌 기본 SVG에
zhuhang.jasper

2
Jasper 씨 자신의 답변이 있습니까?
사무엘 람잔 1

2
이것은 답이 아닙니다. 이것이 질문의 왜곡입니다.
QMaster

16

이 CSS를 svg circle에 넣습니다.

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>태그를 사용합니다 .


<object>;를 사용하여 svg 파일을 HTML에 추가하십시오 . 또한 html 속성 width및을 선언했습니다 height. 이 너비와 높이를 사용하여 svg 문서의 크기가 조정되지 않아 관련 svg css 파일 transform: scale(...)svg태그에 대해 css 문을 사용하여 문제를 해결했습니다 .

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

svn 문서에 첨부 할 CSS 파일을 작성하십시오. 내 소스 svg 경로는 16px로 크기가 조정되었으며 4 배로 64로 업 스케일했습니다. 그것은 하나의 경로 만 가지고 있었기 때문에 더 구체적으로 선택할 필요가 없었지만 경로에는 채우기 속성 !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
Frank Nocke

4

svg의 경로 채우기 색상을 변경할 수 있습니다. CSS 스 니펫은 아래를 참조하십시오.

  1. 모든 경로에 색상을 적용하려면 svg > path{ fill: red }

  2. 첫 번째 d 경로를 신청하려면 : svg > path:nth-of-type(1){ fill: green }

  3. 두 번째 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;
}

설명

루트 = html 페이지.
--svgcolor = 변수
span.github = 내부에 svg 아이콘으로 클래스 github이있는 span 요소를 선택하고 의사 클래스 호버를 할당합니다.


StackOverflow, Neto에 오신 것을 환영합니다. 이것은 좋은 대답처럼 보입니다. 도움을 주셔서 감사합니다.
srm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.