-
Notifications
You must be signed in to change notification settings - Fork 3
๐ซ CSS, JS ์์ด๋ SVG ๋ชจํ์ ๊ตฌํํ ์ ์๋ค๋
์ฃผ์ ๋ชฉํ๋ ์ ์ด์๊ณผ ๊ฐ์ด ๋ฉ๋ด๊ฐ ํ์๋ ๋ ๋ฑ์ฅ ์ ๋๋ฉ์ด์
์ ๊ตฌํํ๋ ๊ฒ์ด์์ต๋๋ค. ๋ฆฌ์์น๋ฅผ ์งํํ์ ๋๋ framer-motion
๊ณผ ๊ฐ์ ์ ๋๋ฉ์ด์
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์์ ๋ค์ ๋ง์ด ์ฐพ์๋ณผ ์ ์์๋๋ฐ, ์ด ์ ๋๋ฉ์ด์
๋ง์ ๊ตฌํํ๊ธฐ ์ํด์ ์๋ก์ด ์์กด์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ข์ง ์๋ค๊ณ ์๊ฐ์ด ๋ค์ด์ ์ถ๊ฐ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ชจ์ํ๊ธฐ ์์ํ์ต๋๋ค.
์ผ๋จ ํด๊ฒฐํด์ผํ๋ ๋ฌธ์ ๋ฅผ ์ ์ํด๋ณด๊ฒ ์ต๋๋ค. palette menu
์ปดํฌ๋ํธ๋ ๊ฐ ๋ฒํผ์ด ์ก๊ฐํ SVG๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ์ ๊ฐ ํด์ผํ ์ผ์ ์ ๋ชจ์์ SVG๋ฅผ ์ ์ธํด์ฃผ๊ณ ์ก๊ฐํ SVG๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ณํ๋ ๋ชจ์
์ ๋ง๋ค๋ฉด ๋ฉ๋๋ค.
์ฒ์์ผ๋ก ์๋ํ๋ ๋ฐฉ๋ฒ์ CSS Transition ์์ฑ์ ์ด์ฉํ๋ ๋ฐฉํฅ์ด์์ต๋๋ค. ์ก๊ฐํ์ SVG ๋ด์์ Polygon
์์ฑ์ผ๋ก ์ ์๋๊ณ ์๋๋ฐ, ๋ชจ์
์ฐ๊ฒฐ์ ํ๊ธฐ ์ํด์ Path
๋ก ๋ณํํด์ฃผ์์ต๋๋ค. ์ด๋ Path ๋ด์์ ์ด๋ป๊ฒ ๊ทธ๋ ค์ง์ง๋ฅผ ์ ์ํด์ฃผ๋ ์์ฑ์ด d
์์ฑ์ธ๋ฐ, transition์ d
์ ๊ฑธ์ด์ฃผ๋ฉด ์์ฐ์ค๋ฌ์ด ๋ณ๊ฒฝ์ด ๋์ง ์์๊น ์๊ฐํ์ต๋๋ค.
ํ์ง๋ง ์์ฝ๊ฒ๋ transition์ d
์์ฑ์ ์ง์ํด์ฃผ์ง ์์์ต๋๋ค. (์ฐธ๊ณ : CSS Animations and Transitions on SVG Attributes)
SVG์ ์ฌ์ฉ๊ฐ๋ฅํ ์ ๋๋ฉ์ด์
์ ์ฐพ๋์ค animate
์์ฑ์ ์ฌ์ฉํ ์์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. animiate
๋ svg ๋ด์์ ์์ฑ์ผ๋ก์จ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ , SMIL ์ ๋๋ฉ์ด์
๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ๋ณ๋์ CSS๋ JS ์์ด๋ ์ ๋๋ฉ์ด์
์ ์ ์ํด์ค ์ ์๋ XML ๊ธฐ๋ฐ ์ ์๋ฅผ ํ ์ ์์ต๋๋ค.
์์ ์ฝ๋๋ ํ๋จ๊ณผ ๊ฐ์ต๋๋ค.
<svg>
<animate
attributeName="d"
dur="10s"
repeatCount="indefinite"
values="M 1045,520 L 1173,558 L 1184,393 Z;
M 1036,540 L 883,540 L 883,693 Z;
M 1045,520 L 1173,558 L 1184,393 Z"
keyTimes="0; 0.5; 1" />
</svg>
css์ keyframes
์ ๊ฐ์ ์ญํ ์ ํ๋ keytimes
๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, from
๊ณผ to
์์ฑ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฐพ์์ ๋๋ ๋ฌธ์ ํด๊ฒฐ์ ๊ฐ๊น์์ก๋ค๊ณ ์๊ฐํ๋๋ฐ, animate ์์ฑ์ด ๋๋ ๋๊ฒจ์ ์ ํํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ์ฆ, ์ ๊ฐ ์ํ๋ ๋ถ๋๋ฌ์ด ํธ๋์ง์
์ด ๋๊ณ ์์ง ์์์ต๋๋ค.
ํ์ง๋ง ๋ค๋ฅธ ์์ ๋ค์ ๋ณด๋ฉด ๋ถ๋ช
ํ animate
์์ฑ์ ์ฌ์ฉํ๋ฉด์ ๋ถ๋๋ฝ๊ฒ ํธ๋์ง์
์ ํ๊ณ ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ ์ ์์์ต๋๋ค. ๋ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ, ๋ถ๋๋ฌ์ด ํธ๋์ง์
์ด ์ง์๋๋ ค๋ฉด svg path๊ฐ ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํด์ผ ํ์ต๋๋ค.
- ์ต์ปค ํฌ์ธํธ์ ์๊ฐ ์ผ์นํ ๊ฒ
- ์ต์ปค ํฌ์ธํธ์ ์์๊ฐ ์ผ์นํ ๊ฒ
- ๋ชจ๋ ๊ฒฝ๋ก ๋ช ๋ น์ด ํ์ ์ด ์ผ์นํ ๊ฒ
path d
๋ ์๋์ ๊ฐ์ด ์ด๋ฃจ์ด์ ธ ์๋๋ฐ, ์์ ์ํ๋ฒณ์ผ๋ก M,C,Q,L,Z์ ๊ฐ์ด ๋ช
๋ น์ ์ ์ ์ ์๊ณ ๊ทธ ์์๋ ํด๋น ๋ช
๋ น์ ๋ฐ๋ฅธ ํฌ์ธํธ๋ค์ ์ค์ ํด์ค ์ ์์ต๋๋ค. (์๋ฅผ ๋ค์ด L์ ์ ๋ถ์ ๊ทธ๋ฆฌ๋ ๋ช
๋ น์ด์
๋๋ค.)
const d = `
M 50 0
Q 71.65 12.5, 93.3 25
Q 93.3 50, 93.3 75
... ์ดํ ์๋ต
๋ถ๋๋ฌ์ด ํธ๋์ง์ ์กฐ๊ฑด์ ์ผ์น์ํค๊ธฐ ์ํด์ ์๊ณผ ์ก๊ฐํ์ ๊ทธ๋ฆฌ๋ ๊ฒฝ๋ก ๋ช ๋ น ํ์ ์ด ์ผ์นํด์ผํ๋๋ฐ, ๊ณ ๋ คํด๋ณด๋ฉด ์์ ๋ฌด์กฐ๊ฑด ๊ณก์ ๋ช ๋ น์ผ๋ก ๊ทธ๋ ค์ผํ๋ ์ก๊ฐํ์ line ๋ช ๋ น์ด ์๋ ๊ณก์ ๋ช ๋ น์ผ๋ก ๊ทธ๋ ค์ง๋๋ก SVG path๋ฅผ ์์ ํด์ค์ผ ํ์ต๋๋ค. ์ด ๊ณผ์ ์์ ์ํ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ป๊ธฐ๊ฐ ์ฝ์ง ์์์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. AIํํ ์์ฐจ๋ก ์์ ์์ฒญ์ ๋ถํํ ๋์ ์ก๊ฐํ๊ณผ ๊ฐ๊น์ด svg๋ฅผ ๋ฐ์ ์ ์์์ต๋๋ค.
์ด ๊ณผ์ ์์ ์๊ฒ๋ ์ ์ C
(3์ฐจ ๋ฒ ์ง์ด ๊ณก์ )์ด ์๋๋ผ Q
(2์ฐจ ๋ฒ ์ง์ด ๊ณก์ )์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ค๊ฐํ ํํ๋ฅผ ์ ์งํ๋ ๋ฐ ๋ ์์ํ๊ฒ ์งํํ ์ ์์์ต๋๋ค. ์ก๊ฐํ์ ๊ณก๋ฅ ์ ์ ๊ฒํ๊ณ , ์์ ๊ณก๋ฅ ์ ๋งค์ฐ ์ฌ๋ ค์ ๊ทธ๋ฆฌ๋ฉด ๋ฒ ์ง์ด ๊ณก์ ์ผ๋ก๋ ๋ค์ํ ๋ํ์ ํํํ ์ ์์ต๋๋ค. ์๊ณผ ์ก๊ฐํ์ Q
๋ช
๋ น์ ํตํด์ ๊ทธ๋ฆฐ ํ, ๋ชจํ์ด ์ง์๋๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก CSS transition-transform์ ์ฌ์ฉํด์ ๊ฐ ๋ฒํผ์ด ์ค์์์๋ถํฐ ํผ์ ธ๋์ค๋๋ก ์ค์ ์ ํด์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ๋๋ฉ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
์ ๋๋ฉ์ด์
์ ๊ตฌํํ ๋, ๋ณต์กํ ์ ๋๋ฉ์ด์
์ ๊ตฌํํด์ผํ๋ ์๋น์ค๊ฐ ์๋๋ผ๋ฉด SVG ๊ด๋ จ ๋ด์ฅ ๊ธฐ์ ์ ํตํด์ ์ฉ์ดํ๊ฒ ๋ชจํ์ ๊ตฌํํด๋ณผ ์ ์์์ต๋๋ค. ํนํ path d
์์ฑ์ ๋ณํ๋ฅผ ์ค์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ ๊ฒฝ์ฐ, rx
, ry
๋ฅผ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ์๋ ๋ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
์ด๋ ค์ ๋ ์ ์, SVG๊ฐ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์์๋ ๋ถ๊ตฌํ๊ณ ์ ๋๋ฉ์ด์ ๊ณผ ๊ด๋ จ๋ ์๋ฃ๋ ์ธํฐ๋ท์ ๋ง์ง ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ path๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ ์ง์ ํธ์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ AI์๊ฒ ์์ ์์ฒญ์ ํด์ค์ผ ํ๋๋ฐ, "์ด๋ค ๋ถ๋ถ์ ์ด๋ค ๊ณก์ ์ ํตํด์ ํํํ ์ ์๋๋ก ์์ ํด์ค"์ ๊ฐ์ด ๊ตฌ์ฒด์ ์ธ ํค์๋๋ฅผ ํฌํจํด์ผ ์ํ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ๊น๊ฒ ์ป์ ์ ์์์ต๋๋ค.
๋ง์ฝ ์ธํฐ๋์ ์๊ตฌ์ฌํญ์ด ๋ ๋ง๊ณ ๋ณต์กํด์ง๋ ๊ฒฝ์ฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ํ๋ ๊ฒ์ด ํ์ ์์ฐ์ฑ์ ๋์์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์ํฉ์ ์ ํ๋จํ๋ ๊ฒ์ด ์ข๋ค๊ณ ๋๊ผ์ต๋๋ค.
- https://stackoverflow.com/questions/32729752/css-transition-animation-doesnt-work-on-svg-paths-d-attribute-change
- [SVG animation with SMIL - SVG: Scalable Vector Graphics | MDN](https://developer.mozilla.org/en-US/docs/Web/SVG/SVG_animation_with_SMIL)
- https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animate
- ๐ ํ ๋ ธ์
- ๐ค ๊ทธ๋ผ์ด๋ ๋ฃฐ
- ๐ค๏ธ ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- ๐ ํ์๋ก
- โ๏ธ ๊ทธ๋ฃน ํ๊ณ
- โ๏ธ Git & Github ์ปจ๋ฒค์
- ๐ฏ ์๋น์ค ๊ฐ์
- ๐ฅ๏ธ ์์ด์ดํ๋ ์
- โ๏ธ ์ธํ๋ผ ์ํคํ ์ณ
- ๐๏ธ ํ๋ก๋ํธ ๋ฐฑ๋ก๊ทธ
- ๐จ Canvas ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋น๊ต์ ๊ณ ๋ฏผ
- ๐ซ CSS, JS ์์ด๋ SVG ๋ชจํ์ ๊ตฌํํ ์ ์๋ค๋
- ๐ฅ CRDT๋ฅผ ํ๋ก์ ํธ์ ์ ์ฉํ๊ธฐ - Yjs ๋ฐ์ดํฐํ์ ์ ์
- ๐ณ CI-CD-๊ฐ์ -๊ฒฝํ-๋ฐ-Dockerโcompose-ํ์ฉ
- ๐ฌ FPS ํ ์คํธ๋ก ์ฑ๋ฅ ์ต์ ํ ๊ณ ๋ฏผ ํด๊ฒฐํ๊ธฐ
- ๐ฉโ๐ Konva.js๋ก ์คํ์ด์ค ์ค ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ
- ๐ค Palette๋ฉ๋ด ์ก๊ฐํ ๊ตฌํ์ฒด์ ๋ํ ๊ฐ๋จํ ๊ณ ๋ฏผ
- ๐งโ๐ป React์์ Y.js๋ฅผ ์ฌ์ฉํ๊ธฐ
- ๐ค React์์ Dialog๋ฅผ ๋งค๋๋ฝ๊ฒ ๊ด๋ฆฌํ๊ธฐ
- ๐ WebRTC, WebSocket, SocketIO ๊ธฐ์ ์ ์ ์ ๊ทผ๊ฑฐ์ ์ด์
- ๐ฅ ๋์ํธ์ง ๋งํฌ๋ค์ด ์๋ํฐ ๊ตฌํ๊ธฐ
- ๐ฑ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ์ํ ๋ ธ๋.๊ฐ์ ์กฐ์ ๊ธฐ๋ฅ์ ์ง์ํด๋ณด์
- ๐งฑ ๋ชนํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์ค๊ณํ ๊ธฐ๋ณธ ์ปดํฌ๋ํธ
- ๐จ ๋ฐฑ์๋ MySQL์์ MongoDB๋ก ๊ฐ์ ํ ๊ทผ๊ฑฐ ๋ฐ Redis๋ก ์บ์ฑ์ ํ์ง ์๋ ์ด์
- ๐ช ์ฐ์ฌ๊ณก์ ์ฌํ์ํ Gooey ์ธํฐ๋์
- โจ ์ธํฐ๋์ ๊ตฌํ๊ธฐ: ํ๋, ๊ทธ๋ฆฌ๊ณ ์ด๋