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.