SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
@zineeworld
SVG를
배경이미지로 활용한
아이콘 삽질기
코인원 오혜진
@zineeworld
오늘 이야기 하고 싶은 것
1. 아이콘 폰트에 대한 소개
2. CSS로 그린 간단한 아이콘
3. background-image: url(‘SVG 코드’)
@zineeworld
아이콘 폰트란?
@zineeworld
쉽게 생각하면
Bootstrap Glyphicon,
Font Awesome
참고 : https://webdir.tistory.com/476
@zineeworld
Bootstrap Glyphicons Font Awesome
@zineeworld
아이콘 폰트의 장점
1. 클래스명으로 쉽게 아이콘을 불러올 수 있다.
2. 벡터 그래픽을 이용하기 때문에 사이즈 변경이 용이하다.
3. 일반 텍스트에 적용할 수 있는 CSS를 사용할 수 있다.
@zineeworld
코인원 아이콘폰트 제작
https://icomoon.io/
SVG 파일로 추출된 아이콘들을 icomoon 사이트를 통해 아이콘폰트로 제작합니다.

코인원에서는 디자이너님께서 해당 작업을 해주고 계십니다.
@zineeworld
개편 작업으로 할당받은
페이지 새 디자인
@zineeworld
@zineeworld
페이지 내에 반복적으로 링크 연결되는 부분에 > 아이콘이 사용
기존 아이콘폰트를 사용해왔던 방식 그대로 <span class=“glyph-ui-chevron-right”></span>을 적어준다.
적용방법
반복적으로 적어주지 않고
좀 더 단순하고 쉽게 사용할 수는 없을까?
@zineeworld
아이콘폰트는 개체마다 고유의 유니코드 값을 가지고 있다
접근1) 아이콘폰트의 유니코드 값을 똑같이 적어주자
@zineeworld
아이콘폰트는 개체마다 고유의 유니코드 값을 가지고 있다
접근1) 아이콘폰트의 유니코드 값을 똑같이 적어주자
@zineeworld
아이콘폰트는 개체마다 고유의 유니코드 값을 가지고 있다
(문제점)
유니코드 값을 매번 보장 할 수 없다
접근1) 아이콘폰트의 유니코드 값을 똑같이 적어주자
@zineeworld
접근2) CSS로 그려볼까?
border-right: 1px solid currentColor;
border-bottom: 1px solid currentColor;
transform: rotate(-45deg);
https://codepen.io/zineeworld/pen/ZPxpgp
@zineeworld
접근2) CSS로 그려볼까?
https://codepen.io/zineeworld/pen/PLLydw
(문제점)
결과물 디테일 차이
1px 1.5px 2px
@zineeworld
접근3) SVG 코드를 활용 해볼까?
1. <img src=“icon.svg”> 이미지 파일로 사용한다.
1. 벡터 이미지여서 크기에는 제약이 없으나 색상을 변경하려면 다른 파일이 필요하다.

2. HTML 코드 안에 <svg ~~~~></svg> 를 넣는다.
1. 1번 방법보다는 하나의 코드로 색상 값을 변경하기는 용이하다. (fill=“color값”)
2. <span class=“glyph-ui-chevron-right”></span> 보다 훨-씬 더 긴 코드를 매번 넣어야 한다.
3. svg 코드에 변경이 생기면 사용하고 있는 모든 곳을 찾아 바꿔줘야 한다.
4. 아이콘 색상을 컨트롤 하는 건 스타일 파일로 통일되어야 하는데, 

이 방식을 쓰면 html 코드 상의 수정이 필요하다.

3. CSS로 배경이미지 속성에 svg 코드를 넣는다.
1. background-image: url(data:image/svg+xml, svg코드);
2. 색상 관리를 스타일 파일 한 곳에서 제어가 가능하다.
SVG 아이콘을 사용하는 방법
@zineeworld
접근3) SVG 코드를 활용 해볼까?
1.SVG 코드를 background-image 에 넣기

1. IE 대응을 위해 SVG 코드를 Data URI 로 변환하기

2. 변환한 Data URI 값을 배경이미지에 넣기

2.Sass를 통해 색상 변환이 용이한 function 만들기

1. Data URI 에는 hex 값을 넣을 수 없다?

2. rgba의 알파값에 0.999를 주자

3.SVG 코드를 배경이미지로 활용한 아이콘 완성!
@zineeworld
<svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 60 60">
<polygon fill="black" points="20.62 55.62
45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5
16.38 51.38 20.62 55.62">
</svg>
SVG 코드를 살펴볼까요?
단순한 폴리곤으로 이루어져 있습니다.
접근3) SVG 코드를 활용 해볼까?
@zineeworld
.icon
display: inline-block
width: 1em
height: 1em
background: url("data:image/svg+xml,<svg
xmlns='http://www.w3.org/2000/svg' viewBox='0 0
60 60'><polygon fill='rgba(23, 114, 248,
0.999)' points='20.62 55.62 45.74 30.5 20.62
5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62
55.62'/></svg>") no-repeat
Sass) background-image: url() 에 SVG 코드를 넣어봅시다.
이렇게 해도 대부분의 브라우저에서는 동작하지만 IE 에서는 뜨지 않습니다.
접근3) SVG 코드를 활용 해볼까?
@zineeworld
접근3) SVG 코드를 활용 해볼까?
https://zineeworld.github.io/demo/svg_fonticon_test.html
Windows (좌측 상단부터 시계방향으로 크롬 >> 파이어폭스 >> Edge >> IE11)
MacOS (좌측부터 크롬 >> 사파리 >> 파이어폭스)
IE에서는 Data URI로
변환해서 넣은 코드만 정상 노출됨
> : Data URI
> : SVG
@zineeworld
SVG → Data URI 변환 방법
접근3) SVG 코드를 활용 해볼까?
https://runkit.com/zineeworld/convert-svg-to-data-uri
@zineeworld
접근3) SVG 코드를 활용 해볼까?
.icon
display: inline-block
width: 1em
height: 1em
background: url(“data:image/
svg+xml,data:image/svg+xml,%3Csvg
xmlns='http://www.w3.org/2000/svg' viewBox='0 0
60 60'%3E%3Cpolygon fill='black' points='20.62
55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26
30.5 16.38 51.38 20.62 55.62'/%3E%3C/svg%3E
") no-repeat
Sass) background-image: url() 에 변환한 Data URI 코드를 넣어봅시다.
@zineeworld
접근3) SVG 코드를 활용 해볼까?
@function svgIcon($color)
$icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62
45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/
%3E%3C/svg%3E"
@return url($icon)
.icon
display: inline-block
width: 1em
height: 1em
background: svgIcon(#1772f8) no-repeat
Sass를 통해 색상 변환이 용이한 function 만들기
@zineeworld
접근3) SVG 코드를 활용 해볼까?
@function svgIcon($color)
$icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62
45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/
%3E%3C/svg%3E"
@return url($icon)
.icon
display: inline-block
width: 1em
height: 1em
background: svgIcon(#1772f8) no-repeat
Sass를 통해 색상 변환이 용이한 function 만들기
(문제점)
fill 값에는 hex 코드를 넣을 수 없다!!
@zineeworld
접근3) SVG 코드를 활용 해볼까?
@function svgIcon($color)
$color: rgba($color, 1.0)
$icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62
45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/
%3E%3C/svg%3E"
@return url($icon)
.icon
display: inline-block
width: 1em
height: 1em
background: svgIcon(#1772f8) no-repeat
Sass를 통해 색상 변환이 용이한 function 만들기
<<< 이렇게 하면 될 줄 알았으나 또 안 됨…
@zineeworld
접근3) SVG 코드를 활용 해볼까?
@function svgIcon($color)
$color: rgba($color, 1.0)
$icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62
45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/
%3E%3C/svg%3E"
@return url($icon)
.icon
display: inline-block
width: 1em
height: 1em
background: svgIcon(#1772f8) no-repeat
Sass를 통해 색상 변환이 용이한 function 만들기
(문제점)
rgba(#ffffff, 1.0) = #ffffff
rgba(#ffffff, 1.0) != rgba(255,255,255,1.0)
@zineeworld
접근3) SVG 코드를 활용 해볼까?
그렇다면 알파값에 0.999를 주면 어떨까?
일단 디스플레이 되는 결과값은 오차가 없음을 확인!
@zineeworld
접근3) SVG 코드를 활용 해볼까?
@function svgIcon($color)
$color: rgba($color, 0.999)
$icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62
45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/
%3E%3C/svg%3E"
@return url($icon)
.icon
display: inline-block
width: 1em
height: 1em
background: svgIcon(#1772f8) no-repeat
Sass를 통해 색상 변환이 용이한 function 만들기
드디어 완성!
@zineeworld
접근3) SVG 코드를 활용 해볼까?
@function svgIcon($color)
$color: rgba($color, 0.999)
$icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62
45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/
%3E%3C/svg%3E"
@return url($icon)
.icon
display: inline-block
width: 1em
height: 1em
background: svgIcon(#1772f8) no-repeat
&:hover
background: svgIcon(#000000) no-repeat
Sass를 통해 색상 변환이 용이한 function 만들기
hover시 변경색은 이렇게 지정
// SVG 코드가 background-image 값으로 들어간 경우 currentColor 사용불가
// fill='currentColor' 라고 적히나 동작하지 않음, 단순 문자열이 되어버림
@zineeworldhttps://codepen.io/zineeworld/pen/XGYNZp
@zineeworld
• https://medium.com/coinone-official/svg%EB%A5%BC-
%EB%B0%B0%EA%B2%BD%EC%9D%B4%EB%AF%B8%EC%A7%80
%EB%A1%9C-%ED%99%9C%EC%9A%A9%ED%95%9C-
%EC%95%84%EC%9D%B4%EC%BD%98-
%EC%82%AC%EC%9A%A9%EA%B8%B0-d46e681b492f	

• https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images

• 	https://codepen.io/noahblon/pen/xGbXdV?editors=1100

• 	https://codepen.io/tigt/post/optimizing-svgs-in-data-uris
참고자료
@zineeworld
감사합니다
facebook.com/zineeworld

Mais conteúdo relacionado

Mais procurados

3주 CSS Basic
3주 CSS Basic3주 CSS Basic
3주 CSS Basic지수 윤
 
CSS3 Top10
CSS3 Top10CSS3 Top10
CSS3 Top10Toby Yun
 
7개의 키워드로 만나는 책쓰기
7개의 키워드로 만나는 책쓰기7개의 키워드로 만나는 책쓰기
7개의 키워드로 만나는 책쓰기DongHwan Yu
 
CSS3 천기누설
CSS3 천기누설CSS3 천기누설
CSS3 천기누설Toby Yun
 
200819 NAVER TECH CONCERT 02_안드로이드의 '안'자도 몰랐던 나는 어떻게 안드로이드 개발자가 되었을까?
200819 NAVER TECH CONCERT 02_안드로이드의 '안'자도 몰랐던 나는 어떻게 안드로이드 개발자가 되었을까?200819 NAVER TECH CONCERT 02_안드로이드의 '안'자도 몰랐던 나는 어떻게 안드로이드 개발자가 되었을까?
200819 NAVER TECH CONCERT 02_안드로이드의 '안'자도 몰랐던 나는 어떻게 안드로이드 개발자가 되었을까?NAVER Engineering
 
웹 본격적으로 배우기 전 감 잡기 - 1
웹 본격적으로 배우기 전 감 잡기 - 1웹 본격적으로 배우기 전 감 잡기 - 1
웹 본격적으로 배우기 전 감 잡기 - 1mangonamu
 
마크업개발자가 UX를 알아야 하는 이유
마크업개발자가 UX를 알아야 하는 이유마크업개발자가 UX를 알아야 하는 이유
마크업개발자가 UX를 알아야 하는 이유Woo Sanghun
 
Java script PPT #1 : 개요.
Java script PPT #1 : 개요.Java script PPT #1 : 개요.
Java script PPT #1 : 개요.Hong Jin Baek
 
드래그홈 표준제안서 2014
드래그홈 표준제안서 2014드래그홈 표준제안서 2014
드래그홈 표준제안서 2014draghome
 
율무에 관한 5가지 썰
율무에 관한 5가지 썰율무에 관한 5가지 썰
율무에 관한 5가지 썰Yurim Jin
 
프로그래머로 부터 배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)
프로그래머로 부터  배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)프로그래머로 부터  배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)
프로그래머로 부터 배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)Mayuko Sekiya
 
개발자 1.5배 즐기기
개발자 1.5배 즐기기개발자 1.5배 즐기기
개발자 1.5배 즐기기용근 권
 
낮은 가지의 열매: 진도가 안 나가는 모든 개발자에게 [170408 Women Techmakers]
낮은 가지의 열매: 진도가 안 나가는 모든 개발자에게 [170408 Women Techmakers]낮은 가지의 열매: 진도가 안 나가는 모든 개발자에게 [170408 Women Techmakers]
낮은 가지의 열매: 진도가 안 나가는 모든 개발자에게 [170408 Women Techmakers]Yurim Jin
 
꾸글 월간노하우 7월 그랑노마드입니다.
꾸글 월간노하우 7월 그랑노마드입니다.꾸글 월간노하우 7월 그랑노마드입니다.
꾸글 월간노하우 7월 그랑노마드입니다.종원 이
 
09_business blog marketing case
09_business blog marketing case 09_business blog marketing case
09_business blog marketing case websmedia
 
웹 디자이너의 도전: Vue.js 따라하기
웹 디자이너의 도전: Vue.js 따라하기웹 디자이너의 도전: Vue.js 따라하기
웹 디자이너의 도전: Vue.js 따라하기Seungmin Lee
 
WordCamp Seoul: WordPress Based web services in Japan / WordCamp 서울 : 일본에서 워드...
WordCamp Seoul: WordPress Based web services in Japan / WordCamp 서울 : 일본에서 워드...WordCamp Seoul: WordPress Based web services in Japan / WordCamp 서울 : 일본에서 워드...
WordCamp Seoul: WordPress Based web services in Japan / WordCamp 서울 : 일본에서 워드...Shinichi Nishikawa
 
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로Sungwoo Park
 

Mais procurados (20)

CSS Layout
CSS LayoutCSS Layout
CSS Layout
 
3주 CSS Basic
3주 CSS Basic3주 CSS Basic
3주 CSS Basic
 
CSS3 Top10
CSS3 Top10CSS3 Top10
CSS3 Top10
 
7개의 키워드로 만나는 책쓰기
7개의 키워드로 만나는 책쓰기7개의 키워드로 만나는 책쓰기
7개의 키워드로 만나는 책쓰기
 
CSS3 천기누설
CSS3 천기누설CSS3 천기누설
CSS3 천기누설
 
200819 NAVER TECH CONCERT 02_안드로이드의 '안'자도 몰랐던 나는 어떻게 안드로이드 개발자가 되었을까?
200819 NAVER TECH CONCERT 02_안드로이드의 '안'자도 몰랐던 나는 어떻게 안드로이드 개발자가 되었을까?200819 NAVER TECH CONCERT 02_안드로이드의 '안'자도 몰랐던 나는 어떻게 안드로이드 개발자가 되었을까?
200819 NAVER TECH CONCERT 02_안드로이드의 '안'자도 몰랐던 나는 어떻게 안드로이드 개발자가 되었을까?
 
웹 본격적으로 배우기 전 감 잡기 - 1
웹 본격적으로 배우기 전 감 잡기 - 1웹 본격적으로 배우기 전 감 잡기 - 1
웹 본격적으로 배우기 전 감 잡기 - 1
 
2013 app design trends
2013 app design trends2013 app design trends
2013 app design trends
 
마크업개발자가 UX를 알아야 하는 이유
마크업개발자가 UX를 알아야 하는 이유마크업개발자가 UX를 알아야 하는 이유
마크업개발자가 UX를 알아야 하는 이유
 
Java script PPT #1 : 개요.
Java script PPT #1 : 개요.Java script PPT #1 : 개요.
Java script PPT #1 : 개요.
 
드래그홈 표준제안서 2014
드래그홈 표준제안서 2014드래그홈 표준제안서 2014
드래그홈 표준제안서 2014
 
율무에 관한 5가지 썰
율무에 관한 5가지 썰율무에 관한 5가지 썰
율무에 관한 5가지 썰
 
프로그래머로 부터 배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)
프로그래머로 부터  배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)프로그래머로 부터  배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)
프로그래머로 부터 배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)
 
개발자 1.5배 즐기기
개발자 1.5배 즐기기개발자 1.5배 즐기기
개발자 1.5배 즐기기
 
낮은 가지의 열매: 진도가 안 나가는 모든 개발자에게 [170408 Women Techmakers]
낮은 가지의 열매: 진도가 안 나가는 모든 개발자에게 [170408 Women Techmakers]낮은 가지의 열매: 진도가 안 나가는 모든 개발자에게 [170408 Women Techmakers]
낮은 가지의 열매: 진도가 안 나가는 모든 개발자에게 [170408 Women Techmakers]
 
꾸글 월간노하우 7월 그랑노마드입니다.
꾸글 월간노하우 7월 그랑노마드입니다.꾸글 월간노하우 7월 그랑노마드입니다.
꾸글 월간노하우 7월 그랑노마드입니다.
 
09_business blog marketing case
09_business blog marketing case 09_business blog marketing case
09_business blog marketing case
 
웹 디자이너의 도전: Vue.js 따라하기
웹 디자이너의 도전: Vue.js 따라하기웹 디자이너의 도전: Vue.js 따라하기
웹 디자이너의 도전: Vue.js 따라하기
 
WordCamp Seoul: WordPress Based web services in Japan / WordCamp 서울 : 일본에서 워드...
WordCamp Seoul: WordPress Based web services in Japan / WordCamp 서울 : 일본에서 워드...WordCamp Seoul: WordPress Based web services in Japan / WordCamp 서울 : 일본에서 워드...
WordCamp Seoul: WordPress Based web services in Japan / WordCamp 서울 : 일본에서 워드...
 
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
 

Semelhante a 191011 SVG를 배경이미지로 활용한 아이콘 삽질기 - 코인원 오혜진 (W3C HTML5 Conference)

R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁창규 김
 
Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드Jong-hyun Park
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 11일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 11일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 11일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 11일차Michael Yang
 
실무가를 위한 Sns 커뮤니케이션 시각화
실무가를 위한 Sns 커뮤니케이션 시각화실무가를 위한 Sns 커뮤니케이션 시각화
실무가를 위한 Sns 커뮤니케이션 시각화Sue Hyun Jung
 
시나브로 CSS3
시나브로 CSS3시나브로 CSS3
시나브로 CSS3승환 오
 
[별천지 세미나] CSS3 Animation
[별천지 세미나] CSS3 Animation[별천지 세미나] CSS3 Animation
[별천지 세미나] CSS3 Animation양귀 김
 
웹표준(XHTML+CSS)
웹표준(XHTML+CSS)웹표준(XHTML+CSS)
웹표준(XHTML+CSS)ymtech
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modulesJay Kim
 
좋은교사운동 워크숍05 sn_son_blog
좋은교사운동 워크숍05 sn_son_blog좋은교사운동 워크숍05 sn_son_blog
좋은교사운동 워크숍05 sn_son_blogSue Hyun Jung
 
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영XpressEngine
 
개발자가 본 웹디자인
개발자가 본 웹디자인개발자가 본 웹디자인
개발자가 본 웹디자인Jae Nam Jung
 
날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기NAVER Engineering
 
c++ opencv tutorial
c++ opencv tutorialc++ opencv tutorial
c++ opencv tutorialTaeKang Woo
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임sung ki choi
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 7일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 7일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 7일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 7일차Michael Yang
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 12일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 12일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 12일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 12일차Michael Yang
 

Semelhante a 191011 SVG를 배경이미지로 활용한 아이콘 삽질기 - 코인원 오혜진 (W3C HTML5 Conference) (20)

R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
 
Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 11일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 11일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 11일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 11일차
 
실무가를 위한 Sns 커뮤니케이션 시각화
실무가를 위한 Sns 커뮤니케이션 시각화실무가를 위한 Sns 커뮤니케이션 시각화
실무가를 위한 Sns 커뮤니케이션 시각화
 
시나브로 CSS3
시나브로 CSS3시나브로 CSS3
시나브로 CSS3
 
[별천지 세미나] CSS3 Animation
[별천지 세미나] CSS3 Animation[별천지 세미나] CSS3 Animation
[별천지 세미나] CSS3 Animation
 
웹표준(XHTML+CSS)
웹표준(XHTML+CSS)웹표준(XHTML+CSS)
웹표준(XHTML+CSS)
 
Scalable vector graphics
Scalable vector graphicsScalable vector graphics
Scalable vector graphics
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modules
 
좋은교사운동 워크숍05 sn_son_blog
좋은교사운동 워크숍05 sn_son_blog좋은교사운동 워크숍05 sn_son_blog
좋은교사운동 워크숍05 sn_son_blog
 
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
 
개발자가 본 웹디자인
개발자가 본 웹디자인개발자가 본 웹디자인
개발자가 본 웹디자인
 
날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기
 
c++ opencv tutorial
c++ opencv tutorialc++ opencv tutorial
c++ opencv tutorial
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 7일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 7일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 7일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 7일차
 
Vector rendering in html
Vector rendering in htmlVector rendering in html
Vector rendering in html
 
모바일환경과 개발방향
모바일환경과 개발방향 모바일환경과 개발방향
모바일환경과 개발방향
 
jQuery Trend
jQuery TrendjQuery Trend
jQuery Trend
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 12일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 12일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 12일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 12일차
 

Mais de Hyejin Oh

[Basic HTML/CSS] 7. project
[Basic HTML/CSS] 7. project[Basic HTML/CSS] 7. project
[Basic HTML/CSS] 7. projectHyejin Oh
 
[Basic HTML/CSS] 6. css - box sizing, display, margin, padding
[Basic HTML/CSS] 6. css - box sizing, display, margin, padding[Basic HTML/CSS] 6. css - box sizing, display, margin, padding
[Basic HTML/CSS] 6. css - box sizing, display, margin, paddingHyejin Oh
 
[Basic HTML/CSS] 5. css - selector, units
[Basic HTML/CSS] 5. css - selector, units[Basic HTML/CSS] 5. css - selector, units
[Basic HTML/CSS] 5. css - selector, unitsHyejin Oh
 
[Basic HTML/CSS] 4. html - form tags
[Basic HTML/CSS] 4. html - form tags[Basic HTML/CSS] 4. html - form tags
[Basic HTML/CSS] 4. html - form tagsHyejin Oh
 
[Basic HTML/CSS] 3. html - table tags
[Basic HTML/CSS] 3. html - table tags[Basic HTML/CSS] 3. html - table tags
[Basic HTML/CSS] 3. html - table tagsHyejin Oh
 
[Basic HTML/CSS] 2. html - list tags
[Basic HTML/CSS] 2. html - list tags[Basic HTML/CSS] 2. html - list tags
[Basic HTML/CSS] 2. html - list tagsHyejin Oh
 
[Basic HTML/CSS] 1. html - basic tags
[Basic HTML/CSS] 1. html - basic tags[Basic HTML/CSS] 1. html - basic tags
[Basic HTML/CSS] 1. html - basic tagsHyejin Oh
 
[Basic HTML/CSS] 0. introduction
[Basic HTML/CSS] 0. introduction[Basic HTML/CSS] 0. introduction
[Basic HTML/CSS] 0. introductionHyejin Oh
 
HTTP 완벽 가이드 9~10장
HTTP 완벽 가이드 9~10장HTTP 완벽 가이드 9~10장
HTTP 완벽 가이드 9~10장Hyejin Oh
 
[CSS Drawing] Basic Tutorial (라이언 그리기)
[CSS Drawing] Basic Tutorial (라이언 그리기)[CSS Drawing] Basic Tutorial (라이언 그리기)
[CSS Drawing] Basic Tutorial (라이언 그리기)Hyejin Oh
 

Mais de Hyejin Oh (10)

[Basic HTML/CSS] 7. project
[Basic HTML/CSS] 7. project[Basic HTML/CSS] 7. project
[Basic HTML/CSS] 7. project
 
[Basic HTML/CSS] 6. css - box sizing, display, margin, padding
[Basic HTML/CSS] 6. css - box sizing, display, margin, padding[Basic HTML/CSS] 6. css - box sizing, display, margin, padding
[Basic HTML/CSS] 6. css - box sizing, display, margin, padding
 
[Basic HTML/CSS] 5. css - selector, units
[Basic HTML/CSS] 5. css - selector, units[Basic HTML/CSS] 5. css - selector, units
[Basic HTML/CSS] 5. css - selector, units
 
[Basic HTML/CSS] 4. html - form tags
[Basic HTML/CSS] 4. html - form tags[Basic HTML/CSS] 4. html - form tags
[Basic HTML/CSS] 4. html - form tags
 
[Basic HTML/CSS] 3. html - table tags
[Basic HTML/CSS] 3. html - table tags[Basic HTML/CSS] 3. html - table tags
[Basic HTML/CSS] 3. html - table tags
 
[Basic HTML/CSS] 2. html - list tags
[Basic HTML/CSS] 2. html - list tags[Basic HTML/CSS] 2. html - list tags
[Basic HTML/CSS] 2. html - list tags
 
[Basic HTML/CSS] 1. html - basic tags
[Basic HTML/CSS] 1. html - basic tags[Basic HTML/CSS] 1. html - basic tags
[Basic HTML/CSS] 1. html - basic tags
 
[Basic HTML/CSS] 0. introduction
[Basic HTML/CSS] 0. introduction[Basic HTML/CSS] 0. introduction
[Basic HTML/CSS] 0. introduction
 
HTTP 완벽 가이드 9~10장
HTTP 완벽 가이드 9~10장HTTP 완벽 가이드 9~10장
HTTP 완벽 가이드 9~10장
 
[CSS Drawing] Basic Tutorial (라이언 그리기)
[CSS Drawing] Basic Tutorial (라이언 그리기)[CSS Drawing] Basic Tutorial (라이언 그리기)
[CSS Drawing] Basic Tutorial (라이언 그리기)
 

191011 SVG를 배경이미지로 활용한 아이콘 삽질기 - 코인원 오혜진 (W3C HTML5 Conference)

  • 2. @zineeworld 오늘 이야기 하고 싶은 것 1. 아이콘 폰트에 대한 소개 2. CSS로 그린 간단한 아이콘 3. background-image: url(‘SVG 코드’)
  • 4. @zineeworld 쉽게 생각하면 Bootstrap Glyphicon, Font Awesome 참고 : https://webdir.tistory.com/476
  • 6. @zineeworld 아이콘 폰트의 장점 1. 클래스명으로 쉽게 아이콘을 불러올 수 있다. 2. 벡터 그래픽을 이용하기 때문에 사이즈 변경이 용이하다. 3. 일반 텍스트에 적용할 수 있는 CSS를 사용할 수 있다.
  • 7. @zineeworld 코인원 아이콘폰트 제작 https://icomoon.io/ SVG 파일로 추출된 아이콘들을 icomoon 사이트를 통해 아이콘폰트로 제작합니다. 코인원에서는 디자이너님께서 해당 작업을 해주고 계십니다.
  • 10. @zineeworld 페이지 내에 반복적으로 링크 연결되는 부분에 > 아이콘이 사용 기존 아이콘폰트를 사용해왔던 방식 그대로 <span class=“glyph-ui-chevron-right”></span>을 적어준다. 적용방법 반복적으로 적어주지 않고 좀 더 단순하고 쉽게 사용할 수는 없을까?
  • 11. @zineeworld 아이콘폰트는 개체마다 고유의 유니코드 값을 가지고 있다 접근1) 아이콘폰트의 유니코드 값을 똑같이 적어주자
  • 12. @zineeworld 아이콘폰트는 개체마다 고유의 유니코드 값을 가지고 있다 접근1) 아이콘폰트의 유니코드 값을 똑같이 적어주자
  • 13. @zineeworld 아이콘폰트는 개체마다 고유의 유니코드 값을 가지고 있다 (문제점) 유니코드 값을 매번 보장 할 수 없다 접근1) 아이콘폰트의 유니코드 값을 똑같이 적어주자
  • 14. @zineeworld 접근2) CSS로 그려볼까? border-right: 1px solid currentColor; border-bottom: 1px solid currentColor; transform: rotate(-45deg); https://codepen.io/zineeworld/pen/ZPxpgp
  • 16. @zineeworld 접근3) SVG 코드를 활용 해볼까? 1. <img src=“icon.svg”> 이미지 파일로 사용한다. 1. 벡터 이미지여서 크기에는 제약이 없으나 색상을 변경하려면 다른 파일이 필요하다.
 2. HTML 코드 안에 <svg ~~~~></svg> 를 넣는다. 1. 1번 방법보다는 하나의 코드로 색상 값을 변경하기는 용이하다. (fill=“color값”) 2. <span class=“glyph-ui-chevron-right”></span> 보다 훨-씬 더 긴 코드를 매번 넣어야 한다. 3. svg 코드에 변경이 생기면 사용하고 있는 모든 곳을 찾아 바꿔줘야 한다. 4. 아이콘 색상을 컨트롤 하는 건 스타일 파일로 통일되어야 하는데, 
 이 방식을 쓰면 html 코드 상의 수정이 필요하다.
 3. CSS로 배경이미지 속성에 svg 코드를 넣는다. 1. background-image: url(data:image/svg+xml, svg코드); 2. 색상 관리를 스타일 파일 한 곳에서 제어가 가능하다. SVG 아이콘을 사용하는 방법
  • 17. @zineeworld 접근3) SVG 코드를 활용 해볼까? 1.SVG 코드를 background-image 에 넣기 1. IE 대응을 위해 SVG 코드를 Data URI 로 변환하기 2. 변환한 Data URI 값을 배경이미지에 넣기
 2.Sass를 통해 색상 변환이 용이한 function 만들기 1. Data URI 에는 hex 값을 넣을 수 없다? 2. rgba의 알파값에 0.999를 주자
 3.SVG 코드를 배경이미지로 활용한 아이콘 완성!
  • 18. @zineeworld <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60"> <polygon fill="black" points="20.62 55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62"> </svg> SVG 코드를 살펴볼까요? 단순한 폴리곤으로 이루어져 있습니다. 접근3) SVG 코드를 활용 해볼까?
  • 19. @zineeworld .icon display: inline-block width: 1em height: 1em background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 60'><polygon fill='rgba(23, 114, 248, 0.999)' points='20.62 55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/></svg>") no-repeat Sass) background-image: url() 에 SVG 코드를 넣어봅시다. 이렇게 해도 대부분의 브라우저에서는 동작하지만 IE 에서는 뜨지 않습니다. 접근3) SVG 코드를 활용 해볼까?
  • 20. @zineeworld 접근3) SVG 코드를 활용 해볼까? https://zineeworld.github.io/demo/svg_fonticon_test.html Windows (좌측 상단부터 시계방향으로 크롬 >> 파이어폭스 >> Edge >> IE11) MacOS (좌측부터 크롬 >> 사파리 >> 파이어폭스) IE에서는 Data URI로 변환해서 넣은 코드만 정상 노출됨 > : Data URI > : SVG
  • 21. @zineeworld SVG → Data URI 변환 방법 접근3) SVG 코드를 활용 해볼까? https://runkit.com/zineeworld/convert-svg-to-data-uri
  • 22. @zineeworld 접근3) SVG 코드를 활용 해볼까? .icon display: inline-block width: 1em height: 1em background: url(“data:image/ svg+xml,data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 60'%3E%3Cpolygon fill='black' points='20.62 55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/%3E%3C/svg%3E ") no-repeat Sass) background-image: url() 에 변환한 Data URI 코드를 넣어봅시다.
  • 23. @zineeworld 접근3) SVG 코드를 활용 해볼까? @function svgIcon($color) $icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/ %3E%3C/svg%3E" @return url($icon) .icon display: inline-block width: 1em height: 1em background: svgIcon(#1772f8) no-repeat Sass를 통해 색상 변환이 용이한 function 만들기
  • 24. @zineeworld 접근3) SVG 코드를 활용 해볼까? @function svgIcon($color) $icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/ %3E%3C/svg%3E" @return url($icon) .icon display: inline-block width: 1em height: 1em background: svgIcon(#1772f8) no-repeat Sass를 통해 색상 변환이 용이한 function 만들기 (문제점) fill 값에는 hex 코드를 넣을 수 없다!!
  • 25. @zineeworld 접근3) SVG 코드를 활용 해볼까? @function svgIcon($color) $color: rgba($color, 1.0) $icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/ %3E%3C/svg%3E" @return url($icon) .icon display: inline-block width: 1em height: 1em background: svgIcon(#1772f8) no-repeat Sass를 통해 색상 변환이 용이한 function 만들기 <<< 이렇게 하면 될 줄 알았으나 또 안 됨…
  • 26. @zineeworld 접근3) SVG 코드를 활용 해볼까? @function svgIcon($color) $color: rgba($color, 1.0) $icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/ %3E%3C/svg%3E" @return url($icon) .icon display: inline-block width: 1em height: 1em background: svgIcon(#1772f8) no-repeat Sass를 통해 색상 변환이 용이한 function 만들기 (문제점) rgba(#ffffff, 1.0) = #ffffff rgba(#ffffff, 1.0) != rgba(255,255,255,1.0)
  • 27. @zineeworld 접근3) SVG 코드를 활용 해볼까? 그렇다면 알파값에 0.999를 주면 어떨까? 일단 디스플레이 되는 결과값은 오차가 없음을 확인!
  • 28. @zineeworld 접근3) SVG 코드를 활용 해볼까? @function svgIcon($color) $color: rgba($color, 0.999) $icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/ %3E%3C/svg%3E" @return url($icon) .icon display: inline-block width: 1em height: 1em background: svgIcon(#1772f8) no-repeat Sass를 통해 색상 변환이 용이한 function 만들기 드디어 완성!
  • 29. @zineeworld 접근3) SVG 코드를 활용 해볼까? @function svgIcon($color) $color: rgba($color, 0.999) $icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 60'%3E%3Cpolygon fill='#{$color}' points='20.62 55.62 45.74 30.5 20.62 5.38 16.38 9.62 37.26 30.5 16.38 51.38 20.62 55.62'/ %3E%3C/svg%3E" @return url($icon) .icon display: inline-block width: 1em height: 1em background: svgIcon(#1772f8) no-repeat &:hover background: svgIcon(#000000) no-repeat Sass를 통해 색상 변환이 용이한 function 만들기 hover시 변경색은 이렇게 지정 // SVG 코드가 background-image 값으로 들어간 경우 currentColor 사용불가 // fill='currentColor' 라고 적히나 동작하지 않음, 단순 문자열이 되어버림