λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CSS

[CSS] SVG : μ• λ‹ˆλ©”μ΄μ…˜ κ΅¬ν˜„ν•˜κΈ°

by _토맀토 2022. 9. 8.
728x90

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)

See the Pen Untitled by eu-ny (@eu-ny) on CodePen


λ‹€μŒ μ‹œκ°„μ—” CSS μ• λ‹ˆλ©”μ΄μ…˜ κ΅¬ν˜„ λ°©λ²•μœΌλ‘œ μ°Ύμ•„λ΅™κ² μŠ΅λ‹ˆλ‹€~! 🫠 🫠
λ§›λ‚˜λŠ” λŒ“κΈ€κ³Ό ꡬ독 μ˜μ–‘λΆ„μ€ ν™˜μ˜μž…λ‹ˆλ‹ΉπŸŒ±

728x90

λŒ“κΈ€


Lucky Charms Rainbow
js
html
css