여러분이 사용하고 계신 브라우저는 HTML5를 지원하지 않기 때문에 몇몇 요소가 제대로 보이도록 JScript를 사용하고 있습니다. 하지만 여러분의 브라우저 설정에서 스크립트 기능이 꺼져있으므로, 현재 페이지를 제대로 확인하시려면 스크립트 기능을 켜주셔야 합니다. HTML 그래픽 - SVG 패턴

HTML 그래픽 – SVG 패턴

2주전 작성

SVG 패턴

SVG 패턴 소개

패턴은 도형을 채우기 위해 반복되는 이미지를 정의한다.

SVG 패턴의 장점은 다음과 같다.

  • 패턴은 한 번 정의하면 여러 객체에서 재사용 가능하다
  • 패턴은 단순한 단색보다 더 흥미로운 채우기를 제공한다
  • 패턴은 크기를 조정하고 변형할 수 있다

패턴 정의는 <defs> 요소 내에 배치된다. <defs> 요소는 나중에 재사용 가능한 그래픽 요소를 정의하는 곳이다.

각 패턴은 패턴을 식별하는 id 속성을 가져야 한다. 그래픽/이미지는 이후 이 패턴을 참조한다.

SVG 패턴 – <pattern>

<pattern> 요소는 SVG 그래픽에서 반복 패턴을 정의하는 데 사용된다.

기본 패턴 예제

간단한 빨간색 원 패턴으로 채워진 직사각형:

<svg height="200" width="400" xmlns="http://www.w3.org/2000/svg">
<defs>
<pattern id="pattern1" x="0" y="0" width="0.2" height="0.2">
<circle cx="10" cy="10" r="10" fill="red" />
</pattern>
</defs>
<rect x="10" y="10" width="200" height="100" stroke="black" fill="url(#pattern1)" />
</svg>

코드 설명:

  • <pattern> 요소의 id 속성은 패턴의 고유한 이름을 정의한다.
  • width와 height 속성은 패턴의 크기를 정의한다. 여기서는 객체 경계 상자(bounding box)의 20%로 설정한다.
  • 패턴 내부의 <circle> 요소는 반복될 원형을 정의한다.
  • <rect> 요소의 fill 속성은 해당 요소를 “pattern1” 패턴으로 채우도록 지정한다.

체커보드 패턴

흰색과 회색으로 이루어진 체커보드 패턴으로 채워진 사각형:

<svg height="200" width="400" xmlns="http://www.w3.org/2000/svg">
<defs>
<pattern id="pattern2" x="0" y="0" width="0.1" height="0.1" patternUnits="objectBoundingBox">
<rect x="0" y="0" width="10" height="10" fill="lightgray"/>
<rect x="10" y="0" width="10" height="10" fill="white"/>
<rect x="0" y="10" width="10" height="10" fill="white"/>
<rect x="10" y="10" width="10" height="10" fill="lightgray"/>
</pattern>
</defs>
<rect x="10" y="10" width="200" height="100" stroke="black" fill="url(#pattern2)" />
</svg>

이미지 패턴

이미지를 반복 패턴으로 사용한 예:

<svg height="200" width="400" xmlns="http://www.w3.org/2000/svg">
<defs>
<pattern id="pattern3" x="0" y="0" width="0.2" height="0.2" patternUnits="objectBoundingBox">
<image href="https://www.w3schools.com/graphics/pic_the_scream.jpg" width="30" height="30" />
</pattern>
</defs>
<rect x="10" y="10" width="200" height="100" stroke="black" fill="url(#pattern3)" />
</svg>

변형된 패턴

patternTransform 속성을 사용하여 45도 회전된 패턴:

<svg height="200" width="400" xmlns="http://www.w3.org/2000/svg">
<defs>
<pattern id="pattern4" x="0" y="0" width="0.1" height="0.1" patternTransform="rotate(45)">
<rect x="0" y="0" width="10" height="10" fill="none" stroke="blue" stroke-width="2"/>
</pattern>
</defs>
<rect x="10" y="10" width="200" height="100" stroke="black" fill="url(#pattern4)" />
</svg>

SVG <pattern> 속성

속성 설명
id 필수. <pattern> 요소의 고유 ID를 정의한다.
x 패턴 타일의 x 좌표. 기본값은 0.
y 패턴 타일의 y 좌표. 기본값은 0.
width 패턴 타일의 너비. 필수.
height 패턴 타일의 높이. 필수.
patternUnits 패턴의 x, y, width, height 값에 대한 좌표 시스템을 정의한다. 가능한 값: “userSpaceOnUse”와 “objectBoundingBox”. 기본값은 “objectBoundingBox”.
patternContentUnits 패턴의 내용에 대한 좌표 시스템을 정의한다. 가능한 값: “userSpaceOnUse”와 “objectBoundingBox”. 기본값은 “userSpaceOnUse”.
patternTransform 패턴에 적용할 변환(회전, 크기 조정, 기울이기 등)을 정의한다.
href 템플릿으로 사용될 다른 <pattern> 요소에 대한 참조를 정의한다.
preserveAspectRatio 패턴 내용의 종횡비 유지 방법을 정의한다.

 

💡 SVG 패턴 고급 팁:
• patternUnits와 patternContentUnits를 분리하여 유연한 패턴 설계
• 투명도(opacity)를 활용하여 배경이 비치는 반투명 패턴 생성
• 패턴 내부에 복잡한 SVG 요소 조합으로 독특한 표현 구현
• patternTransform으로 회전, 확대, 축소 등 다양한 변형 적용

참고
Mingg`s Diary
밍구
공부 목적 블로그