10 svg
1. 개요
[SVG 예제사이트] [SVG 한글 예제사이트]
SVG(Scalable Vector Graphics) 는 웹용 벡터방식 이미지 포멧입니다.
다양한 해상도에 대응하는 웹서비스 제작시 용이하게 사용할수 있습니다.
2. 예제
2.1. viewbox
viebox 는 일러스트레이터의 아트보드와 유사합니다
[미리보기]
1<svg width="50" height="50" viewBox="0 0 100 100">2 <circle cx="50" cy="50" r="25" fill="red" />3</svg>4<svg width="100" height="100" viewBox="0 0 100 100">5 <circle cx="50" cy="50" r="25" fill="red" />6</svg>7<svg width="100" height="100" viewBox="0 0 50 50">8 <circle cx="50" cy="50" r="25" fill="red" />9</svg>- width , height 는 svg 요소의 크기입니다
- viewbox 는 svg 요소의 프레임이며 속성값은 프레임의 좌표를 의미합니다.
- 같은 크기의 svg 이미지라도 프레임의 크기에 따라 다르게 보이기도 합니다.
2.2. svg 삽입하기
[미리보기]
svg이미지를 html 에 삽입하는 3가지 방법을 알아봅시다.
1<img src="images/twitter_logo_original.svg" alt="" />2<div class="svg"></div>3<object type="image/svg+xml" data="images/twitter_logo_original.svg"></object>1.svg {2 width: 300px;3 height: 300px;4 background: url(images/twitter_logo_original.svg) no-repeat;5}2.3. 자바스크립트 이벤트 넣기
[미리보기]
1<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">2<rect width="32" height="32" fill="#D9D9D9"/>3<script>4document.querySelector('rect').onclick=function(){5 this.setAttribute('fill','red');6}7</script>8</svg>2.4. text path 애니메이션
회전하는 글씨를 만들어보자
- Step 1
- STEP 2
- 피그마를 열고 아래와 같은 이미지를 제작한다.
- 원을 더블클릭하여 선택후 2->3 순서대로 클릭한다.
- 도형 레이어를 패스로 깨는 과정이다.
- 프레임에서 우클릭후 번호 순서대로 클릭한다
- vscode 를 열고 복사한 코드를 붙여넣는다.
- 파일명
rotate.svg로 저장한다.
1<svg width="150" height="150" viewBox="0 0 150 150" fill="none" xmlns="http://www.w3.org/2000/svg">2<rect width="150" height="150" fill="white"/>3<path d="M109.5 75C109.5 94.0538 94.0538 109.5 75 109.5C55.9462 109.5 40.5 94.0538 40.5 75C40.5 55.9462 55.9462 40.5 75 40.5C94.0538 40.5 109.5 55.9462 109.5 75Z" stroke="black"/>4</svg>- svg 태그에 아래의 코드를 추가한다.
1 <svg ... xmlns:xlink="http://www.w3.org/1999/xlink">- 해당 코드는 ‘xlink:href’를 사용할수 있게 설정한다.
- svg 파일을 수정한다.
1<svg width="150" height="150" viewBox="0 0 150 150" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">2<style>3 .r_text {4 animation: rotate 10s linear infinite;5 transform-origin:50% 50% ;6 font-size:1rem;7 }8 @keyframes rotate {9 to {10 transform: rotate(1turn);11 }12 }13</style>14<path id="line" d="M109.5 75C109.5 94.0538 94.0538 109.5 75 109.5C55.9462 109.5 40.5 94.0538 40.5 75C40.5 55.9462 55.9462 40.5 75 40.5C94.0538 40.5 109.5 55.9462 109.5 75Z" fill="rgba(0,0,0,0)" />15<text class="r_text">16 <textPath xlink:href="#line">Sentence Examples | Examples of Words Used in a Sentence</textPath>17</text>18</svg>- html 문서를 생성하고 svg 이미지를 삽입한다.
1<!DOCTYPE html>2<html lang="ko">3 <head>4 <meta charset="UTF-8" />5 <meta name="viewport" content="width=device-width, initial-scale=1.0" />6 <title>Document</title>7 </head>8 <body>9 <img src="rotate.svg" width="300" height="300" alt="" />10 </body>11</html>2.5. 마퀴텍스트
특정영역안에서 흐르는 텍스트애니메이트를 만들어보자
- Step 1
- 피그마를 활용하여 마스크가 적용된 텍스트레이어를 제작한다.
- svg 형식으로 코드를 복사한다.
1<svg width="300px" height="100px" version="1.0" xmlns="http://www.w3.org/2000/svg"2 xmlns:xlink="http://www.w3.org/1999/xlink">3 <defs>4 <clipPath id="clip">5 <rect width="300px" height="100px"/>6 </clipPath>7 <style type="text/css">8 text {9 font-size: 5rem;10 fill: #000;11 }12 .text1 {13 animation: left 10s linear infinite;14 }15 @keyframes left {16 from {17 transform: translateX(100%);18 }19 to {20 transform: translateX(-100%);21 }22 }23 </style>24 </defs>25 <rect class="bg" width="300px" height="100px" fill="red"/>26 <g class="text" clip-path="url(#clip)">27 <text class="text1" x="0" y="70">Hello SVG! Hello SVG! Hello SVG! Hello SVG! Hello SVG!</text>28 </g>29
30</svg>- html
1<!DOCTYPE html>2<html lang="ko">3 <head>4 <meta charset="UTF-8" />5 <meta name="viewport" content="width=device-width, initial-scale=1.0" />6 <meta http-equiv="X-UA-Compatible" content="ie=edge" />7 <title>SVG</title>8 </head>9
10 <body>11 <svg class="the-svg">12 <style>13 .the-svg {14 width: 300px;15 height: 100px;16 background: #c348e9;17 border-radius: 30px;18 }19
20 .the-svg text {21 font-size: 5rem;22 }23
24 .text1 {25 animation: left 5s infinite linear;26 }27
28 @keyframes left {29 0% {30 transform: translateX(0);31 }32
33 100% {34 transform: translateX(-100%);35 }36 }37
38 #mask-circle rect {39 fill: #fff;40 }41 </style>42 <mask id="mask-circle">43 <rect width="300" height="80" />44 </mask>45 <g mask="url(#mask-circle)">46 <text class="text1" x="10" y="100">Hello SVG! Hello SVG! Hello SVG! Hello SVG! Hello SVG!</text>47 </g>48 </svg>49
50 <object data="marquee.svg" type="image/svg+xml"></object>51 </body>52</html>