2017-04-15 1 views
1

사용시 패턴의 색상을 변경하고 싶습니다.SVG 패턴의 색상을 변경하는 방법은 무엇입니까?

예를 들어, 빨간색 선이 녹색 인 원을 그리게됩니다.

<svg width="300" height="300" viewBox="0 0 300 300" 
    xmlns="http://www.w3.org/2000/svg"> 
    <defs> 
    <pattern id="checked" width="2" height="2" stroke="black" stroke-linecap="square" stroke-width="1" patternTransform="rotate(45) scale(2)" 
     patternUnits="userSpaceOnUse"> 
     <line x1="0" y1="0" x2="0" y2="2"></line> 
     <line x1="0" y1="0" x2="2" y2="0"></line> 
    </pattern> 
    </defs> 
    <circle cx="60" cy="60" r="50" stroke="red" fill="url(#checked)"/> 
    <circle cx="120" cy="60" r="50" stroke="blue" fill="url(#checked)"/> 
</svg> 

http://codepen.io/anon/pen/RVNmRY

도 모든 색상의 새로운 패턴을 만들 필요없이 그렇게 할 수 있습니까?

나는 필터 (https://stackoverflow.com/a/21427316/1981832)를 사용하여 가능할 수도 있다는 의견을 읽었습니다. 하지만 어떻게해야할지 모르겠다.

+0

색상 당 패턴에 어떤 문제가 있습니까? –

+0

@RobertLongson 감사합니다. 내 페이지에서 사용자는 그릴 색과 패턴을 선택할 수 있어야합니다. 색상 당 패턴을 사용하면 사용자가 색상을 전환 할 때마다 페이지에 새 패턴을 첨부해야합니다. 그건 나에게 상당히 성가시다. 그러나 어쩌면 여기서 뭔가를 간과 할 수 있습니다. – Daniel

+0

색상 이름을 패턴 ID (또는 데이터 속성)에 넣고 존재하지 않으면 색상 이름을 만듭니다. CSS에서 색상을 설정하고 CSS를 업데이트 할 수 있지만 그 패턴을 가진 기존의 모든 모양에 영향을 미칩니다. –

답변

1

다음은 "블루 스크린"기술을 사용하여 필터가있는 모양을 다시 칠하는 방법입니다. 필터는 빨간색 구성 요소 만 남기고 (매트릭스의 첫 번째 1) 파란색을 녹색으로 변환하고 (다음 "1") 불투명도를 변경하지 않습니다 (마지막 "1"). 이 특정 필터는 분명히 예제에서만 작동하지만 다른 소스로 변환 될 색상으로 특정 소스 색상을 사용하는보다 일반적인 필터를 작성할 수 있습니다.

<svg width="300" height="300" viewBox="0 0 300 300" 
 
    xmlns="http://www.w3.org/2000/svg"> 
 
    <defs> 
 
    <filter id="blue-to-green"> 
 
    <feColorMatrix type="matrix" values="1 0 0 0 0 
 
              0 0 1 0 0 
 
              0 0 0 0 0 
 
              0 0 0 1 0"/> 
 
    </filter> 
 
    
 
    <pattern id="checked" width="2" height="2" stroke="blue" stroke-linecap="square" stroke-width="1" patternTransform="rotate(45) scale(2)" 
 
     patternUnits="userSpaceOnUse"> 
 
     <line x1="0" y1="0" x2="0" y2="2"></line> 
 
     <line x1="0" y1="0" x2="2" y2="0"></line> 
 
    </pattern> 
 
    </defs> 
 
    
 
    <circle cx="60" cy="60" r="50" stroke="red" fill="url(#checked)" filter="url(#blue-to-green)"/> 
 
    <circle cx="120" cy="60" r="50" stroke="blue" fill="url(#checked)"/> 
 
</svg>

+0

감사합니다. 네, 각 색상별로 필터를 추가해야합니다. 이는 각 색상에 패턴을 추가하는 것보다 많은 개선이 아닙니다. – Daniel

+0

예, SVG에 매개 변수가있는 필터가 있으면 좋겠지 만 아쉽게도 없습니다. –

관련 문제