jiraynor’s 하루 2시간 프로그래밍 - HTML 42. SVG 영상 보러가기
HTML SVG
SVG란?
- SVG는 Scalable Vector Graphics의 약자입니다.
- SVG는 웹용 그래픽을 정의하는 데 사용됩니다.
- SVG는 W3C 권장 사항입니다.
<svg>
요소
HTML <svg>
요소는 SVG 그래픽스용 컨테이너입니다.
SVG에는 경로, 상자, 원, 텍스트 및 그래픽 이미지를 그리는 여러 가지 방법이 있습니다.
지원하는 브라우저
표의 숫자는 <svg>
요소를 완전히 지원하는 최소 브라우저 버전을 지정합니다.
브라우저 | 구글 Chrome | 마이크로소프트 Edge | Firefox | Safari | Opera |
버전 | 4.0 | 9.0 | 3.0 | 3.2 | 10.1 |
SVG 원
예제 1
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>
SVG 사각형
<svg width="400" height="100">
<rect width="400" height="100" style="fill:rgb(0,0,255);stroke-width:10;stroke:rgb(0,0,0)" />
</svg>
SVG 모서리가 둥근 사각형
<svg width="400" height="180">
<rect x="50" y="20" rx="20" ry="20" width="150" height="150"
style="fill:red;stroke:black;stroke-width:5;opacity:0.5" />
</svg>
SVG 별
<svg width="300" height="200">
<polygon points="100,10 40,198 190,78 10,78 160,198"
style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />
</svg>
SVG 로고
<svg height="130" width="500">
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" />
<stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
</linearGradient>
</defs>
<ellipse cx="100" cy="70" rx="85" ry="55" fill="url(#grad1)" />
<text fill="#ffffff" font-size="45" font-family="Verdana" x="50" y="86">SVG</text>
죄송합니다. 현재 브라우저는 SVG를 지원하지 않습니다.
</svg>
SVG와 Canvas의 차이점
SVG는 XML에서 2D 그래픽을 설명하는 언어입니다.
캔버스는 (JavaScript를 사용하여) 2D 그래픽을 즉시 그립니다.
SVG는 XML 기반입니다. 즉, SVG DOM 내에서 모든 요소를 사용할 수 있습니다. 요소에 JavaScript 이벤트 핸들러를 연결할 수 있습니다.
SVG에서는 그려진 각 도형이 객체로 기억됩니다. SVG 객체의 속성이 변경되면 브라우저는 자동으로 모양을 다시 렌더링할 수 있습니다.
캔버스는 픽셀 단위로 렌더링됩니다. 캔버스에서 그래픽이 그려지면 브라우저에 의해 잊혀집니다. 위치를 변경해야 하는 경우 그래픽에 가려졌을 수 있는 객체를 포함하여 전체 장면을 다시 그려야 합니다.
캔버스와 SVG의 비교
Canvas
- 해상도에 따라 다름
- 이벤트 핸들러 지원 없음
- 텍스트 렌더링 기능 저하
- 결과 이미지는 .png 또는 .jpg로 저장할 수 있습니다.
- 그래픽스 부하가 높은 게임에 최적
SVG
- 해상도에 의존하지 않음
- 이벤트 핸들러 지원
- 렌더링 영역이 큰 응용 프로그램에 가장 적합합니다(Google Maps).
- 복잡한 경우 렌더링 속도가 느림(DOM을 많이 사용하는 경우 렌더링 속도가 느림)
- 게임 어플리케이션에는 적합하지 않습니다.