path는 경로라는 의미로 종이 위에 펜을 두고, 펜을 움직여 그 경로를 모양으로 한다고 생각하면 된다.
핵심적인 속성은 d가 있다.
이 d속성을 이용하여 경로를 설정하게 된다.
d
d의 속성은 다음과 같다.
Move To: M, m
Line To: L, l, H, h, V, v
Cubic Bézier Curve: C, c, S, s
Quadratic Bézier Curve: Q, q, T, t
Elliptical Arc Curve: A, a
ClosePath: Z, z
사실 d3를 다루며 다른 도형에 대해선 이해할 수 있어도, 이 path 도형을 이해하는데에는 좀 오랜 시간이 걸렸다. 그래서 다시 하나씩 정리해보았다.
1. Move To
펜을 들어 지정된 곳에 놓는 것으로 생각할 수 있다. 즉 현재 지점을 이동하는 거을 의미한다.
Command
Parameters
Notes
M
(x,y)+
현재 지점을 x,y로 옮긴다.
m
(dx,dy)+
현재 경로를 (curX,curY)라고 할 때 현재 지점을 (curX+dx,curY+dy)로 옮긴다.
2. Line To
선을 그리는 정의이다.
Command
Parameters
Notes
L
(x,y)+
현재 지점에서 x,y까지 선을 그린다.
l
(dx,dy)+
현재 경로를 (curX,curY)라고 할 때 현재 지점에서 (curX+dx,curY+dy)까지 선을 그린다.
H
x+
현재 지점에서 x,y까지 수평선을 그린다.
h
(dx,dy)+
현재 경로를 (curX,curY)라고 할 때 현재 지점에서 (curX+dx,curY+dy)까지 수평선을 그린다.
V
(x,y)+
현재 지점에서 x,y까지 수직선을 그린다.
v
(dx,dy)+
현재 경로를 (curX,curY)라고 할 때 현재 지점에서 (curX+dx,curY+dy)까지 수직선을 그린다.
3. Cubic Bézier Curve
4개의 점을 사용하는 부드러운 곡선 정의이다.
시작점 (current point) (Po = {xo, yo})
끝점 (Pn = {xn, yn})
시작 쪽 제어 점 (Pcs = {xcs, ycs}) (controls curvature near the start of the curve)
끝 쪽 제어 점 (Pce = {xce, yce}) (controls curvature near the end of the curve)
같은 시간동안 시작 점에서 시작 쪽 제어 점으로 움직이는 점, 시작 쪽 제어 점에서 끝 쪽 제어 점으로 움직이는 점, 끝 쪽 제어 점에서 끝 점으로 움직이는 점을 각각 Pstarttocontrol, Pcontroltocontrol, Pcontroltoend으로 정의할 수 있다.
또한 PstarttoControl과 Pcontroltocontrol, Pcontrol과 Pcontroltoend을 연결하고 같은 시간동안 각각의 선의 시작점에서부터 끝 점까지 움직이는 점을 정의할 수 있다.
이러한 점을 각각 Pbezierstart, Pbezierend라고 하면 같은 시간동안 이 점의 움직임을 연결한 곡선이 Bezier 곡선이다.
말로 표현하면 좀 어려운데, Ref를 참조하면 이해가 더 쉽다.
Command
Parameters
Notes
C
(x1,y1,x2,y2,x,y)+
현재 지점에서 x,y까지 3차 베지어 곡선을 그린다. 끝 점은 x,y 시작 제어 점은 x1,y1, 끝 제어 점은 x2,y2로 정의된다.
c
(dx1,dy1,dx2,dy2,dx,dy)+
현재 지점에서 끝점까지 3차 베지어 곡선을 그린다. 현재 지점을 (curX,curY) 라고 할 때 끝 점은 (curX+dx,curY+dy), 시작 제어 점은 (curX+dx1,curY+y1), 끝 제어 점은 (curX+dx2,curY+dy2)로 정의된다.
S
( x2, y2, x, y)+
C와 똑같이 동작한다. 다만 시작점을 이전 베지어곡선의 끝점으로 한다.
s
( dx2, dy2, dx, dy)+
c와 똑같이 동작한다. 다만 시작점을 이전 베지어곡선의 끝점으로 한다.
4. Quadratic Bézier Curve
세 점을 사용하는 2차 베지어 곡선이다.
시작 점 Po = {xo, yo}
끝 점 Pn = {xn, yn}
제어 점 Pc = {xc, yc} (controls curvature)
Command
Parameters
Notes
Q
(x1,y1,x,y)+
현재 지점에서 x,y까지 2차 베지어 곡선을 그린다.
q
(dx1,dy1,dx,dy)+
현재 지점에서 끝점까지 3차 베지어 곡선을 그린다. 현재 지점을 (curX,curY) 라고 할 때 끝 점은 (curX+dx,curY+dy)으로 정의된다.
현재 지점에서 x,y까지 호를 그린다. rx,ry는 타원의 두 반지름이다. angle은 x축에 대한 타원의 회전 각도이다. large-arc-flag, sweep-flag는 4개의 호가 가능하므로 어떤 호를 그릴지 선택한다. large-arc-flog는 큰 호(1) 작은호(0)을 선택할 수 있다. sweep-flag는 시계 방향 호(1) 반시계 방향 호(0)을 선택할 수 있다. 좌표 x,y는 다음 명령의 새 현재 점이 된다.
HTML5 이전에는 a태그는 오직 인라인 요소만 포함할 수 있었지만 HTML5 이후로는 a 태그는 transparent인 태그라 인라인 요소와 블록 요소 둘 다 포함할 수 있다.
Although previous versions of HTML restricted the a element to only containing phrasing content (essentially, what was in previous versions referred to as “inline” content), the a element is now transparent; that is, an instance of the a element is now allowed to also contain flow content (essentially, what was in previous versions referred to as “block” content)—if the parent element of that instance of the a element is an element that is allowed to contain flow content.
특정 요소 foo가 transparent면 다음과 같은 속성을 가진다.
foo 요소가 콘텐츠 모델이 flow 요소를 포함하도록 허용 된 상위 요소 baz 의 자식인 경우 foo 요소의 콘텐츠도 flow 요소 를 포함할 수 있습니다 .
foo 요소가 콘텐츠 모델이 phrasing 요소를 포함하도록 허용 된 상위 요소 baz 의 자식인 경우 foo 요소의 콘텐츠 도 phrasing 요소를 포함할 수 있습니다 .