png
jpg
파일들과 다르게 벡터를 기반으로 이미지를 표현웹을 위한 SVG 제작 과정은 매우 간단합니다.
선호하는 벡터 그래픽 편집기 (Illustrator, Sketch, Inkscape [무료], [shape 레이어를 사용하는 경우 Photoshop에서도 가능])에서 작업 할 수 있습니다.
저희가 사용하는 XD와 가장 많이 사용하는 Illustratord을 중심으로 설명하겠지만, 모든 소프트웨어에도 동일하게 적용하여 작업할 수 있습니다.
macOS ⇒ 오브젝트 또는 아트보드를 선택하고 파일 > 내보내기로 이동하거나 Cmd + E를 누릅니다.
windows ⇒ 오브젝트 또는 아트보드를 선택하고 파일 > 내보내기로 이동합니다.
파일 > 내보내기 > SVG를 선택합니다.
프레젠테이션 속성: 각 SVG 태그의 개별 스타일 속성에 대해 별도의 XML 속성을 사용합니다. 이 형식은 Android Studio에서 SVG 에셋을 사용하는 데 필요합니다.
내부 CSS: 스타일이 동일한 객체 사이에서 스타일 지정 설정을 공유하는 CSS 클래스를 포함하는 단일 '
인라인 스타일: CSS 구문으로 결합된 모든 태그의 스타일 속성을 포함하는 SVG 태그별로 단일 'style' 속성을 사용합니다.
디테일한 속성들 보기
웹에서 SVG를 사용하는 방법은 다양합니다.
해상도 독립성 및 파일 용량의 최소화를 위해서는,
SVG를 일반 이미지 형식과 같이<img>
로 참조하거나, CSS에서background-image
로 참조합니다.
일반 이미지와 같이 SVG를 사용할 수 있습니다. 이 메서드는 조작 기능을 제한합니다.
<img src="sample.svg" alt="sample Logo" height="65" width="68">
인코딩을 하면 다운로드하는 동안 나머지 스타일 로딩을 차단시키기 때문에 사용하지 않는 편이 좋습니다.
이 메서드는 조작 기능을 제한합니다.
.logo {
background-image: url(sample.svg);
}
SVG 코드를 인라인하면 HTTP 요청은 저장되지만, 이미지는 브라우저에 캐시되지 않습니다.
조작이 가장 쉬운 방법이지만, 인라인 SVG 코드를 유지하는 것은 어려울 수 있습니다.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 68 65">
<path fill="#1A374D" d="M42 27v-20c0-3.7-3.3-7-7-7s-7 3.3-7 7v21l12 15-7 15.7c14.5 13.9 35 2.8 35-13.7 0-13.3-13.4-21.8-26-18zm6 25c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7z"/>
<path d="M14 27v-20c0-3.7-3.3-7-7-7s-7 3.3-7 7v41c0 8.2 9.2 17 20 17s20-9.2 20-20c0-13.3-13.4-21.8-26-18zm6 25c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7z"/>
</svg>
<object>
요소는 HTML
문서 내에 직접 내장(inline)시키지 않고 SVG를 조작하는 경우에 가장 좋은 방법입니다.
<object type="image/svg+xml" data="sample.svg">샘플 이미지 입니다.</object>
Object | Inline | Img | Background-image | |
---|---|---|---|---|
CSS 조작 | O | O | 일부 inline | 일부 inline |
JS 조작 | O | O | X | X |
SVG 조작 | O | O | O | O |
SVG 애니메이션 | O | O | X | X |
SVG의 가장 큰 장점은 CSS 사용해 스타일을 변경할 수 있다는 것입니다.
일부 페이지에서 파란색 아이콘을 주황색으로 바꾸고 싶을 때,
새 파란색 아이콘을 다시 만들지 않아도 됩니다.
<style>
태그와 <![CDATA [...]]>
태그로 스타일을 묶습니다.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 68 65">
<style type="text/css">
<![CDATA[
.firstb { fill: yellow; }
.secondb { fill: red; }
]]>
</style>
<path class="secondb" d="M42 27v-20c0-3.7-3.3-7-7-7s-7 3.3-7 7v21l12 15-7 15.7c14.5 13.9 35 2.8 35-13.7 0-13.3-13.4-21.8-26-18zm6 25c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7z"/>
<path class="firstb" d="M14 27v-20c0-3.7-3.3-7-7-7s-7 3.3-7 7v41c0 8.2 9.2 17 20 17s20-9.2 20-20c0-13.3-13.4-21.8-26-18zm6 25c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7z"/>
</svg>
// <svg>태그 전에 선언
<?xml-stylesheet type="text/css" href="style.css"?>
// style.css 파일 내
.firstb { fill: yellow; }
.secondb { fill: red; }
외부 JS로 작업 할 때 (SVG 파일 내 코드를 삽입하지 않고) SVG가 인라인으로 HTML문서안에 내장되어 있으면, 다른 DOM요소처럼 타켓팅 할 수 있습니다.
<object>
를 사용하는 경우contentDocument
로 타겟팅 할 수 있습니다.
window.onload=function() {
var object = document.getElementById("logoObject");
var svgDocument = object.contentDocument;
var svgb1 = svgDocument.getElementsByClassName("firstb");
var svgb2 = svgDocument.getElementsByClassName("secondb");
svgb1[0].setAttribute("fill", "yellow");
svgb2[0].setAttribute("fill", "red");
};
SVG 애니메이션은 CSS3 애니메이션 또는 JS 애니메이션을 기반으로 한 애니메이션 효과를 적용할 수 있습니다.
Snap.svg 와 같은 자바스크립트 라이브러리를 사용해 복잡한 애니메이션도 비교적 쉽게 만들 수 있습니다.
https://codepen.io/jjung-developer/pen/YzYbqQR
SVG 애니메이션에서 인터렉티브한 애니메이션 효과를 주려면 begin="mouseover"& begin="mouseout"
을 추가 하거나, CSS3 애니메이션에 SVG 요소에 클래스를 추가하고 호버에 스타일을 적용 할 수 있습니다.
https://codepen.io/jjung-developer/pen/QWaRNaN