SVG โ‘  ์ด๋ก 

2021. 5. 11. 00:15ใ†STUDY/CSS

๐Ÿฃ์ž…์‚ฌ ์ดˆ๋ฐ˜, ์ด์‚ฌ๋‹˜๊ป˜์„œ svg๋ฅผ ๊ณต๋ถ€ ํ•ด๋ณด์ž๋Š” ์ˆ™์ œ ์•„๋‹Œ ์ˆ™์ œ(?)๋ฅผ ๋‚ด์ฃผ์…จ์œผ๋‚˜,

์ผ์— ์น˜์—ฌ ๋ฏธ๋ฃจ๊ณ  ๋ฏธ๋ฃจ๋‹ค ์š”๊ทผ๋ž˜ ๋‹ค์‹œ๊ธˆ svg ๊ณต๋ถ€๋ฅผ ๊ฒฐ์‹ฌ (เน‘•ฬ€ใ…‚•ฬ)ูˆโœงํ•˜๊ฒŒ ๋์Šต๋‹ˆ๋‹ท ๐Ÿค“

ํ•˜์ง€๋งŒ ์–ด์ฐŒ ์‹œ์ž‘ํ•ด์•ผํ• ์ง€ ๋ชฐ๋ผ ๋˜  ๋ฐฉํ™ฉ..

ํ•˜๋‹ค๊ฐ€ ์ด์ œ์„œ์•ผ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ท..! ๐Ÿ˜‚

 

 


 

SVG 

( scalable vector graphis )

SVG ๋ž€ ๋ฒกํ„ฐ ๊ธฐ๋ฐ˜์˜ ๊ทธ๋ž˜ํ”ฝ์„ XMLํ˜•์‹์œผ๋กœ ์ •์˜ํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ XML ์ด๋ž€,  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํ•˜๋‚˜์˜ ๋งˆํฌ์—… ์–ธ์–ด ์ด๊ณ ,

๋ฒกํ„ฐ ๊ธฐ๋ฐ˜์˜ ๊ทธ๋ž˜ํ”ฝ ์ด๋ž€,

ํ”ฝ์…€ ๊ธฐ๋ฐ˜์˜ ์ด๋ฏธ์ง€ ํ˜•ํƒœ์ธ png, jpg ํŒŒ์ผ๋“ฑ๊ณผ ๋‹ค๋ฅด๊ฒŒ

์ ๊ณผ ์ ์‚ฌ์ด๊ฐ€ ์ˆ˜ํ•™์  ๊ณ„์‚ฐ์— ์˜ํ•ด ๊ทธ๋ ค์ง„ ๊ทธ๋ฆผ ์ž…๋‹ˆ๋‹ค.

 

๋•Œ๋ฌธ์— ํ™•๋Œ€๋‚˜ ์ถ•์†Œ์—๋„ '์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ง€์ง€ ์•Š๊ณ ', '์šฉ๋Ÿ‰์— ๋ณ€ํ™”๊ฐ€ ์—†์ฃ '! 

๋‹ค๋งŒ ๋ณต์žกํ•œ ํ˜•ํƒœ์˜ ์ด๋ฏธ์ง€๋Š” ๊ทธ๋งŒํผ ๊ณ„์‚ฐ์ด ๋งŽ์ด ๋“ค์–ด๊ฐ€์„œ ์šฉ๋Ÿ‰์€ ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜…

 

( ๋ฒกํ„ฐ ํ˜•ํƒœ์˜ ์ด๋ฏธ์ง€๋Š” ํ™•๋Œ€ํ•ด๋„ ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ง€์ง€ ์•Š์•„์š”! )

 

๊ทธ๋ฆฌ๊ณ , svg๋Š” ์ฝ์„ ์ˆ˜ ์žˆ๋Š” '์ฝ”๋“œ' ์ด๊ธฐ ๋•Œ๋ฌธ์— css & js ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

 


 

๐Ÿ‘‰ SVG ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

์ด๋Ÿฌํ•œ SVG ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค

 

 

1. ์ง์ ‘ ๊ทธ๋ฆฌ๊ธฐ

 

  • Adobe Illustrator
  • Inkscape
  • Sketch
  • iDraw
  • WebCode

 

์œ„์˜ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ์ด์šฉํ•ด svg ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ,

์ด์ค‘์—์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ Adobe illustrator ํ”„๋กœ๊ทธ๋žจ์„ ๋งŽ์ด๋“ค ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€, ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ - svg ์ €์žฅ์œผ๋กœ ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

2. ๋ฒกํ„ฐ ์ด๋ฏธ์ง€, ์•„์ด์ฝ˜ ์‚ฌ์ดํŠธ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ 

์„ธ์ƒ์—๋Š” ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๊ฒƒ๋“ค์ด ์ฐธ ๋งŽ์ฃ ! ์ €ํฌ๋Š” ์ด๋Ÿฐ๊ฒƒ๋“ค์„ ์ ์ ˆํžˆ ์ด์šฉํ•ด์„œ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๋ฉฐ ํšจ์œจ์ ์œผ๋กœ ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

์•„์ด์ฝ˜, ์ธํฌ๊ทธ๋ž˜ํ”ฝ ๋“ฑ์— ์ ํ•ฉํ•œ svg๋Š” flaticon ๋“ฑ์˜ ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

 


 

๐Ÿ‘‰ SVG ํŒŒ์ผ ์••์ถ•ํ•˜๊ธฐ

๊ฐ€์ ธ์˜จ SVG ํŒŒ์ผ์— ์†Œ์Šค๊ฐ€ ๋งŽ์•„ ๋ณต์žกํ•˜๋‹ค๋ฉด ! ๊ฐ„๋žตํ™”๋ฅผ ์‹œ์ผœ์•ผ ๊ฒ ์ฃต

์•„๋ž˜์˜ ๋งํฌ์—์„œ ํ•„์š”์—†๋Š” ๊ฒƒ๋“ค์„ ๋นผ๊ณ  ๊ฐ„๋žตํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค ๐Ÿ˜š

 

jakearchibald.github.io/svgomg/

 

SVGOMG - SVGO's Missing GUI

 

jakearchibald.github.io

์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€์„œ, SVG ํŒŒ์ผ์„ ๋„ฃ์€ ํ›„, 

์˜ค๋ฅธ์ชฝ์˜ ์„ ํƒ์ฐฝ์—์„œ ํ•„์š”ํ•œ ๋‚ด์šฉ๋“ค๋งŒ ์„ ํƒํ•˜์—ฌ ๊ฐ„๋žตํ™” ์‹œํ‚ค๋ฉด ๋ฉ๋‹ˆ๋‹ค! 

 


 

1. Mark Up

 

๐Ÿ‘‰ SVG ํƒœ๊ทธ

 

* ๐Ÿ’› ๊ฐ€ ๋ถ™์€ ๋ฐฉ๋ฒ•์„ ์ฃผ๋กœ ์”๋‹ˆ๋‹ค! ๋ถ™์ง€ ์•Š์€ ๋‚ด์šฉ๋“ค์€ ๊ทธ์ € ์ฐธ๊ณ ๋งŒ ํ•˜์…”๋„ ๋ผ์š”

 

โ‘  img ํƒœ๊ทธ ๐Ÿ’›

<img src="smile.svg" alt="์›ƒ๋Š” ์–ผ๊ตด" />

 -- src="ํŒŒ์ผ๊ฒฝ๋กœ" /  alt="์ด๋ฏธ์ง€ ์„ค๋ช… , ๋Œ€์ฒด ํ…์ŠคํŠธ"

๊ธฐ์กด, png๋‚˜ jpg ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ ์˜ค๋“ฏ์ด, imgํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ svg ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

* css & js ์กฐ์ž‘ ๋ถˆ๊ฐ€๋Šฅ

 

 

 

โ‘ก Background-image

.bx_smile {
  background-image: url(smile.svg);
}

 

 

โ‘ข iframe

<iframe src="smile.svg">iframe์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์ž…๋‹ˆ๋‹ค.</iframe>

 

 

โ‘ฃ Embed

<embed src="smile.svg" type="image/svg+xml" />

 

 

 

โ‘ค object ๐Ÿ’›

<object data="smile.svg" type="image/svg+xml" aria-label="์›ƒ๋Š” ์–ผ๊ตด"></object>

-- data="ํŒŒ์ผ๊ฒฝ๋กœ" / type="ํŒŒ์ผ ํƒ€์ž…, images/svg+xml" / aria-label="์ด๋ฏธ์ง€ ์„ค๋ช…, ๋Œ€์ฒด ํ…์ŠคํŠธ"

imgํƒœ๊ทธ์™€ ๋น„์Šทํ•˜๊ฒŒ svg ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋‹ค๋งŒ ์ด๋ฏธ์ง€ ํƒœ๊ทธ์™€ ๋‹ค๋ฅธ ์ ์€, css & js ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ธ๋ฐ์š”.

 

๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ๋ณด๋ฉด #document๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์•„๋ž˜๋กœ svg ํƒœ๊ทธ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.

 

svgํŒŒ์ผ ์•ˆ์—์„œ path๋‚˜ circle์— class ๋ฅผ ๋ถ™์—ฌ ๋‘๋ฉด,

css ๋‚˜ js ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•˜๊ณ , html ๋งˆํฌ์—…์€ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž…๋ ฅ ํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ ??

ํ•˜์ง€๋งŒ, ์™ธ๋ถ€ ์Šคํƒ€์ผ์‹œํŠธ๋กœ css ์กฐ์ž‘์„ ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด, svg ํŒŒ์ผ ๋‚ด์— ์Šคํƒ€์ผ ์‹œํŠธ๋ฅผ ์ฐธ์กฐํ•ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค! 

/* svg ํŒŒ์ผ */

<?xml-stylesheet type="text/css" href="style.css"?>  /* ์Šคํƒ€์ผ์‹œํŠธ ์ฐธ์กฐ */

<svg xmlns="http://www.w3.org/2000/svg">
	<path class="path01" d="....."></path>
</svg>

์ด๋ ‡๊ฒŒ svgํŒŒ์ผ์„ ์—ด์–ด, <svg>ํƒœ๊ทธ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ์ „์— css ํŒŒ์ผ์„ ์„ ์–ธํ•ด์ค˜์•ผ ์Šคํƒ€์ผ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

โ‘ฅ inline svg ๐Ÿ’›

<svg class="smile" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512; width: 400px;" xml:space="preserve">
	<path d="M437.019,74.981C388.668,26.629,324.38,0,256,0S123.332,26.629,74.981,74.981C26.628,123.332,0,187.62,0,256
		s26.628,132.668,74.981,181.019C123.332,485.371,187.62,512,256,512s132.668-26.629,181.019-74.981
		C485.372,388.668,512,324.38,512,256S485.372,123.332,437.019,74.981z M256,481.524c-124.354,0-225.524-101.17-225.524-225.524
		S131.646,30.476,256,30.476S481.524,131.646,481.524,256S380.354,481.524,256,481.524z"/>
	<path d="M200.622,188.396c-24.953-24.955-65.556-24.953-90.509,0c-5.951,5.95-5.951,15.599,0,21.55
		c5.952,5.95,15.601,5.95,21.551,0c13.072-13.071,34.34-13.07,47.41,0c2.976,2.976,6.875,4.464,10.774,4.464
		s7.8-1.488,10.774-4.464C206.573,203.995,206.573,194.347,200.622,188.396z"/>
	<path d="M401.884,188.396c-24.953-24.953-65.556-24.955-90.509,0c-5.951,5.95-5.951,15.599,0,21.55
		c5.952,5.95,15.601,5.95,21.551,0c13.07-13.071,34.338-13.072,47.41,0c2.976,2.976,6.875,4.464,10.774,4.464
		s7.8-1.488,10.774-4.464C407.835,203.995,407.835,194.347,401.884,188.396z"/>
	<path d="M391.111,267.175H120.889c-8.416,0-15.238,6.823-15.238,15.238c0,82.902,67.447,150.349,150.349,150.349
		s150.349-67.447,150.349-150.349C406.349,273.997,399.527,267.175,391.111,267.175z M256,402.286
		c-60.938,0-111.402-45.703-118.909-104.635H374.91C367.402,356.583,316.938,402.286,256,402.286z"/>
</svg>

์ด๋ ‡๊ฒŒ ์ธ๋ผ์ธ์œผ๋กœ ๋งˆํฌ์—…์ƒ์— svg ํƒœ๊ทธ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

object ๋ฐฉ๋ฒ•๊ณผ ๋™์ผํ•˜๊ฒŒ css&js ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ,

๋‹จ์ ์œผ๋กœ๋Š”

1. html ๋งˆํฌ์—…์ด ๋ณต์žกํ•˜๋‹ค๋Š” ์ ๊ณผ

2. ์ด๋ฏธ์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์บ์‹œ ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

 

์ด๋ฏธ์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์บ์‹œ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๋‹ค๋Š”๊ฒƒ์ด ๋ฌด์Šจ ๋œป์ด๋ƒ๋ฉด, 

๋งŒ์•ฝ ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ ๋‹ค๋ฅธํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐˆ๋•Œ,

ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ๋“ค์˜€๋‹ค๋ฉด, ์ด๋ฏธ์ง€๋Š” ์บ์‹œ๊ฐ€ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—

๋‹ค๋ฅธํŽ˜์ด์ง€์—์„œ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋˜ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์บ์‹œ๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ์ฃ .

ํ•˜์ง€๋งŒ svg ํƒœ๊ทธ๋ฅผ ์ธ๋ผ์ธ์œผ๋กœ ์ ์šฉํ•œ๋‹ค๋ฉด, ์ด๋ฏธ์ง€๊ฐ€ ์•„๋‹Œ ๋ฌธ์„œ์˜ ์ผ๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋™์ผํ•œ ์ฝ”๋“œ(svg)๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ฝ๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋•Œ๋ฌธ์— ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์ด ๋‚˜๊ฐ€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค ๐Ÿ˜‚

 


๐Ÿ‘‰ SVG ํƒœ๊ทธ์˜ ์†์„ฑ

 

โ‘  SVG ๋ทฐํฌํŠธ(viewport)

 

svg ์˜ width ์™€ height ๊ฐ’์„ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.

์†์„ฑ๊ฐ’์€ ๋ณ„๋„์˜ ์‹๋ณ„์ž ์—†์ด ์ˆซ์ž ๊ทธ๋Œ€๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, 1ํ”ฝ์…€์€ ์ถœ๋ ฅ ์žฅ์น˜(ํ™”๋ฉด)์˜ 1ํ”ฝ์…€์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

width="100" height="100" ์€ 100x100px ์˜ SVG ์บ”๋ฒ„์Šค ์ธ๊ฑฐ์ฃ ! 

 

๋ณ„๋„๋กœ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ์‚ฌ์šฉ์ž ๋‹จ์œ„์™€ ํ™”๋ฉด ๋‹จ์œ„๋Š” 1:1์˜ ๋น„์œจ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

 

โ‘ก SVG ๋ทฐ๋ฐ•์Šค (viewBox)

 

svg ํƒœ๊ทธ ๋‚ด์˜ viewBox ์†์„ฑ์€ ๋ทฐํฌํŠธ(width & height ์œผ๋กœ ์ง€์ •๋œ ์˜์˜)์— ๋งตํ•‘ ๋˜๋Š” ๊ณต๊ฐ„์„ ๋ช…์‹œ ํ•ฉ๋‹ˆ๋‹ค. 

์ฆ‰ ํ™”๋ฉด์— ์‹ค์งˆ์ ์œผ๋กœ ๋ณด์—ฌ์ง€๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. 

 

viewBox ๋Š” ์†์„ฑ๊ฐ’์œผ๋กœ min-x , min-y , width , height ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด์ž๋ฉด, 

<svg width="500" height="500" viewbox="0 0 500 500">
	<rect width="300" height="300"></rect>
</svg>

์ด ํƒœ๊ทธ๋Š” 500px * 500px ์˜ svg ๋ฅผ x์ขŒํ‘œ 0, y์ขŒํ‘œ 0 ๋ถ€ํ„ฐ, 500px 500px ์˜ ์˜์—ญ๋งŒํผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

 

<svg width="500" height="500" viewbox="0 0 400 400">
	<rect width="300" height="300"></rect>
</svg>

์ด ํƒœ๊ทธ๋Š” 500px * 500px ์˜ svg ๋ฅผ x์ขŒํ‘œ 0, y์ขŒํ‘œ 0 ๋ถ€ํ„ฐ, 400px 400px ์˜ ์˜์—ญ๋งŒํผ๋งŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋‹ค๋งŒ ํ™”๋ฉด์—๋Š” 400*400 ์˜ ์˜์—ญ์„ 500*500 ์œผ๋กœ ํ™•๋Œ€ํ•ด์„œ ๋ณด์—ฌ ์ฃผ์ฃ .

๋•Œ๋ฌธ์— ์•ˆ์— ๋“ค์–ด์žˆ๋Š” svg ์˜ ๋ชจ์–‘์ด ์ปค๋ณด์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋‹จ, viewbox์˜ width ๋‚˜ height์„ 0์ดํ•˜๋กœ ์ง€์žฅํ•˜๋ฉด svg๊ฐ€ ๋ Œ๋”๋ง ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

 

 

 


2. SVG ์˜ ํ˜•ํƒœ

svg๋ฅผ ์ด๋ฃจ๋Š” ํ˜•ํƒœ๋“ค์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”?

์‚ฌ์‹ค ๋Œ€๋ถ€๋ถ„ ์ผ๋Ÿฌ์ŠคํŠธ๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, ์ด๋ฏธ์ง€์‚ฌ์ดํŠธ์—์„œ ๊ฐ€์ ธ์˜ค์ง€๋งŒ,

svg ํŒŒ์ผ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•Œ์•„๋‘์–ด์š” ใ…Žใ…Ž ๐Ÿ˜

 

 

โ‘  ์ง์‚ฌ๊ฐํ˜• <rect>

<svg width="400" height="150" style="background: #ddd">
  <rect x="50" y="25" width="300" height="100" style="fill: black;" /> 
</svg>

<rect />ํƒœ๊ทธ๋Š” ์ง์‚ฌ๊ฐํ˜•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

svgํƒœ๊ทธ์— width height ๊ฐ’์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์žก๊ณ ,

๊ทธ ์•ˆ์˜ rect ํƒœ๊ทธ์—๋„ width height ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์‚ฌ๊ฐํ˜•์˜ ํฌ๊ธฐ๋ฅผ ์žก์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  x ์™€ y๋กœ ์œ„์น˜๋ฅผ ์กฐ์ •ํ•ด์ฃผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

 

์‚ฌ๊ฐํ˜•์„ ๋‘ฅ๊ธ€๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด, rx ์™€ ry๋กœ ์กฐ์ ˆ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

 

์ •๋ฆฌํ•ด๋ณด์ž๋ฉด, ์ด๋ ‡๊ฒŒ๊ฐ€ ๋˜๊ฒ ๋„ค์š”! 

์†์„ฑ ์†์„ฑ ๊ฐ’
width ๊ฐ€๋กœ ๊ธธ์ด
height ์„ธ๋กœ ๊ธธ์ด
x x์ขŒํ‘œ
y y์ขŒํ‘œ
rx ๋‘ฅ๊ทผ ๋ชจ์„œ๋ฆฌ x๊ฐ’
ry ๋‘ฅ๊ทผ ๋ชจ์„œ๋ฆฌ y๊ฐ’

 

 

(์ด์ œ ์•„๋ž˜ ๋ถ€ํ„ฐ๋Š” ๊ฐ„๋žตํ•˜๊ฒŒ๋งŒ ์ ์„๊ฒŒ์š”)

 

 

 

โ‘ก ์›ํ˜• <circle>

<svg height="200" width="200" style="background: #f2f2f2">
  <circle cx="100" cy="100" r="50" fill="orange" />
</svg> 
์†์„ฑ ์†์„ฑ ๊ฐ’
width ๊ฐ€๋กœ ๊ธธ์ด
height ์„ธ๋กœ ๊ธธ์ด
cx ์›์˜ ์ค‘์‹ฌ x์ขŒํ‘œ
cy ์›์˜ ์ค‘์‹ฌ y์ขŒํ‘œ
r ๋ฐ˜์ง€๋ฆ„

 

 

โ‘ข ํƒ€์›ํ˜• <ellipse>

<svg width="300" height="200" style="background: #f2f2f2">
  <ellipse cx="150" cy="100" rx="100" ry="50" fill="orange" />
</svg>

 

์†์„ฑ ์†์„ฑ ๊ฐ’
width ๊ฐ€๋กœ ๊ธธ์ด
height ์„ธ๋กœ ๊ธธ์ด
cx ์›์˜ ์ค‘์‹ฌ x์ขŒํ‘œ
cy ์›์˜ ์ค‘์‹ฌ y์ขŒํ‘œ
rx ์ˆ˜ํ‰ ๋ฐ˜์ง€๋ฆ„
ry ์ˆ˜์ง ๋ฐ˜์ง€๋ฆ„

 

 

 

 

 

 

 

 

 

 

 

 

 

โ‘ฃ ์„  <line>

<svg width="400" height="400" style="background: #f2f2f2" > 
  <line x1="100" y1="100" x2="300" y2="300" style="stroke: orange; stroke-width: 5" />
</svg>
์†์„ฑ ์†์„ฑ ๊ฐ’
width ๊ฐ€๋กœ ๊ธธ์ด
height ์„ธ๋กœ ๊ธธ์ด
x1, y1 ์ฒซ๋ฒˆ์งธ x์ขŒํ‘œ, y์ขŒํ‘œ
x2, y2 ๋‘๋ฒˆ์งธ x์ขŒํ‘œ, y์ขŒํ‘œ

 

 

โ‘ค ๋‹ค๊ฐ์„  <polyline>

<svg width="400" height="400" style="background: #f2f2f2">
  <polyline points="50,350 150,150 250,250 350,50 " style="fill:none;stroke:orange;stroke-width:5" />
</svg>
์†์„ฑ ์†์„ฑ ๊ฐ’
points "x1๊ฐ’,y1๊ฐ’  x2๊ฐ’,y2๊ฐ’ ..."

 

 

โ‘ฅ ๋‹ค๊ฐํ˜• <polyline>

<svg width="400" height="400" style="background: #f2f2f2">
  <polygon points="200,90 140,278 290,158 110,158 260,278" style="fill:lightgoldenrodyellow;stroke:orange;stroke-width:5;fill-rule:nonzero;"/>
</svg>

 

์†์„ฑ ์†์„ฑ ๊ฐ’
points "x1๊ฐ’,y1๊ฐ’  x2๊ฐ’,y2๊ฐ’ ..."

 

polyline ๊ณผ ๋‹ค๋ฅธ์ ์€, polygon์€ ๋งˆ์ง€๋ง‰ ์ ๊ณผ ์ฒซ ์ ์„ ์ด์–ด ๋งˆ๋ฌด๋ฆฌ๋ฅผ ์ง€์–ด์ค€๋‹ต๋‹ˆ๋‹ค.

 

 

 

โ‘ฅ path

<svg width="400" height="400" viewBox="-12 -12 50 50" style="background: #f2f2f2;">
  <path d="M11.466 22.776a.746.746 0 001.068 0l9.594-9.721C26.129 9.002 23.286 2 17.596 2 14.179 2 12.611 4.511 12 4.98 11.386 4.509 9.828 2 6.404 2 .732 2-2.146 8.984 1.873 13.055z" fill="#f44336"/>
</svg>

 

 

path๋Š” ์œ„์˜ ํ˜•ํƒœ์™€ ๊ฐ™์ด, ๊ณก์„ ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! 

์ €ํฌ๊ฐ€ ์•ž์œผ๋กœ ๋งŽ์ด ๋‹ค๋ฃฐ ํ˜•ํƒœ์ฃ ! 

ํ•˜์ง€๋งŒ ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„ ์ผ๋Ÿฌ์ŠคํŠธ๋‚˜ ์‚ฌ์ดํŠธ๋ฅผ ํ†ตํ•ด path๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์—, ์ง์ ‘ ๊ทธ๋ฆด ์ผ์€ ๋ณ„๋กœ ์—†๋‹ต๋‹ˆ๋‹ค! 

 

์†์„ฑ ์„ค๋ช… ์†์„ฑ ๊ฐ’
M move to = ์ขŒํ‘œ ์ƒ์„ฑ M x1 y1
L line to = ์„  ์ƒ์„ฑ L x1 y1
H horizontal line to = ๊ฐ€๋กœ ์„  ์ƒ์„ฑ H x1
V vertical line to = ์„ธ๋กœ ์„  ์ƒ์„ฑ V y1
C curve to = (3์ฐจ ๋ฒ ์ง€์–ด)๊ณก์„  ์ƒ์„ฑ C x1 y1, x2 y2, x y
S smooth curve to = ๋ถ€๋“œ๋Ÿฌ์šด (3์ฐจ ๋ฒ ์ง€์–ด)๊ณก์„  ์ƒ์„ฑ S x2 y2, x y
Q quadratic Bézier curve = (2์ฐจ ๋ฒ ์ง€์–ด) ๊ณก์„  ์ƒ์„ฑ Q x1 y1, x y
T smooth quadratic Bézier curveto = 2์ฐจ ๋ฒ ์ด์ง€ ๊ณก์„  Q๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹จ์ถ• ๋ช…๋ น์–ด T x y
A elliptical Arc A rx ry x์ถ•-ํšŒ์ „๊ฐ ํฐ-ํ˜ธ-ํ”Œ๋ž˜๊ทธ ์“ธ๊ธฐ-๋ฐฉํ–ฅ-ํ”Œ๋ž˜๊ทธ x y
Z path ๋‹ซ๊ธฐ  

* ๋Œ€๋ฌธ์ž๋Š” ์ ˆ๋Œ€์  ์ขŒํ‘œ / ์†Œ๋ฌธ์ž๋Š” ์ƒ๋Œ€์  ์ขŒํ‘œ๋ฅผ ์ฐธ์กฐ

 

 

path ๊ด€๋ จ ์ฐธ๊ณ ์‚ฌ์ดํŠธ๋“ค๋„ ์ ์–ด๋‘˜๊ฒŒ์š”!

๐Ÿ“‘ svg path ์ฐธ๊ณ ์‚ฌ์ดํŠธ

tamm๋‹˜ ๋ธ”๋กœ๊ทธ tlog.tammolo.com/blog/SVG-Paths/  / ์„ค๋ช…์ด ๋„˜ ์ž˜ ๋ผ์žˆ์–ด์š”! path ๊ด€ํ•ด ์ƒ์„ธํžˆ ๋ณด๊ณ ์‹ถ์œผ์‹œ๋ฉด ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ท

w3๋‹ท์ปด www.w3schools.com/graphics/svg_path.asp

MDN developer.mozilla.org/ko/docs/Web/SVG/Tutorial/Paths

          developer.mozilla.org/ko/docs/Web/SVG/Attribute/d

 

 

 

3. SVG ์˜ style

์Šคํƒ€์ผ๋ช… ๊ฐ’ ์„ค๋ช… ๋น„๊ณ 
fill [color] ์ฑ„์šฐ๊ธฐ ์ƒ‰  
fill-rule nonzero / evenodd ๋‚ด๋ถ€ ํ˜•ํƒœ ์ฑ„์šฐ๊ธฐ ์—ฌ๋ถ€ * ์˜ˆ์‹œ )
stroke [color] ์„ ์˜ ์ƒ‰  
stroke-width [์ˆซ์ž ๊ฐ’] ์„ ์˜ ๊ตต๊ธฐ  
stroke-dasharray [์ˆซ์ž ๊ฐ’] ์„ ์˜ ๊ธธ์ด *์ด๊ธธ์ด ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• 
- ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์— console.log(document.querySelector('path').getTotalLength());

๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด ๊ธธ์ด๋ฅผ ๊ฐ€์ ธ ์˜ฌ ์ˆ˜ ์žˆ์Œ
-  ๋ฐ˜์ง€๋ฆ„ * 2 * 3.14
stroke-dashoffset [์ˆซ์ž ๊ฐ’] ์„ ์˜ ์‹œ์ž‘์   
stroke-linecap butt / round / square ์„ ์˜ ๋๋ถ€๋ถ„ ์ฒ˜๋ฆฌ  
stroke-linejoin miter / round / bevel ์„ ์˜ ๊ฐ ๋ถ€๋ถ„ ์ฒ˜๋ฆฌ  

 

style ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ,

 

โ‘  ํƒœ๊ทธ์— ์ง์ ‘ ์ž…๋ ฅ

<svg width="400" height="400" viewbox="0 0 200 200">
    <path d="M 10 10 l 0 90" fill="none" stroke="#ac0621" stroke-width="5" />
</svg>

 

โ‘ก ์™ธ๋ถ€ ์Šคํƒ€์ผ ์‹œํŠธ

๋‹จ,  svg ํŒŒ์ผ ๋‚ด์— ์Šคํƒ€์ผ ์‹œํŠธ๋ฅผ ์ฐธ์กฐ! 

/* svg ํŒŒ์ผ */

<?xml-stylesheet type="text/css" href="style.css"?>  /* ์Šคํƒ€์ผ์‹œํŠธ ์ฐธ์กฐ */

<svg xmlns="http://www.w3.org/2000/svg">
	<path class="path01" d="....."></path>
</svg>

<svg>ํƒœ๊ทธ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ์ „์— css ํŒŒ์ผ์„ ์„ ์–ธํ•ด์ค˜์•ผ ์Šคํƒ€์ผ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

โ‘ข svg ํƒœ๊ทธ ์•ˆ์— ์Šคํƒ€์ผ ์ž…๋ ฅ

<svg xmlns="http://www.w3.org/2000/svg">
    <style>
    <![CDATA [
        .path01{ stroke: red; fill: red; }
    ]]>
    </style>

    <path class="path01" d="....."></path>
</svg>

 

 

์ด๋ ‡๊ฒŒ svg ํƒœ๊ทธ ์•ˆ์— style ํƒœ๊ทธ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด๋Ÿด ๋•Œ์—๋Š”, XML ํŒŒ์„œ๊ฐ€ ํŠน์ • ๋ฌธ์ž์™€ ์ถฉ๋Œ ํ•  ์ˆ˜ ์žˆ์–ด style ์•ˆ์— <![CDATA [...]]> ํƒœ๊ทธ๋กœ ํ•œ๋ฒˆ ๋ฌถ์–ด ์ฃผ๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

 

 

 

 


์šฐ์„  SVGโ‘  ์ด๋ก ํŽธ์€ ์—ฌ๊ธฐ์—์„œ ๋๋‚ด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ! 

์‚ฌ์‹ค ์ œ ๋ธ”๋กœ๊ทธ๋ณด๋‹ค, ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋œ ๊ณณ์ด ์ •๋ง์ •๋ง ๋งŽ์ง€๋งŒ, ๐Ÿ˜‚ ๊ณต๋ถ€ ๊ฒธ, ์š”๋ ‡๊ฒŒ ์ ์–ด ๋‘ฌ ๋ด…๋‹ˆ๋‹ท..  

์ด์ œ SVG์˜ ์—ฌ์ •์€ โ‘ก๋ ˆ๋ฒจ์—… ํŽธ ๊ณผ โ‘ข์• ๋‹ˆ๋ฉ”์ด์…˜, ์‘์šฉํŽธ์ด ๋‚จ์•˜๋Š”๋ฐ์š”,

์‚ฌ์‹ค โ‘ข์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์–ด ์‹œ์ž‘ํ•œ SVG ๊ธ€์ด ์•ฝ๊ฐ„ ๋Œ€์žฅ์ •์ด ๋˜์—ˆ๋„ค์šฉ,, ใ…Žใ…Ž

ํˆฌ๋จธ์น˜ํ† ์ปค๊ทค์ด๋ผ ์–ด์ฉ”์ˆ˜ ์—†๋‚˜๋ด์š” ๐Ÿคฆ‍โ™€๏ธ

ํ—คํ—ค SVG ๊ด€๋ จ ํ•ด์„œ ์ •๋ฆฌ๊ฐ€ ์ž˜๋œ ์ฐธ๊ณ  ์‚ฌ์ดํŠธ๋“ค ์•„๋ž˜์— ํ•จ๊ป˜ ์ ์–ด ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค! 

ํ˜น์‹œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š”๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š” ๐Ÿ˜ฅ

 

๊ณง โ‘ก๋ ˆ๋ฒจ์—… ํŽธ ๋“ค๊ณ  ๋Œ์•„์˜ค๊ฒ ์Šด๋‹ท ๐Ÿ”ฅ

 

 

 

 

 

 

 

๐Ÿ‘ ์ฐธ๊ณ ์‚ฌ์ดํŠธ

w3๋‹ท์ปด    www.w3schools.com/graphics/svg_intro.asp /

Graphics ARIA Guidebook  a11y.gitbook.io/graphics-aria/svg-graphics  /

์ธํ”„๋Ÿฐ ์ธ๊ฐ• inf.run/avpt (์ €๋Š” svg ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์š” ๊ฐ•์˜๋ฅผ ๋“ค์—ˆ์–ด์š”! ๐Ÿค—) /

svgontheweb svgontheweb.com/ko/#fallbacks /