14장: 페인트 서버 — 그라디언트와 패턴

14.1. 소개

이 섹션에서는 페인트 서버를 다룹니다. 페인트 서버는 객체의 fill 또는 stroke를 문서 내 다른 곳에 정의된 리소스로 지정할 수 있는 방법입니다. 이를 통해 리소스를 문서 전체에서 재사용할 수 있습니다. 채우기 및 스트로크에 대한 일반적인 논의는 채우기와 스트로크 섹션을 참고하세요.

SVG는 여러 종류의 페인트 서버를 정의합니다:

SVG 2 요구사항: 도형에 임의의 채우기.
결정: SVG 2에서는 임의의 요소로부터 채우기와 스트로크를 지원해야 한다.
목적: 예를 들어 비디오나 이미지를 채우기 소스로 사용할 수 있도록.
담당자: Alex? (조치 없음)
두 가지 페인트 서버 유형 이미지.

두 가지 페인트 서버 유형. 왼쪽부터 오른쪽까지: 선형 그라디언트. 패턴.

페인트 서버는 URL 참조fill 또는 stroke 속성에 포함하여 사용합니다(예: fill="url(#MyLightPurple)").

속성은 페인트 서버 요소의 상위 요소로부터 상속되며, 페인트 서버 요소를 참조하는 요소로부터는 상속되지 않습니다.

페인트 서버 요소는 직접 렌더링되지 않으며, 오직 fillstroke 속성으로 참조될 때만 사용됩니다. 이러한 요소의 display 값은 항상 none으로 사용자 에이전트 스타일 시트에서 설정되어야 하며, 이 선언은 다른 CSS 규칙이나 프레젠테이션 속성보다 우선해야 합니다. 페인트 서버 요소는 해당 요소나 상위 요소의 display 속성이 none으로 설정되어 있어도 참조할 수 있습니다.

14.1.1. 페인트 서버를 템플릿으로 사용하기

대부분의 페인트 서버 요소는 ‘href’ 속성을 허용하며, 이 속성으로 호환되는 페인트 서버 요소를 템플릿으로 지정할 수 있습니다. 템플릿 요소에 정의된 속성은 현재 요소에 해당 속성이 지정되지 않은 경우 초기값 대신 사용됩니다. 또한, 현재 요소가 설명 요소를 제외한 자식 콘텐츠를 갖지 않으면, 템플릿 요소의 자식 콘텐츠가 복제되어 대체됩니다.

설명 콘텐츠 제외는 SVG 2에서 pattern에 새로 추가된 것으로, 그라디언트의 동작과 일치하며, 설명 콘텐츠가 모든 SVG 요소에 유효하도록 변경된 것과도 관련됩니다.

또한 템플릿 교차 참조가 외부 파일 리소스일 수 있다는 점도 새로 추가된 내용입니다(SVG 1.1의 각 장에서는 이 점에 대해 지침이 일관되지 않았음). 자식 요소의 "상속"은 그림자 트리(shadow tree)를 통해 표현됩니다.

템플릿은 임의의 깊이까지 간접적으로 지정할 수 있으며(외부 파일 리소스의 보안 제한에 따름, 이로 인해 참조가 무효가 될 수 있음), 참조된 템플릿 요소가 관련 자식 콘텐츠를 갖지 않거나 지정된 속성을 정의하지 않은 경우, 속성 값이나 복제 콘텐츠는 템플릿의 ‘href’ 속성으로 참조된 다른 요소에서 가져옵니다.

이 장에서 각 ‘href’ 속성의 설명은 템플릿 처리의 제한을 다음과 같이 정의합니다:

지정된 속성이 현재 요소에 정의되어 있지 않거나, 현재 요소가 설명 요소를 제외한 자식 요소를 갖지 않으면, 사용자 에이전트는 URL 처리를 통해 참조된 리소스를 식별해야 합니다. URL 참조가 무효가 아니면, URL의 대상 요소가 템플릿 요소로 사용되며, 다음과 같이 처리합니다:

페인트 서버 요소에 그림자 트리가 있으면, 해당 트리의 요소 인스턴스를 페인트 서버 요소의 자식처럼 페인트 서버 효과를 렌더링할 때 사용해야 합니다.

템플릿을 위한 use-element 그림자 트리 모델은 복제된 콘텐츠가 원본과 다른 스타일을 상속받을 수 있도록 합니다. 이 동작은 SVG 2에서 새로 정의된 것으로, SVG 1.1에서는 상속된 페인트 서버 콘텐츠에 스타일이 어떻게 적용되는지 정의하지 않았습니다.

14.2. 그라디언트

그라디언트는 도화면의 여러 지점 사이에서 색상이 부드럽게 변하는 효과입니다. SVG는 세 가지 타입의 그라디언트를 제공합니다:

그라디언트를 정의한 이후, 그래픽 요소fill 또는 stroke 속성에 그라디언트를 참조하여 해당 요소를 채우거나 테두리를 줄 수 있습니다.

선형 및 방사형 그라디언트의 색상 변화는 그라디언트 벡터를 따라 배치된 여러 색상 중지점으로 정의됩니다. 그라디언트 노멀은 벡터의 색상이 표면에 어떻게 칠해지는지 결정합니다. 선형 그라디언트의 경우, 노멀은 벡터에 수직인 선입니다. 방사형 그라디언트의 경우, 노멀은 벡터를 직각으로 교차하는 원입니다. 각 그라디언트 노멀은 벡터에 의해 결정된 하나의 색상으로 칠해집니다.

그라디언트 벡터와 노멀이 표시된 선형 및 방사형 그라디언트 이미지.

그라디언트 벡터가 표시된 선형 및 방사형 그라디언트. 벡터는 작은 원으로 표시된 세 개의 중지점으로 구성됩니다. 각각의 그라디언트에 대해 하나의 노멀이 표시되어 있습니다.

선형 및 방사형 그라디언트의 경우, 그라디언트 벡터 상의 두 중지점 사이의 색상 값은 각 채널별로 두 중지점의 색상을 거리 가중치로 선형 보간하여 계산됩니다.

V = C 0 + ( C 1 - C 0 ) ( D - O 0 O 1 - O 0 )
    $V = C0.rgba + (C1.rgba - C0.rgba) * ((D - C0.offset) / (C1.offset - C0.offset));
  

각 채널에 대해:

그래픽 요소가 그라디언트를 참조하면, 개념적으로 그라디언트 벡터와 그라디언트 노멀의 복사본을 자기 자신의 기하에 포함시켜 처리합니다. 그래픽 요소의 기하에 적용된 변형(transform)은 복사된 그라디언트 벡터와 노멀에도 동일하게 적용됩니다. 참조한 그라디언트에 지정된 그라디언트 변형(transform)은 그래픽 요소의 변형이 그라디언트에 적용되기 전에 먼저 적용됩니다.

14.2.1. 정의

그라디언트 요소
그라디언트 요소는 그라디언트 페인트 서버를 정의하는 요소입니다. 이 명세에서는 다음의 그라디언트 요소를 정의합니다: linearGradient, radialGradient.

14.2.2. 선형 그라디언트

선형 그라디언트는 linearGradient 요소로 정의됩니다.

linearGradient
분류:
그라디언트 요소, 직접 렌더링되지 않는 요소, 페인트 서버 요소
콘텐츠 모델:
아래 요소들을 임의의 순서와 개수로 포함 가능:animate, animateTransform, script, set, stop, style
속성:
DOM 인터페이스:

14.2.2.1. 속성

linearGradientx1,y1, x2 그리고 y2 속성은 프레젠테이션 속성이 아닙니다; 사용되는 값은 CSS 스타일의 영향을 받지 않습니다. gradientTransform 속성은 transform 속성에 대한 프레젠테이션 속성입니다.

gradientUnits

x1, y1, x2 그리고 y2 속성의 좌표계를 정의합니다.

userSpaceOnUse | objectBoundingBox
초기값
objectBoundingBox
애니메이션 가능
userSpaceOnUse

gradientUnits="userSpaceOnUse"인 경우, x1, y1, x2, 그리고 y2 값은 그라디언트 요소가 참조될 때의 현재 사용자 좌표계(즉, fill 또는 stroke 속성으로 그라디언트 요소를 참조하는 요소의 사용자 좌표계)를 기준으로 하고, gradientTransform 속성에 지정된 변형을 적용한 결과입니다. 백분율은 현재 SVG 뷰포트에 상대적인 값입니다.

objectBoundingBox

gradientUnits="objectBoundingBox"인 경우, x1, y1, x2 그리고 y2의 사용자 좌표계는 그라디언트가 적용되는 요소의 바운딩 박스(참고: 객체 바운딩 박스 단위)를 기준으로 하며, gradientTransform 속성에 지정된 변형을 적용합니다. 백분율은 객체의 바운딩 박스에 상대적입니다.

gradientUnits="objectBoundingBox"이고 gradientTransform이 항등 행렬(identity matrix)인 경우, 선형 그라디언트의 노멀은 객체 바운딩 박스 공간에서 그라디언트 벡터에 수직입니다(즉, (0,0)이 바운딩 박스의 좌상단, (1,1)이 우하단인 추상 좌표계). 객체의 바운딩 박스가 정사각형이 아니면 바운딩 박스 공간에서 그라디언트 벡터에 수직이던 노멀이 사용자 공간에서는 수직이 아닐 수 있습니다. 그라디언트 벡터가 바운딩 박스의 축과 평행하면 노멀은 계속 수직을 유지합니다. 이는 바운딩 박스 공간에서 사용자 좌표계로 변환할 때의 비균일 스케일링 때문입니다.

gradientTransform

그라디언트 좌표계에서 대상 좌표계로의 선택적 추가 변형을 정의합니다 (예: 'userSpaceOnUse' 또는 'objectBoundingBox'). 이 추가 변형을 통해 그라디언트를 기울이거나 변형할 수 있습니다. 이 추가 변형 행렬은 이전에 정의된 모든 변형(객체 바운딩 박스 단위에서 사용자 좌표계로의 암시적 변환 포함) 이후에 곱해집니다(즉, 우측에 삽입).

<transform-list>
초기값
항등 변형(identity transform)
애니메이션 가능
x1

x1, y1, x2 그리고 y2는 선형 그라디언트의 그라디언트 벡터를 정의합니다. 이 그라디언트 벡터는 시작점과 끝점을 제공하며, 그라디언트 중지점이 이 구간에 맵핑됩니다. 각 속성 값은 숫자 또는 백분율로 지정할 수 있습니다.

<length>
초기값
0%
애니메이션 가능
y1

x1 참고.

<length>
초기값
0%
애니메이션 가능
x2

x1 참고.

<length>
초기값
100%
애니메이션 가능
y2

x1 참고.

<length>
초기값
0%
애니메이션 가능
spreadMethod

그라디언트가 대상 사각형 내부에서 시작하거나 끝날 때 어떻게 처리할지 나타냅니다.

pad | reflect | repeat
초기값
pad
애니메이션 가능
pad
그라디언트의 끝 색상으로 남은 영역을 채웁니다.
reflect
그라디언트 패턴을 시작-끝, 끝-시작, 시작-끝 등으로 반복 반사하여 대상 사각형을 채웁니다.
repeat
그라디언트 패턴을 시작-끝, 시작-끝, 시작-끝 등으로 반복하여 대상 영역이 채워질 때까지 계속합니다.
'spreadMethod'의 세 가지 값 이미지.

spreadMethod의 세 가지 가능한 값을 그림으로 설명합니다. 왼쪽부터 pad, reflect, repeat. 그라디언트 벡터는 바운딩 박스 너비의 40%에서 60%까지 영역을 차지합니다.

href

템플릿 그라디언트 요소에 대한 URL 참조입니다; 유효하려면 참조 대상이 반드시 다른 linearGradient 또는 radialGradient 요소여야 합니다.

페인트 서버를 템플릿으로 사용하는 과정URL 참조 속성, 사용 중단된 XLink 속성의 공통 처리 방법을 참고하세요.

템플릿에서 복제되는 지정 속성은 다음과 같습니다:

URL [URL]
초기값
비어 있음
애니메이션 가능

14.2.2.2. 선형 그라디언트 참고사항

x1 = x2 그리고 y1 = y2인 경우, 채워질 영역은 마지막 그라디언트 중지점의 색상과 투명도를 사용해 단일 색상으로 채워집니다.

예시 lingrad01 은 선형 그라디언트 페인트 서버를 참조해 사각형을 채우는 방법을 보여줍니다.

<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg"
     version="1.1"
     viewBox="0 0 300 200" >

  <title>Example lingrag01</title>
  <desc>Fill a rectangle using a linear-gradient paint server.</desc>

  <defs>
    <linearGradient id="MyGradient">
      <stop offset="5%" stop-color="#A8F" />
      <stop offset="95%" stop-color="#FDC" />
    </linearGradient>
  </defs>

  <!-- The rectangle is filled using a linear-gradient paint server -->
  <rect fill="url(#MyGradient)"
	stroke="black"
	stroke-width="2"
	x="25" y="25" width="250" height="150"/>
</svg>
예시 lingrad01 — 선형 그라디언트 페인트 서버를 참조해 사각형을 채우기

예시 lingrad01

이 예제를 SVG로 보기 (SVG 지원 브라우저만)

14.2.3. 방사형 그라디언트

방사형 그라디언트는 radialGradient 요소로 정의됩니다.

radialGradient
분류:
그라디언트 요소, 직접 렌더링되지 않는 요소, 페인트 서버 요소
콘텐츠 모델:
아래 요소들을 임의의 순서와 개수로 포함 가능:animate, animateTransform, script, set, stop, style
속성:
DOM 인터페이스:

14.2.3.1. 속성

radialGradientcx,cy, r 속성은 프레젠테이션 속성이 아니며, 사용되는 값은 CSS 스타일의 영향을 받지 않습니다. gradientTransform 속성은 transform 속성에 대한 프레젠테이션 속성입니다.

gradientUnits = "userSpaceOnUse | objectBoundingBox"

cx, cy, r, fx, fy, fr 속성의 좌표계를 정의합니다.

초기값
objectBoundingBox
애니메이션 가능
userSpaceOnUse

gradientUnits="userSpaceOnUse"인 경우, cx, cy, r, fx, fy, fr 값은 그라디언트 요소가 참조될 때의 현재 사용자 좌표계(즉, fill 또는 stroke 속성으로 그라디언트 요소를 참조하는 요소의 사용자 좌표계)를 기준으로 하고, gradientTransform 속성에 지정된 변형을 적용한 결과입니다. 백분율은 현재 SVG 뷰포트에 상대적인 값입니다.

objectBoundingBox

gradientUnits="objectBoundingBox"인 경우, cx, cy, r, fx, fy, fr의 사용자 좌표계는 그라디언트가 적용되는 요소의 바운딩 박스(참고: 객체 바운딩 박스 단위)를 기준으로 하며, gradientTransform 속성에 지정된 변형을 적용합니다. 백분율은 객체의 바운딩 박스에 상대적입니다.

gradientUnits="objectBoundingBox"이고 gradientTransform이 항등 행렬(identity matrix)인 경우, 방사형 그라디언트의 고리(rings)는 객체 바운딩 박스 공간에서 원형입니다(즉, (0,0)이 바운딩 박스의 좌상단, (1,1)이 우하단인 추상 좌표계). 객체의 바운딩 박스가 정사각형이 아니면 바운딩 박스 공간에서 원형으로 보이던 고리가 사용자 공간에서는 타원형으로 렌더링됩니다. 이는 바운딩 박스 공간에서 사용자 좌표계로 변환할 때의 비균일 스케일링 때문입니다.

gradientTransform = "<transform-list>"

그라디언트 좌표계에서 대상 좌표계로의 선택적 추가 변형을 정의합니다 (예: 'userSpaceOnUse' 또는 'objectBoundingBox'). 이 추가 변형을 통해 그라디언트를 기울이거나 변형할 수 있습니다. 이 추가 변형 행렬은 이전에 정의된 모든 변형(객체 바운딩 박스 단위에서 사용자 좌표계로의 암시적 변환 포함) 이후에 곱해집니다(즉, 우측에 삽입).

초기값
항등 변형(identity transform)
애니메이션 가능
cx = "<length>"

cx, cy, r는 방사형 그라디언트의 끝 원(end circle)을 정의합니다. 그라디언트는 100% 그라디언트 중지점이 이 끝 원의 둘레에 맵핑되도록 그려집니다.

초기값
50%
애니메이션 가능
cy = "<length>"

cx 참고.

초기값
50%
애니메이션 가능
r = "<length>"

cx 참고.

음수 값은 오류입니다 (참고: 오류 처리).

초기값
50%
애니메이션 가능
fx = "<length>"

fx, fy, fr는 방사형 그라디언트의 시작 원(start circle)을 정의합니다. 그라디언트는 0% 그라디언트 중지점이 이 시작 원의 둘레에 맵핑되도록 그려집니다.

초기값
아래 참조
애니메이션 가능

fx 속성이 지정되지 않으면, 해당 요소의 cx 표현값과 일치합니다('cx' 값이 상속된 여부와 관계없이). 요소가 참조하는 요소에 'fx' 값이 지정되어 있으면 해당 값을 상속받습니다.

여러 방사형 그라디언트 속성의 다이어그램.

이 다이어그램은 frr의 50%일 때의 기하학적 속성 정의 방법을 보여줍니다. 작은 원은 바깥쪽 원의 중심(cx,cy)이고, 십자표는 안쪽 원의 중심(fx,fy)입니다. 점선은 두 개의 그라디언트 벡터를 보여줍니다. 벡터는 안쪽 원과 바깥쪽 원의 대응 지점을 연결합니다. 바깥쪽 원 밖 영역은 마지막 stop-color로, 안쪽 원 안 영역은 첫 번째 stop-color로 채워집니다.

fy = "<length>"

fx 참고.

초기값
아래 참조
애니메이션 가능

fy 속성이 지정되지 않으면 해당 요소의 cy 표현값과 일치합니다('cy' 값이 상속된 여부와 관계없이). 요소가 참조하는 요소에 'fy' 값이 지정되어 있으면 해당 값을 상속받습니다.

fr = "<length>"

SVG 2에서 추가됨. Canvas와 정렬하기 위함.

fr는 초점 원(focal circle)의 반지름입니다. fx 참고.

음수 값은 오류입니다 (참고: 오류 처리).

초기값
0%, 아래 참조
애니메이션 가능

속성이 지정되지 않으면 '0%'가 지정된 것과 동일하게 동작합니다. 요소가 참조하는 요소에 'fr' 값이 지정되어 있으면 해당 값을 상속받습니다.

SVG 2 요구사항: 방사형 그라디언트에서 초점 원 반지름 지정 허용.
결정: SVG 2에서 ‘fr’ 속성을 ‘radialGradient’에 추가.
목적: Canvas와 정렬. 0 오프셋 중지점은 ‘fx’, ‘fy’, ‘fr’ 속성으로 정의된 원에 위치하게 함.
담당자: Erik (ACTION-3098)
spreadMethod = "pad | reflect | repeat"

그라디언트가 페인트되는 객체의 경계 내에서 시작하거나 끝날 때 어떻게 처리할지 나타냅니다. linearGradient 요소의 spreadMethod 속성과 동일한 값과 의미를 가집니다.

초기값
pad
애니메이션 가능
href = [URL]

템플릿 그라디언트 요소에 대한 URL 참조입니다; 유효하려면 참조 대상이 반드시 linearGradient 요소 또는 다른 radialGradient 요소여야 합니다.

페인트 서버를 템플릿으로 사용하는 과정URL 참조 속성, 사용 중단된 XLink 속성의 공통 처리 방법을 참고하세요.

템플릿에서 복제되는 지정 속성은 다음과 같습니다:

URL 참조 속성, 사용 중단된 XLink 속성의 공통 처리 방법을 참고하세요.

초기값
비어 있음
애니메이션 가능
SVG 2 요구사항: 초점이 원 위에 있는 방사형 그라디언트 명확화.
결정: 초점이 원 위에 있고 repeat일 때, 반복 색상의 첫 번째와 마지막 중지점 사이 거리 값이 0이므로 페인트는 모든 그라디언트 중지점의 평균 색상을 생성해야 한다.
목적: 방사형 그라디언트의 상호운용성 개선.
담당자: Erik (ACTION-3097)
비고: SVG 1.1에서는 초점이 원 위에 있고 'repeat'일 때 어떻게 처리해야 하는지 정의하지 않음. 반복 색상의 첫 번째와 마지막 중지점 사이 거리 값이 0. 페인트는 모든 그라디언트 중지점의 오프셋별 가중 평균 색상을 생성해야 함.

14.2.3.2. 방사형 그라디언트 참고사항

SVG 2에서 변경됨. SVG 1.1에서는 초점이 끝 원 밖에 있으면 끝 원 위로 이동시켜야 했으나, Canvas와 정렬하기 위해 변경됨.

초점이 끝 원 밖에 허용하는 것은 Rigi Kaltbad 작업 그룹 미팅에서 결정됨.

fx, fy 그리고 fr로 정의된 시작 원이 cx, cy, r로 정의된 끝 원 밖에 존재할 경우, 두 원이 닿는 원뿔(cone)이 생성되고, 원뿔 밖 영역은 그라디언트로 영향을 받지 않으며(투명한 검정색) 남아있게 됩니다.

시작 원이 끝 원과 완전히 겹치면 그라디언트가 그려지지 않고, 해당 영역은 변하지 않습니다(투명한 검정색).

초점(시작 원)이 끝 원 밖에 있는 방사형 그라디언트 이미지.

초점(시작) 원이 끝 원 밖에 있는 방사형 그라디언트. 초점 원은 오른쪽의 작은 원입니다. 그라디언트는 spreadMethod="reflect"를 사용합니다.

초점이 원 둘레 안쪽과 둘레에 위치한 두 방사형 그라디언트 이미지.

두 개의 방사형 그라디언트(spreadMethod="repeat"). 왼쪽은 초점이 cx, cy, r로 정의된 원의 오른쪽 둘레 안쪽에 위치. 오른쪽은 초점이 원 둘레에 위치. 이 경우, 둘레 오른쪽에 그려진 영역은 그라디언트 벡터의 색상 가중 평균으로 채워짐.

위 그림의 오른쪽 영역에 대한 처리 방식은 Canvas와 다릅니다(Canvas에서는 투명한 검정이 됨). SVG 1.1과의 호환성을 유지하기 위함입니다.

가중 평균 색상의 색상 공간은 그라디언트가 보간되는 색상 공간과 동일합니다. Rigi Kaltbad 작업 그룹 미팅 참고.

예시 radgrad01 은 방사형 그라디언트 페인트 서버를 참조해 사각형을 채우는 방법을 보여줍니다.

<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 300 200" >
  <title>Example radgrad01</title>
  <desc>Fill a rectangle by referencing a radial gradient paint server.</desc>

  <defs>
    <radialGradient id="MyGradient"
		    gradientUnits="userSpaceOnUse"
		    cx="150" cy="100"
		    r="100">
      <stop offset="0%"   stop-color="#A8F" />
      <stop offset="50%"  stop-color="#FDC" />
      <stop offset="100%" stop-color="#A8F" />
    </radialGradient>
  </defs>

  <!-- The rectangle is filled using a radial gradient paint server -->
  <rect fill="url(#MyGradient)"
	stroke="black"
	stroke-width="2"
	x="25" y="25" width="250" height="150"/>
</svg>
예시 radgrad01 — 방사형 그라디언트 페인트 서버를 참조해 사각형을 채우기

예시 radgrad01

이 예제를 SVG로 보기 (SVG 지원 브라우저만)

14.2.4. 그라디언트 중지점

그라디언트에서 사용할 색상 벡터는 stop 요소로 정의되며, 이 요소들은 linearGradient 또는 radialGradient 요소의 자식으로 존재합니다.

SVG 1.1에서는 위 문장이 "The ramp of colors..."로 되어 있었으나, "ramp"라는 단어는 이 절에서 다른 곳에서는 사용되지 않습니다.

stop
분류:
없음
콘텐츠 모델:
아래 요소들을 임의의 순서와 개수로 포함 가능:
    animate, script, set, style
    속성:
    DOM 인터페이스:

    14.2.4.1. 속성

    offset

    그라디언트 중지점이 위치하는 곳을 나타냅니다. 선형 그라디언트의 경우 offset 속성은 그라디언트 벡터를 따라 위치를 나타냅니다. 방사형 그라디언트의 경우, 가장 안쪽/작은 원의 경계에서 가장 바깥쪽/큰 원의 경계까지의 비율적 거리를 나타냅니다.

    <number> | <percentage>
    초기값
    0
    애니메이션 가능
    <number>
    일반적으로 0에서 1 사이의 숫자입니다.
    <percentage>
    일반적으로 0%에서 100% 사이의 백분율입니다.

    14.2.4.2. 속성

    stop-color

    stop-color 속성은 해당 그라디언트 중지점에서 사용할 색상을 나타냅니다. 키워드 currentColor와 ICC 색상은 <paint> 사양에서 fillstroke 속성에 사용하는 것과 같은 방식으로 지정할 수 있습니다.

    그라디언트와 관련해서 SVG는 'transparent' 키워드를 CSS와 다르게 처리합니다. SVG는 사전 곱셈(pre-multiplied) 공간에서 그라디언트를 계산하지 않으므로 'transparent'는 실제로 투명한 검정색을 의미합니다. stop-color에 'transparent' 값을 지정하면, stop-color에 'black' 값을 지정하고 stop-opacity에 '0' 값을 지정한 것과 동일합니다.

    currentColor | <color> <icccolor>
    초기값
    검정
    적용 대상
    stop 요소
    상속
    아니오
    백분율
    해당 없음
    미디어
    시각적
    애니메이션 가능
    stop-opacity

    stop-opacity 속성은 해당 그라디언트 중지점의 투명도를 정의합니다. 그라디언트 계산에 사용되는 투명도 값은 stop-opacity 값과 stop-color 값의 투명도의 곱입니다. stop-color 값 타입이 명시적 투명도 정보를 포함하지 않으면, 해당 구성 요소의 투명도는 1로 처리해야 합니다.

    <alpha-value>
    초기값
    1
    적용 대상
    stop 요소
    상속
    아니오
    백분율
    해당 없음
    미디어
    시각적
    애니메이션 가능
    <number>
    stop-color의 투명도. 0.0(완전히 투명)에서 1.0(완전히 불투명) 범위를 벗어난 값은 이 범위로 조정해야 합니다.
    <percentage>
    stop-color의 투명도를 0에서 1 범위의 백분율로 표현합니다.

    14.2.4.3. 그라디언트 중지점 참고사항

    14.3. 패턴

    패턴은 미리 정의된 그래픽 오브젝트를 사용하여 객체를 채우기 또는 외곽선으로 적용할 때 사용됩니다. 이러한 그래픽 오브젝트는 xy 방향으로 일정 간격마다 복제(“타일링”)되어 도형을 채웁니다. 패턴은 pattern 요소로 정의되며, 채우기 또는 외곽선 속성에서 참조함으로써 그래픽 요소를 해당 패턴으로 채우거나 외곽선을 적용하도록 지정합니다.

    x, y, width, heightpatternUnits 속성은 무한 캔버스의 어느 한 곳에 기준 사각형을 정의합니다. 기준 사각형의 좌상단은 (x, y)이고 우하단은 (x + width, y + height)입니다. 타일링은 이 사각형을 X, Y 방향(양수 및 음수)으로 무한히 반복하여, 각 m, n에 대해 사각형이 (x + m*width, y + n*height)에서 시작합니다.

    pattern
    분류:
    컨테이너 요소, 직접 렌더링되지 않는 요소, 페인트 서버 요소
    콘텐츠 모델:
    아래 요소들을 임의의 순서와 개수로 포함 가능:a, audio, canvas, clipPath, filter, foreignObject, iframe, image, marker, mask, script, style, switch, text, video, view
    속성:
    DOM 인터페이스:

    14.3.1. 속성

    patternx,y, widthheight 속성은 프레젠테이션 속성이 아니며, 사용되는 값은 CSS 스타일의 영향을 받지 않습니다. patternTransform 속성은 transform 속성에 대한 프레젠테이션 속성입니다.

    patternUnits

    x, y, widthheight 속성의 좌표계를 정의합니다.

    userSpaceOnUse | objectBoundingBox
    초기값
    objectBoundingBox
    애니메이션 가능
    userSpaceOnUse

    patternUnits="userSpaceOnUse"인 경우, x, y, width, height 값은 패턴 요소가 참조될 때의 현재 사용자 좌표계(즉, 채우기 또는 외곽선 속성으로 패턴 요소를 참조하는 요소의 사용자 좌표계)를 기준으로 하고, patternTransform 속성에 지정된 변형을 적용한 결과입니다. 백분율은 현재 SVG 뷰포트에 상대적인 값입니다.

    objectBoundingBox

    patternUnits="objectBoundingBox"인 경우, x, y, width, height의 사용자 좌표계는 패턴이 적용되는 요소의 바운딩 박스(참고: 객체 바운딩 박스 단위)를 기준으로 하며, patternTransform 속성에 지정된 변형을 적용합니다. 백분율은 객체의 바운딩 박스에 상대적입니다.

    patternContentUnits

    pattern의 내용 좌표계를 정의합니다. viewBox 속성이 지정된 경우 이 속성은 효과가 없습니다.

    userSpaceOnUse | objectBoundingBox
    초기값
    userSpaceOnUse
    애니메이션 가능
    userSpaceOnUse

    patternContentUnits="userSpaceOnUse"인 경우, pattern 요소의 내용 좌표계는 패턴 요소가 참조될 때의 현재 사용자 좌표계(즉, 채우기 또는 외곽선 속성으로 패턴 요소를 참조하는 요소의 사용자 좌표계)를 기준으로 하고, patternTransform 속성에 지정된 변형을 적용한 결과입니다.

    objectBoundingBox

    patternContentUnits="objectBoundingBox"인 경우, pattern 요소의 내용 좌표계는 패턴이 적용되는 요소의 바운딩 박스(참고: 객체 바운딩 박스 단위)를 기준으로 하며, patternTransform 속성에 지정된 변형을 적용합니다.

    patternTransform

    패턴 좌표계에서 대상 좌표계로의 선택적 추가 변형을 정의합니다 (예: 'userSpaceOnUse' 또는 'objectBoundingBox'). 이 추가 변형을 통해 패턴 타일을 기울이거나 변형할 수 있습니다. 이 추가 변형 행렬은 이전에 정의된 모든 변형(객체 바운딩 박스 단위에서 사용자 좌표계로의 암시적 변환 포함) 이후에 곱해집니다(즉, 우측에 삽입).

    <transform-list>
    초기값
    항등 변형(identity transform)
    애니메이션 가능
    x

    x, y, width, height 속성은 패턴 타일의 배치 및 간격을 지정합니다. 이 속성들은 patternUnitspatternTransform의 조합으로 지정된 좌표 공간에서 해석됩니다.

    <length>
    초기값
    0
    애니메이션 가능
    y

    x 참고.

    <length>
    초기값
    0
    애니메이션 가능
    width

    x 참고.

    <length>
    초기값
    0
    애니메이션 가능

    음수 값은 오류입니다 (참고: 오류 처리). 0 값은 해당 요소의 렌더링을 비활성화합니다(즉, 페인트가 적용되지 않음).

    height

    x 참고.

    <length>
    초기값
    0
    애니메이션 가능

    음수 값은 오류입니다(참고: 오류 처리). 0 값은 해당 요소의 렌더링을 비활성화합니다(즉, 페인트가 적용되지 않음).

    href

    템플릿 요소에 대한 URL 참조입니다. 유효하려면 참조 대상이 반드시 다른 pattern 요소여야 합니다.

    페인트 서버를 템플릿으로 사용하는 과정URL 참조 속성, 사용 중단된 XLink 속성의 공통 처리 방법을 참고하세요.

    템플릿에서 복제되는 지정 속성은 다음과 같습니다:

    URL [URL]
    초기값
    비어 있음
    애니메이션 가능

    14.3.2. 패턴 참고사항

    SVG의 사용자 에이전트 스타일 시트pattern 요소의 overflow 속성을 hidden으로 설정하여, 패턴 타일 경계에 직사각형 클리핑 경로가 생성됩니다. overflow 속성이 재정의되지 않는 한, 패턴 내에서 패턴 사각형을 넘어가는 그래픽은 잘려(clipped)집니다. 아래 예시 pattern01은 패턴 타일에 맞춰 잘리는(clipping) 효과를 보여줍니다.

    overflow 속성이 visible로 설정될 경우, 패턴 경계 밖 패턴의 렌더링 동작은 현재 정의되어 있지 않습니다. 향후 현행 표준에서는 overflow가 표시되도록 요구할 수 있습니다. SVG 구현자들은 overflow가 렌더링되도록 하는 것이 저자들이 기대하는 동작이므로 권장합니다. overflow가 렌더링될 경우, 패턴 타일은 왼쪽에서 오른쪽으로 행(row)별로, 행은 위에서 아래로 렌더링되어야 합니다.

    GitHub Issue 129 참고

    pattern의 내용은 새로운 좌표계에 상대적으로 배치됩니다. viewBox 속성이 있다면, 새로운 좌표계는 pattern 요소의 x, y, width, height, patternUnits 속성으로 정의된 영역에 맞춰서 배치되고, viewBoxpreserveAspectRatio의 표준 규칙을 따릅니다. viewBox 속성이 없다면, 새로운 좌표계의 원점은 (x, y)에 위치합니다. xpattern 요소의 x 속성으로 정해지고, ypattern 요소의 y 속성으로 정해집니다. 예시:

    <pattern x="10" y="10" width="20" height="20">
      <rect x="5" y="5" width="10" height="10"/>
    </pattern>
    

    위 사각형은 패턴 타일의 원점에서 오른쪽으로 5 단위, 아래로 5 단위 떨어진 위치에 좌상단이 놓입니다.

    viewBox 속성은 x, y, width, height, patternUnits로 인해 새로운 패턴 좌표계를 만들 때 필요한 변환 위에 추가적으로 적용되는 변환을 도입합니다.

    pattern 요소의 내용에 부착된 이벤트 속성 및 이벤트 리스너는 처리되지 않으며, pattern 요소의 렌더링 측면만 처리됩니다.

    예시 pattern01 은 패턴 페인트 서버를 참조하여 사각형을 채우는 방법을 보여줍니다. 각 삼각형의 파란색 외곽선이 위와 왼쪽에서 약간 잘린(clipped) 것을 주목하세요. 이는 SVG의 사용자 에이전트 스타일 시트pattern 요소의 overflow 속성을 hidden으로 설정하여 패턴이 패턴 타일 경계에 맞춰 잘려(clipped)지기 때문입니다.

    <?xml version="1.0" standalone="no"?>
    <svg xmlns="http://www.w3.org/2000/svg"
         version="1.1"
         viewBox="0 0 300 200" >
    
      <title>Example pattern01</title>
      <desc>Fill an ellipse using a pattern paint server.</desc>
    
      <defs>
        <pattern id="TrianglePattern"
    	     patternUnits="userSpaceOnUse"
                 x="0" y="0" width="50" height="50"
                 viewBox="0 0 10 10" >
          <path d="M 0 0 L 7 0 L 3.5 7 z"
    	    fill="plum"
    	    stroke="blue" />
        </pattern> 
      </defs>
    
      <!-- The ellipse is filled using a triangle pattern paint server -->
      <ellipse fill="url(#TrianglePattern)"
    	   stroke="black"
    	   stroke-width="2"
               cx="150" cy="100" rx="125" ry="75" />
    </svg>
    Example pattern01 — fill a rectangle by referencing a pattern paint server

    예시 pattern01

    이 예제를 SVG로 보기 (SVG 지원 브라우저만)

    14.4. DOM 인터페이스

    14.4.1. SVGGradientElement 인터페이스

    SVGGradientElement 인터페이스는 그라디언트 페인트 서버 요소 인터페이스의 기본 인터페이스로 사용됩니다.

    [Exposed=Window]
    interface SVGGradientElement : SVGElement {
    
      // Spread Method Types
      const unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
      const unsigned short SVG_SPREADMETHOD_PAD = 1;
      const unsigned short SVG_SPREADMETHOD_REFLECT = 2;
      const unsigned short SVG_SPREADMETHOD_REPEAT = 3;
    
      [SameObject] readonly attribute SVGAnimatedEnumeration gradientUnits;
      [SameObject] readonly attribute SVGAnimatedTransformList gradientTransform;
      [SameObject] readonly attribute SVGAnimatedEnumeration spreadMethod;
    };
    
    SVGGradientElement includes SVGURIReference;
    

    SVGGradientElement에 정의된 숫자형 spread method 타입 상수는 ‘spreadMethod’ 속성의 키워드 값을 나타냅니다. 의미는 다음과 같습니다:

    상수 의미
    SVG_SPREADMETHOD_PAD pad 키워드.
    SVG_SPREADMETHOD_REFLECT reflect 키워드.
    SVG_SPREADMETHOD_REPEAT repeat 키워드.
    SVG_SPREADMETHOD_UNKNOWN 기타 값.

    gradientUnits IDL 속성은 ‘gradientUnits’ 콘텐츠 속성을 반영(reflect)합니다. 그라디언트 요소의 ‘gradientUnits’ 속성에 대한 숫자형 타입 값은 다음과 같습니다:

    숫자형 타입 값
    userSpaceOnUse SVG_UNIT_TYPE_USERSPACEONUSE
    objectBoundingBox SVG_UNIT_TYPE_OBJECTBOUNDINGBOX

    gradientTransform IDL 속성은 반영(reflect)되며, transform 속성의 계산값과 'gradientTransform' 프레젠테이션 속성을 linearGradient, radialGradient 요소에 대해 반영합니다.

    spreadMethod IDL 속성은 반영(reflect)되며, ‘spreadMethod’ 콘텐츠 속성을 반영합니다. 그라디언트 요소의 ‘spreadMethod’ 속성에 대한 숫자형 타입 값은 위의 숫자형 spread 타입 상수 테이블과 동일합니다.

    14.4.2. SVGLinearGradientElement 인터페이스

    SVGLinearGradientElement 객체는 DOM에서 linearGradient를 나타냅니다.

    [Exposed=Window]
    interface SVGLinearGradientElement : SVGGradientElement {
      [SameObject] readonly attribute SVGAnimatedLength x1;
      [SameObject] readonly attribute SVGAnimatedLength y1;
      [SameObject] readonly attribute SVGAnimatedLength x2;
      [SameObject] readonly attribute SVGAnimatedLength y2;
    };

    x1, y1, x2y2 IDL 속성은 각각 x1, y1, x2, y2 콘텐츠 속성을 반영(reflect)합니다.

    14.4.3. SVGRadialGradientElement 인터페이스

    SVGRadialGradientElement 객체는 DOM에서 radialGradient 를 나타냅니다.

    [Exposed=Window]
    interface SVGRadialGradientElement : SVGGradientElement {
      [SameObject] readonly attribute SVGAnimatedLength cx;
      [SameObject] readonly attribute SVGAnimatedLength cy;
      [SameObject] readonly attribute SVGAnimatedLength r;
      [SameObject] readonly attribute SVGAnimatedLength fx;
      [SameObject] readonly attribute SVGAnimatedLength fy;
      [SameObject] readonly attribute SVGAnimatedLength fr;
    };

    cx, cy, r, fx, fyfr IDL 속성은 각각 cx, cy, r, fx, fy, fr 콘텐츠 속성을 반영(reflect)합니다.

    14.4.4. SVGStopElement 인터페이스

    SVGStopElement 객체는 DOM에서 stop 요소를 나타냅니다.

    [Exposed=Window]
    interface SVGStopElement : SVGElement {
      [SameObject] readonly attribute SVGAnimatedNumber offset;
    };

    offset IDL 속성은 offset 콘텐츠 속성을 반영(reflect)합니다.

    SVGStopElement에는 path 속성에 대해 반영(reflect)하는 IDL 속성이 없습니다.

    14.4.5. SVGPatternElement 인터페이스

    SVGPatternElement 객체는 DOM에서 pattern 요소를 나타냅니다.

    [Exposed=Window]
    interface SVGPatternElement : SVGElement {
      [SameObject] readonly attribute SVGAnimatedEnumeration patternUnits;
      [SameObject] readonly attribute SVGAnimatedEnumeration patternContentUnits;
      [SameObject] readonly attribute SVGAnimatedTransformList patternTransform;
      [SameObject] readonly attribute SVGAnimatedLength x;
      [SameObject] readonly attribute SVGAnimatedLength y;
      [SameObject] readonly attribute SVGAnimatedLength width;
      [SameObject] readonly attribute SVGAnimatedLength height;
    };
    
    SVGPatternElement includes SVGFitToViewBox;
    SVGPatternElement includes SVGURIReference;
    

    patternUnitspatternContentUnits IDL 속성은 각각 patternUnitspatternContentUnits 콘텐츠 속성을 반영(reflect)합니다. patternUnitspatternContentUnits에 대한 숫자형 타입 값은 다음과 같습니다:

    숫자형 타입 값
    userSpaceOnUse SVG_UNIT_TYPE_USERSPACEONUSE
    objectBoundingBox SVG_UNIT_TYPE_OBJECTBOUNDINGBOX

    patternTransform IDL 속성은 반영(reflect)되며, transform 속성의 계산값과 ‘patternTransform’ 프레젠테이션 속성을 반영합니다.

    x, y, widthheight IDL 속성은 각각 x, y, width, height 콘텐츠 속성을 반영(reflect)합니다.