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 /