CSS : SVG๋ฅผ ์ด์ฉํ์ฌ ์ ๋๋ฉ์ด์ ๋ง๋ค๊ธฐ
์ด๋ฒ ์๊ฐ์๋ SVGํ๊ทธ์ CSS์์ฑ์ ์ด์ฉํ์ฌ ๋ฐฑํฐ ๊ทธ๋ํฝ์ผ๋ก ์ ๋๋ฉ์ด์ ์ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค! ๐
#1. SVG๋ ๋ฌด์์ธ๊ฐ์!?
์ค์ผ์ผ๋ฌ๋ธ ๋ฒกํฐ ๊ทธ๋ํฝ์ค(Scalable Vector Graphics, SVG)๋ 2์ฐจ์ ๋ฒกํฐ ๊ทธ๋ํฝ์ ํํํ๊ธฐ ์ํ XML ๊ธฐ๋ฐ์ ํ์ผ ํ์์ผ๋ก, 1999๋
W3C(World Wide Web Consortium)์ ์ฃผ๋ํ์ ๊ฐ๋ฐ๋ ์คํ ํ์ค์ ๋ฒกํฐ ๊ทธ๋ํฝ ํ์ผ ํ์์
๋๋ค.
SVG ํ์์ ์ด๋ฏธ์ง์ ๊ทธ ์๋์ XML ํ
์คํธ ํ์ผ๋ค๋ก ์ ์ ๋์ด ๊ฒ์ํยท๋ชฉ๋กํยท์คํฌ๋ฆฝํธํ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ํ์ํ๋ค๋ฉด ์์ถ๋ ๊ฐ๋ฅํฉ๋๋ค.
โข ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ9 ๋ฒ์ ์ด์๋ถํฐ ์ง์๋ฉ๋๋ค.
โข XML์ ์ด์ฉํ์ฌ ๋ผ์ธ, ๊ณก์ , ๊ธฐํํ์ ์ธ ๊ทธ๋ํฝ ํํ์ด ๊ฐ๋ฅํฉ๋๋ค.
โข ๋ฒกํฐ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ํ๋ํ๊ฑฐ๋ ์ถ์๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
โข DOM ๋จ์๋ก ์ปจํธ๋กค์ด ๊ฐ๋ฅํ์ง๋ง ๋ฌธ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐ๋๋ฉด ๋ ๋๋ง์ด ๋๋ ค์ง๋๋ค.
#2. SVG ์์
๋ค์์ SVG๋ฅผ ์ด์ฉํ์ฌ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๋ ์์ ์ ๋๋ค! ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉฐ ํจ๊ป ์์๊ฐ๋ด ์๋ค!
์ ๋๋ฉ์ด์ (animation)
๐ก HTML ์ฝ๋ ๋ณด๊ธฐ
<div class="svgBox svg8">
<svg>
<rect class="ani1"></rect>
</svg>
<svg>
<rect class="ani2"></rect>
</svg>
<svg style="background: #E3F3FD">
<path class="ani3" fill="none" stroke="#0D47A1" stroke-width="2" d="M7,154.667c0-82.358,65.152-149,145.667-149"/>
</svg>
<svg style="background: #E3F3FD">
<path class="ani4" fill="none" stroke="#0D47A1" stroke-width="2" d="M151.534,123.547c-33.711,33.711-88.369,33.711-122.08,0
c-26.97-26.969-26.97-70.695,0-97.665c21.575-21.576,56.556-21.576,78.131,0c17.261,17.26,17.261,45.245,0.001,62.504
c-13.809,13.809-36.196,13.809-50.005,0c-11.046-11.046-11.046-28.956,0-40.002c8.837-8.837,23.166-8.837,32.003,0
c7.069,7.07,7.07,18.532,0,25.602c-5.656,5.657-14.826,5.657-20.482,0c-4.524-4.524-4.524-11.86,0-16.385"/>
</svg>
<svg style="background: #E3F3FD">
<path class="ani5" fill="none" stroke="#0D47A1" stroke-width="2" d="M58.665,139.312c0-6.873,42-6.873,42-13.747s-42-6.874-42-13.748
s42-6.874,42-13.748c0-6.872-42-6.872-42-13.744c0-6.874,42-6.874,42-13.747c0-6.877-42-6.877-42-13.753
c0-6.874,42-6.874,42-13.748c0-6.878-42-6.878-42-13.757s42-6.879,42-13.758"/>
</svg>
<svg style="background: #E3F3FD">
<path class="ani6" fill="none" stroke="#0D47A1" stroke-width="2" d="M93.108,91.478c42.049,30.58-13.048,57.425-13.347,6.503
c0.299,50.922-55.041,24.58-13.405-6.381c-41.636,30.961-55.545-28.728-3.37-14.458c-52.176-14.27-14.181-62.359,9.204-11.649
c-23.385-50.71,37.901-50.989,14.846-0.067c23.055-50.922,61.484-3.179,9.309,11.565C148.521,62.245,135.157,122.058,93.108,91.478
z"/>
</svg>
</div>
๐ก CSS ์ฝ๋ ๋ณด๊ธฐ
.ani1 {
width: 100px; height: 100px;
x: 30px;
y: 30px;
fill: none;
stroke: #880E41;
stroke-width: 2px;
stroke-dasharray: 50;
stroke-dashoffset: 50;
animation: ani1 1s infinite linear alternate-reverse;
}
@keyframes ani1 {
0% {stroke-dashoffset: 50;}
100% {stroke-dashoffset: 0;}
}
.ani2 {
width: 100px; height: 100px;
x: 30px;
y: 30px;
fill: none;
stroke: #880E41;
stroke-width: 2px;
stroke-dasharray: 400;
stroke-dashoffset: 400;
animation: ani2 2s infinite linear alternate-reverse;
}
@keyframes ani2 {
0% {stroke-dashoffset: 400;}
100% {stroke-dashoffset: 0;}
}
.ani3 {
animation: ani3 1s infinite linear alternate-reverse;
stroke-dasharray: 230px;
stroke-dashoffset: 230px;
}
@keyframes ani3 {
0% {stroke-dashoffset: 230px;}
100% {stroke-dashoffset: 0;}
}
.ani4 {
animation: ani4 1s infinite linear alternate-reverse;
stroke-dasharray: 605px;
stroke-dashoffset: 605px;
}
@keyframes ani4 {
0% {stroke-dashoffset: 605px;}
100% {stroke-dashoffset: 0;}
}
.ani5 {
animation: ani5 1s infinite linear alternate-reverse;
stroke-dasharray: 411px;
stroke-dashoffset: 411px;
}
@keyframes ani5 {
0% {stroke-dashoffset: 411px;}
100% {stroke-dashoffset: 0;}
}
.ani6 {
animation: ani6 1s infinite linear alternate-reverse;
stroke-dasharray: 614px;
stroke-dashoffset: 614px;
}
@keyframes ani6 {
0% {stroke-dashoffset: 614px;}
100% {stroke-dashoffset: 0;}
}
SVG ํ ์คํธ ์ ๋๋ฉ์ด์ (animation)
๋ค์ ์๊ฐ์ CSS ์ ๋๋ฉ์ด์
๊ตฌํ ๋ฐฉ๋ฒ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค~! ๐ซ ๐ซ
๋ง๋๋ ๋๊ธ๊ณผ ๊ตฌ๋
์์๋ถ์ ํ์์
๋๋น๐ฑ
'CSS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CSS] ์ ๋๋ฉ์ด์ ์ค์ต : ๊ฑท๊ธฐ ์ ๋๋ฉ์ด์ (from.ํ ๋งคํ ) (4) | 2022.09.08 |
---|---|
[CSS] CSS ์ ๋๋ฉ์ด์ ์ ๋ํด ์์๋ณด์! (4) | 2022.09.08 |
[CSS] SVG : ๋ฐฑํฐ ๊ทธ๋ํฝ ๋ํ ํํํ๊ธฐ (5) | 2022.09.08 |
[CSS] ์ ๋๋ฉ์ด์ ์ค์ต : ๋ก๋ฉ (3) | 2022.08.30 |
[CSS] ์ ๋๋ฉ์ด์ ์ค์ต : ์์ง์ด๋ ๋ฐ์ค (2) | 2022.08.30 |
๋๊ธ