28
Vector Rendering in HTML

Vector rendering in html

Embed Size (px)

DESCRIPTION

SVG/VML 크로스 브라우징 이슈 몇 개를 소개합니다.

Citation preview

Page 1: Vector rendering in html

Vector Rendering in HTML

 

Page 2: Vector rendering in html

IIImmmaaagggeee

l 정보집적도

l 데이터의 시각화

l 화려함 & 미려함

CCCSSSSSS   &&&   TTTyyypppooogggrrraaappphhhyyy

l 가벼움

l 깔끔함

l 일관성있음

Typography vs. Image

기기, 네트워크, 브라우저 성능/유형에 따라         달라지는 트렌드...

Page 3: Vector rendering in html

그러나...

대체 불가능한 상황은존재하는 법!!

Page 4: Vector rendering in html

SVG(Scalable Vector Graphics)1. W3C 주도하에 고안된 오픈 "표준" 벡터 그래픽 형식

2. XML 기반

3. 2D geometric transform 지원

4. filter 지원

5. animation 지원

Page 5: Vector rendering in html

SVG(Scalable Vector Graphics)<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"

"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><<<sssvvvggg xmlns="http://www.w3.org/2000/svg"                          xmlns:xlink="http://www.w3.org/1999/xlink"                          xmlns:ev="http://www.w3.org/2001/xml-events"                          version="1.1" baseProfile="full" version="1.1" baseProfile="full"

                      width="800mm" height="600mm">        <!-- blahblah --><<</// sssvvvggg>>>

Page 6: Vector rendering in html

VML(Vector Markup Language)1. OOXML 표준 및 ECMA-376

2. "역시나" XML 기반

3. legacy등을 이유로 웹표준 채택 안됨

4. M$ Office 문서 및 Internet Explorer 8 이하 버전에서 사용

5. formula 지원

Page 7: Vector rendering in html

VML(Vector Markup Language)<html xxxmmmlllnnnsss:::vvv==="""uuurrrnnn:::sssccchhheeemmmaaasss---mmmiiicccrrrooosssooofffttt---cccooommm:::vvvmmmlll"""><head>    <style> vvv\\\ :::***   {{{   bbbeeehhhaaavvviiiooorrr:::   uuurrrlll(((###dddeeefffaaauuulllttt###VVVMMMLLL)));;;   }}} </style></head><body>    <v:line from="10pt,10pt" to="100pt,10pt" strokecolor="red"        strokeweight="3pt" href="http://red"/>    <v:line from="100pt,10pt" to="10pt,100pt" strokecolor="black"         strokeweight="2pt">            <v:stroke dashstyle="dash"/>    </v:line></body></html></html>

Page 8: Vector rendering in html

.vs <canvas> (HTML5)1. 각 도형 요소가 DOM element로 기억됨

2. canvas는 raster 기반

3. HTML5를 지원 안하는 브라우저

Page 9: Vector rendering in html

Quick Diff....tttyyypppeee SSSVVVGGG VVVMMMLLL

직선 <line> <v:line>

원 <circle><v:oval>

타원 <ellipse>

사각형 <rect> <v:rect>

모서리가 둥근 사각형 - <v:roundrect>

다각형 <polygon> -

꺾은선 <polyline> <v:polyline>

원호 - <v:arc>

곡선 - <v:curve>

텍스트 <text> -

자유도형 <path> <v:path>

         

                 

Page 10: Vector rendering in html
Page 11: Vector rendering in html

설마 그럴리가....

Page 12: Vector rendering in html

지금부터 살펴볼 내용1. 'path' only!

2. viewport vs coordinate

3. anti-aliasing

4. event-handling

5. and more issues...

Page 13: Vector rendering in html

path로 대동단결

<svg><path d="...."/></svg>

<v:shape path="....."/>

<v:path m="....."/>

1. VML/SVG간 지원/미지원 도형 엘리먼트가 조금씩 있음

2. <path> 또는 <v:path>를 이용하면 거의 모든 도형 공통 대응 가능

§ svg

§ vml

Page 14: Vector rendering in html

path commandscccooommmmmmaaannnddd SSSVVVGGG VVVMMMLLLmove to M/m mline to L/l lcurve to (cubic bezier) C/c ccurve to (quadratic bezier) Q/q qbarc to A/a at/waclose path Z x/xeseparator(args) whitespace comma

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Page 15: Vector rendering in html

문제는 arc!1. SVG는 인자를 통해 회전 방향을 결정

2. VML은 command 자체가 분리!

Page 16: Vector rendering in html

viewport vs. coordinate

<svg viewbox="0 0 100000 100000">

<v:path coordsize="100000 100000"/>

§ SVG

§ VML

Page 17: Vector rendering in html

viewport vs. coordinate

<svg viewbox="0 0 100000 100000">

<v:path coordsize="100000 100000"/>

§ SVG

§ VML element bound에 대응하는 가상의 좌표값

element size가 총 몇등분되는지

Page 18: Vector rendering in html

viewport vs. coordinate

SVGVML

Page 19: Vector rendering in html

viewport vs. coordinate

각 path 좌표

재계산

Page 20: Vector rendering in html

anti-aliasing§ 대개의 브라우저는 기본 지원

§ 특수한 상황에서는 꺼 주어야 보기에 더 좋음

§ 막대 차트

§ 수직/수평선

Page 21: Vector rendering in html

anti-aliasing

<path shape-rendering = "crispEdges"/>

elem.style.shapeRendering = "crispEdges";

path { shape-rendering : crispEdges; } 

<v:shape style="antialias : false"/>

v\:* { antialias : false; }

elem.style.antialias = "false";

§ SVG

§ VML

Page 22: Vector rendering in html

anti-aliasing

<path shape-rendering = "crispEdges"/>

elem.style.shapeRendering = "crispEdges";

path { shape-rendering : crispEdges; } 

<v:shape style="antialias : false"/>

v\:* { antialias : false; }

elem.style.antialias = "false";

§ SVG

§ VML

IE7 이하에서는 anti-alia

sing을 끄면 더 느림

(응??)

Page 23: Vector rendering in html

event-handling

cccllliiiccckkk!!!

ssseeellleeecccttteeeddd???

<SVG> or <VML>,whatever it is...

BBBOOOOOOOOO~~~!!!

Page 24: Vector rendering in html

event-handling(SVG)

cccllliiiccckkk!!!

pointer-events : { auto / none /    visiblePainted / visibleFill /    visibleStroke / painted /    fill / stroke / all / inherit }

Page 25: Vector rendering in html

event-handling(VML)

cccllliiiccckkk!!!

* a.k.a 밑장빼기!

if(el.className!="WRRRYYY") {    el.style.display = "none";    var elNext =      document.elementFromPoint(x, y);    elNext.fireEvent("onclick", evt);}

Page 26: Vector rendering in html

more issuesSSSVVVGGG VVVMMMLLL

fill-rule 기본 nonzero, 변경 가능 even-odd

radial gradient 도형의 외각에 따라 다르게 표현 말 그대로 원형

start/end arrow 별도의 marker def. 필요 기본 속성으로 지원

stroke-weight viewbox size와 관련있음 coordsize와 무관

css attributes elem.style.attr로 지정가능 대부분 read-only

animation 지원함 눈물부터 닦고 ㅠ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Page 27: Vector rendering in html

bonus : raphaelJS§ http://raphaeljs.com/

§ VML/SVG 크로스 브라우징 지원

§ try yourself!

Page 28: Vector rendering in html

이번엔 진짜!

[email protected]/overockaffefacebook.com/overockaffe