SVG 아이콘 색상 CSS 안 바뀜 원인과 해결법

SVG 아이콘에 CSS로 color를 줬는데 색이 하나도 바뀌지 않는다면, 이유는 대부분 아이콘 파일 안에 fill="#3b82f6" 같은 색상 값이 이미 속성으로 박혀 있기 때문입니다. CSS의 color는 이 값을 자동으로 덮어쓰지 않습니다. 이 글은 왜 상속이 끊기는지 구조를 짚고, 파일 안의 fill·stroke 값 자체를 원하는 색으로 바꾸는 방법을 안내합니다.

요약 ① SVG의 fill/stroke 속성은 CSS color와 자동으로 연결되지 않고, SVG나 CSS에서 fill: currentColor를 명시해야만 상속됩니다. ② <img> 태그로 불러온 SVG는 페이지의 어떤 CSS도 내부에 전달되지 않아 애초에 색을 바꿀 수 없습니다. ③ 가장 확실한 방법은 SVG 코드 안의 fill/stroke 값 자체를 원하는 색상 코드로 바꿔버리는 것입니다.

문제

아이콘 세트를 다운로드해서 사이트에 넣고, hover 시 색을 바꾸려고 CSS에 .icon { color: red; }를 줬는데 아이콘은 그대로인 경우가 흔합니다. 개발자 도구로 열어보면 <path fill="#3b82f6">처럼 색상 값이 요소마다 이미 박혀 있는 걸 발견하게 됩니다.

이유는 SVG의 fill/stroke가 텍스트의 color와는 별개의 그리기 속성이기 때문입니다. fill의 초기값은 currentColor가 아니라 검정(black)이라서, 부모 요소의 color를 값으로 물려받으려면 SVG 쪽에서 fill="currentColor"라고 명시적으로 선언돼 있어야 합니다. 다운로드한 아이콘 대부분은 원작자가 이미 특정 색(예: 파란색)을 fill 속성 값으로 박아뒀기 때문에, 다른 색이 끼어들 자리가 없는 것입니다.

여기에 아이콘을 <img src="icon.svg">처럼 이미지 태그로 불러오는 경우는 더 근본적인 문제가 있습니다. 브라우저는 <img>로 불러온 SVG를 완전히 별개의 문서처럼 취급해서, 부모 페이지의 CSS가 currentColor조차 전달하지 못합니다. 이 경우는 CSS를 아무리 만져도 색이 바뀌지 않습니다.

해결

원본 SVG 코드를 손대지 않고 CSS만으로 해결하려면, 먼저 아이콘을 <img>가 아니라 <svg>...</svg> 형태로 페이지 HTML에 직접 붙여넣어야 합니다(인라인 SVG). 그런 다음 각 요소의 fill="#3b82f6" 속성을 지우거나 fill="currentColor"로 바꿔야, 비로소 CSS의 .icon { color: red; }가 상속되어 적용됩니다.

이 방식은 요소가 한두 개면 손으로 편집해도 되지만, 색조가 서로 다른 fill 값이 여러 개 섞여 있거나(테두리색과 채우기색이 다른 경우 등) 아이콘 개수가 많으면 하나씩 찾아 바꾸기가 번거롭습니다. 이럴 때는 <img> 태그로 쓰는 경우까지 포함해서, SVG 코드 자체의 fill/stroke 속성 값을 원하는 색으로 한 번에 치환하는 편이 더 확실합니다.

저희 도구로 확인하기 전에, 텍스트 편집기에서 직접 할 경우의 원리를 알아두면 결과를 검증하기 쉽습니다. SVG 코드 안에서 fill="..." 문자열을 찾아 원하는 색상 코드로 바꾸고, 선(테두리)도 바꾸려면 stroke="..." 값도 같이 바꾸면 됩니다. 단, 값이 none이나 transparent인 속성은 원래 "칠하지 않음"을 의미하므로 건드리지 않아야 합니다.

SVG 단색 채우기(Fill) 일괄 색상 변경기

SVG 코드를 붙여넣고 색만 골라 바로 바꿔보세요

자주 막히는 지점

증상원인
도구로 바꿨는데 실제 사이트에서 안 보임<img> 태그로 불러온 SVG는 파일 자체를 교체해야 반영됩니다. 바뀐 코드를 다운로드해 원본 파일을 덮어써야 합니다
선(테두리) 색만 그대로임"선 색도 일괄 변경" 체크박스를 켜지 않으면 stroke 속성은 건드리지 않습니다
일부 경로만 색이 안 바뀜해당 요소에 애초에 fill 속성이 없거나 값이 none인 경우로, 원래 색이 없는 부분이라 정상입니다
그라디언트가 단색으로 바뀜fill="url(#gradientA)"처럼 그라디언트를 참조하던 값도 문자열 치환 대상이라 단색으로 덮어써집니다
CSS의 .icon { fill: red }가 안 먹힘아이콘에 style="fill:..." 인라인 스타일이 있으면 외부 CSS보다 우선순위가 높아 이깁니다

정리

SVG 아이콘 색이 CSS로 안 바뀌는 건 대부분 fill/stroke 속성이 색을 직접 지정하고 있어 color 상속이 끊긴 것이 원인이고, <img> 태그로 쓰는 경우는 애초에 CSS가 침투하지 못하는 구조 때문입니다. 인라인 SVG로 바꾸고 fill: currentColor를 쓰는 방법도 있지만, 여러 색상 값을 한 번에 원하는 색으로 바꾸고 싶다면 코드 안의 값 자체를 치환하는 편이 빠릅니다.

SVG 단색 채우기(Fill) 일괄 색상 변경기

SVG 코드를 붙여넣고 색만 골라 바로 바꿔보세요

자주 묻는 질문

태그로 쓰는 아이콘도 색을 바꿀 수 있나요?

<img>로 불러온 SVG는 페이지 CSS가 내부에 전달되지 않으므로 CSS로는 바꿀 수 없습니다. 대신 SVG 파일 자체의 fill/stroke 값을 원하는 색으로 바꾼 뒤, 그 파일로 <img> 소스를 교체하면 됩니다.

그라디언트나 패턴을 쓰는 아이콘도 지원하나요?

값 자체를 새 색상으로 바꾸는 방식이라, fill="url(#gradientA)"처럼 그라디언트 정의를 참조하던 부분도 지정한 단색으로 바뀝니다. 그라디언트 효과를 유지하고 싶다면 <defs>에 정의된 그라디언트의 색상 값을 직접 수정해야 합니다.

일부 아이콘 조각만 색이 안 바뀌는 이유는 뭔가요?

해당 요소에 애초에 fill 속성이 없거나 값이 none/transparent인 경우입니다. 이런 요소는 원래 채워지지 않는 부분(빈 공간, 외곽선만 있는 조각)이라 색을 바꿀 대상 자체가 아닙니다.

가격 보기카톡 무료 상담