๋ชฉ์ฐจ
- SVG๋
- viewBox๋
- ์๋ฏธ
- ๊ธฐ๋ณธ ์์
- ์์น ์กฐ์ ์์
- ํ๋, ์ถ์ ์์
SVG๋
SVG์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์์๋ณด์. SVG๋ Scalable Vector Graphics์ ์ฝ์๋ก ํ์ฅ ๊ฐ๋ฅํ ๋ฒกํฐ ๊ทธ๋ํฝ, ๋ค์ ๋งํด ํฌ๊ธฐ๋ฅผ ํ๋ํ๊ฑฐ๋ ์ถ์ํ ์ ์๋, ์ํ์ ํจ์๋ฅผ ์ด์ฉํด ๋ํ์ด๋ ์ ์ ๊ทธ๋ ค์ ํํํ ๊ทธ๋ํฝ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ฌ๊ธฐ์ ์ํ์ ํจ์๋ฅผ ์ด์ฉํด ๋ํ์ด๋ ์ ์ ๊ทธ๋ ค์ ํํํ์ด๋ผ๋ ์๋ฏธ๋ ์ฐ๋ฆฌ๊ฐ ์ํ ์๊ฐ์ ๋ฐฐ์ ๋ ์ขํํ์ ์์ ๊ทธ๋ ค์ ธ ์๋ ๊ทธ๋ํ ์ ๋๋ก ์ดํดํ ์ ์๋ค. SVG๋ ์ด๋ฐ ๋ฐฉ์์ ์ฐจ์ฉํจ์ผ๋ก์จ, ์ฐ๋ฆฌ๊ฐ ํํ ์๊ณ ์๋ jpg, png, gif์ ๋ค๋ฅด๊ฒ ํ๋ํด๋ ์ ๋ช ๋๊ฐ ๋จ์ด์ง์ง ์๋๋ค. ๋ํ, ๋ํ์ด๋ ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ด ํ์ผ์ ์ฉ๋์ด ์๋์ ์ผ๋ก ์๋ค. ํ์ง๋ง svg๋ฅผ ๊ตฌ์ฑํ๋ ์ ๋ค์ด ๋ณต์กํด์ง๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํ์ฅ์(jpg, png ๋ฑ)๋ก ๋ ๋์ผํ ํ์ผ๋ณด๋ค ๊ทธ ์ฉ๋์ด ๋ ์ปค์ง ์ ์๊ณ , ์ํ์ ๊ณ์ฐ์ผ๋ก ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
viewBox๋
์๋ฏธ
viewBox๋ svg ์์๊ฐ ๊ทธ๋ ค์ง๋ ์์ญ์์, svg ์์์ ํฌ๊ธฐ๋ฅผ ํ๋ ๋๋ ์ถ์ ๊ทธ๋ฆฌ๊ณ ์์น๋ฅผ ์กฐ์ ํ ์ ์๋ ์์ฑ์ด๋ค. svg ์์๋ฅผ viewBox ์์ฑ ์์ด๋ ํ๋ฉด์ ๊ทธ๋ฆด ์๋ ์๋ค. ํ์ง๋ง, ํ๋ฉด์ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ ธ๋ svg ์์์ ํฌ๊ธฐ๋ ๊ณ ์ ๋์ด ๋ฐ์ํ์ ์ทจ์ฝํ ๋ชจ์ต์ ๋ณด์ธ๋ค. ์ฆ, viewBox ์์ฑ์ ์ด์ฉํ๋ฉด ํ๋ฉด์ ํฌ๊ธฐ์ ๋ฐ๋ผ svg ์์์ ํฌ๊ธฐ๊ฐ ์๋์ผ๋ก ์กฐ์ ๋๋ค. ์ด๋ฐ ์ด์ ๋ก svg ์์๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฐ์ํ ์น์ ์ค๊ณํ๊ธฐ ์ํด์ viewBox๋ ํ์ ์์ฑ์ด๋ค.
viewBox ์์ฑ ๊ฐ
viewBox ์์ฑ์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ๋ค.
viewBox="<min-x> <min-y> <width> <height>"
์ ๊ทธ๋ฆผ์ฒ๋ผ min-x์ min-y๋ svg๊ฐ ๊ทธ๋ ค์ง๋ ์์ญ์ ์์์ , ์ผ์ชฝ ์๋จ์ ๊ผญ์ง์ ์ผ๋ก, width์ height๋ ๊ฐ๊ฐ ์์ญ์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ก ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ width์ height๊ฐ ์ฐ๋ฆฌ๊ฐ ํํ ์๊ฐํ๋ px ๋จ์๊ฐ ์๋๋ผ๋ ๊ฒ์ด๋ค. viewBox์ ์๋ฏธ์์ ๋งํ๋ ๊ฒ์ฒ๋ผ svg ์์๋ค์ ์์น๋ฅผ ์กฐ์ ํ๊ฑฐ๋, ์์๋ค์ ํ๋์ ์ถ์๋ฅผ ์ํ ์ผ์ข ์ ์ขํ ํ๋ฉด์ด๋ค. ๊ทธ๋ผ ์์๋ฅผ ํตํด์ ์ข ๋ ์์ธํ ์์๋ณด๊ฒ ๋ค.
๊ธฐ๋ณธ ์์
์ดํด๋ฅผ ๋๊ธฐ ์ํด svg ์์ ์ค์ circle์ ์ถ๊ฐํ์ฌ ์ปดํฌ๋ํธ ํํ๋ก ๋ง๋ค์๋ค.
const App = () => (
<div style={{ marginTop: '50px', marginLeft: '50px' }}>
<div style={{ backgroundColor: 'yellow', width: '300px', height: '300px' }}>
<svg viewBox="0 0 200 200">
<circle r="100" fill="blue" />
</svg>
</div>
</div>
);
export default App;
viewport์์ svg๋ width์ height๊ฐ ๊ฐ๊ฐ 300px์ธ ์์ญ ์์ ์์นํ๊ณ ์๋ค. ํ์ง๋ง svg์ viewBox๋ "0 0 200 200"์ด๋ฏ๋ก, viewport์ width, height 300px์ ๊ธธ์ด๋ svg viewBox ์ขํํ๋ฉด ๊ธฐ์ค์ผ๋ก 200์ ๊ธธ์ด๊ฐ ๋๋ค. svg์ ์์ ์ค์์ circle์ ์ขํ ๋ํ svg์ viewBox์ ์ขํ๋ฅผ ๋ฐ๋ฅด๊ฒ ๋๋ค. circle ์์์ ์ค์ฌ ์ขํ ์์ฑ cx์ cy๊ฐ ์ค์ ๋์ง ์์ ์ํ์ด๋ฏ๋ก ํ์ฌ cx="0", cy="0"์ด ์ ์ฉ๋ ์ํ์ด๋ฉด์, ๋ฐ์ง๋ฆ r=100์ circle ์์๊ฐ ๋ง๋ค์ด์ ธ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ฌ๊ธฐ์ ํน์ง์ ์ ์ค์ฌ์ ๊ธฐ์ค์ผ๋ก ์ 1, 3, 4 ์ฌ๋ถ๋ฉด(๋ณด๋ผ์ ๋ถ๋ถ)์ svg viewBox ์์ญ์ ๋ฒ์ด๋ฌ๊ธฐ ๋๋ฌธ์ viewport์์ ๋ํ๋์ง ์๋๋ค๋ ์ ์ด๋ค.
์์น ์กฐ์ ์์
์ด๋ฒ์๋ ๋ค๋ฅธ ์์๋ฅผ ๋ณด์.
์ผ๋จ circle ์์์ cx="100", cy="100"์ ์ถ๊ฐํ๋ค.
const App = () => (
<div style={{ marginTop: '50px', marginLeft: '50px' }}>
<div style={{ backgroundColor: 'yellow', width: '300px', height: '300px' }}>
<svg viewBox="0 0 200 200">
<circle cx="100" cy="100" r="100" fill="blue" />
</svg>
</div>
</div>
);
export default App;
ํ์ฌ ์ํ์์ viewBox๋ฅผ ์ด์ฉํด์ ์ด๋ป๊ฒ ๊ธฐ๋ณธ ์์์ ๊ฐ์ ๋ชจ์์ ๋ง๋ค ์ ์์๊น. ๋ฐ๋ก min-x์ min-y๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
viewBox์ min-x, min-y๋ฅผ ๋ณ๊ฒฝํ๋ฉด viewport์์ ๋ณด์ด๋ ์์ญ(ํ์ฌ ์์์์์ width, height 300px ์์ญ)์ด ๋์ผํ์ง๋ง, svg์์ ๋ณด์ฌ์ฃผ๋ ์์ญ์ ๋ณ๊ฒฝ๋๋ค. viewBox๊ฐ "0 0 200 200"๋ถํฐ "1 1 200 200", "2 2 200 200" ์ด๋ฐ ์์ผ๋ก "100 100 200 200"๊น์ง ๋ณ๊ฒฝ๋๋ฉด, ์๋ ์์๊ณผ ๊ฐ์ด ๋๋ค. ์์์ ์์ ์ผ์ชฝ ์ฌ์ง์ ๋นจ๊ฐ ๋ค๋ชจ๊ฐ ์ค๋ฅธ์ชฝ ์ฌ์ง์ ๋นจ๊ฐ ๋ค๋ชจ ์์น๋ก ์ด๋ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋ฐ๋ฐ, ๋นจ๊ฐ ๋ค๋ชจ๋ ์ค์ ๋ก ํ๋ฉด์์ ๋ณด์ด๋ ๋ถ๋ถ์ด๋ฏ๋ก ์ ์ง๋์ด ์๋ค. ์ฆ, ๋นจ๊ฐ ๋ค๋ชจ ํ๋ฉด์ด ๋๋จ์ชฝ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ํ๋ ์์ด ๋ถ์์ชฝ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฏ๋ก ์์๊ณผ ๊ฐ์ด ๋ํ๋๋ค.
ํ๋, ์ถ์ ์์
viewBox์ width์ height๋ฅผ ๋ณ๊ฒฝํ๋ฉด svg ์์๋ค์ ํ๋ํ๊ฑฐ๋ ์ถ์ํ ์ ์๋ค.
const App = () => (
<div style={{ marginTop: '50px', marginLeft: '50px' }}>
<div style={{ backgroundColor: 'yellow', width: '300px', height: '300px' }}>
// ์ด ๋ถ๋ถ๋ง ๋ณ๊ฒฝ viewBox="0 0 100 100" / viewBox="0 0 200 200" / viewBox="0 0 300 300"
<svg viewBox="0 0 100 100">
<circle cx="100" cy="100" r="100" fill="blue" />
</svg>
</div>
</div>
);
export default App;
viewBox์ ์์ฑ๊ฐ ์ค width์ height๋ฅผ ๊ฐ๊ฐ 100, 200, 300์ผ๋ก ๋ณ๊ฒฝํ๋ค. ์ด ๊ฐ์ ๋ณ๊ฒฝํ๋๋ผ๋ viewport์์ ๋ณด์ด๋ ์์ญ(width, height 300px)์ ๋์ผํ์ง๋ง, svg ์์ญ ์์์์ ์์๋ฅผ ํ๋ํ๊ฑฐ๋ ์ถ์ํ ์ ์๋ค.
'๐ Study > Html, css' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CSS์ ์ ํ์ (0) | 2023.01.14 |
---|---|
html img ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ ์ ๋๊ฒฝ๋ก์ ์๋๊ฒฝ๋ก (1) | 2022.09.06 |
[HTML] [๋๋ฆผ์ฝ๋ฉby์๋ฆฌ] HTML์ ํต์ฌ์ ๋ฐ์ค ๋ชจ๋ธ์ด๋ค. (0) | 2022.03.03 |
Font Awesome ์ฌ์ฉํด์ ์์ด์ฝ ๋ฃ๋ ๋ฐฉ๋ฒ (0) | 2022.03.03 |
[HTML] <img>์์์ JPEG, PNG, GIF์ ์ฐจ์ด (0) | 2022.02.23 |