August 21, 2021
SVG는 벡터 기반의 XML 포맷을 가진 그래픽입니다.
벡터 파일 형식을 가지고 있기 때문에 모든 사이즈에서 깔끔하게 렌더링 되며, CSS
, DOM
, JavaScript
등 웹 표준과도 잘 동작하도록 설계 되었습니다.
백터 파일과 래스터 파일의 차이가 궁금하시면 아래 링크의 글을 참고하시면 좋을거 같습니다.
viewport
viewBox
<circle />
이더라도 viewBox에 따라 다르게 표현되는걸 확인할 수 있습니다.<svg viewBox="0 0 200 200" width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="40" />
</svg>
<svg viewBox="0 0 100 100" width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="40" />
</svg>
<svg viewBox="0 0 50 50" width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="40" />
</svg>
<svg width="400" height="110">
<rect width="300" height="100"" />
</svg>
<svg viewBox="0 0 100 100" width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="40" />
</svg>
<circle />
과 <ellipse />
는 비슷한 도형입니다. 차이점은 <circle />
의 경우 x, y 반경이 동일하고 <ellipse />
는 x, y 반경이 동일하지 않다는 점입니다.<ellipse />
의 x, y를 동일하게 변경하면 <circle />
과 같은 모양을 만들 수 있습니다.<svg height="140" width="500">
<ellipse cx="200" cy="80" rx="50" ry="50" />
</svg>
<svg height="140" width="500">
<ellipse cx="200" cy="80" rx="100" ry="50" />
</svg>
<svg height="210" width="500">
<line x1="0" y1="0" x2="200" y2="20" style="stroke:black;stroke-width:2" />
</svg>
<svg height="210" width="500">
<polygon points="200,10 250,100 100,100" />
</svg>
<svg height="200" width="500">
<polyline points="20,20 40,25 60,40 80,120 120,140 200,180"
style="fill:none;stroke:black;stroke-width:3" />
</svg>
<path />
를 통해 경로를 지정하여 다양한 표현을 할 수 있습니다.<path />
로 그린 베지어 곡선입니다.<svg height="400" width="450">
<path id="lineAB" d="M 100 350 l 150 -300" stroke="red"
stroke-width="3" fill="none" />
<path id="lineBC" d="M 250 50 l 150 300" stroke="red"
stroke-width="3" fill="none" />
<path d="M 175 200 l 150 0" stroke="green" stroke-width="3"
fill="none" />
<path d="M 100 350 q 150 -300 300 0" stroke="blue"
stroke-width="5" fill="none" />
<!-- Mark relevant points -->
<g stroke="black" stroke-width="3" fill="black">
<circle id="pointA" cx="100" cy="350" r="3" />
<circle id="pointB" cx="250" cy="50" r="3" />
<circle id="pointC" cx="400" cy="350" r="3" />
</g>
<!-- Label the points -->
<g font-size="30" font-family="sans-serif" fill="black" stroke="none"
text-anchor="middle">
<text x="100" y="350" dx="-30">A</text>
<text x="250" y="50" dy="-10">B</text>
<text x="400" y="350" dx="30">C</text>
</g>
</svg>