From db94e7ced96ea390fc72fa4280c1c8e17f732023 Mon Sep 17 00:00:00 2001 From: Elex Date: Fri, 14 Mar 2025 13:00:37 +0900 Subject: [PATCH] 2025-03-14T13:00:37 --- doc/svg/00_svg.md | 205 ++++++++++++++++++ doc/svg/02_SVG의 기본 구조와 핵심 요소.md | 148 +++++++++++++ doc/svg/03_경로.md | 117 ++++++++++ doc/svg/04_스타일링.md | 128 +++++++++++ doc/svg/05_텍스트와 아이콘.md | 154 +++++++++++++ doc/svg/06_SVG 애니메이션.md | 155 +++++++++++++ doc/svg/07_인터랙티브 SVG.md | 168 ++++++++++++++ doc/svg/08_SVG 최적화.md | 148 +++++++++++++ doc/svg/11_SVG 기반 아이콘 시스템.md | 159 ++++++++++++++ doc/svg/12_SVG를 활용한 대시보드 UI.md | 205 ++++++++++++++++++ doc/svg/13_반응형 SVG 디자인 패턴.md | 192 ++++++++++++++++ .../14_실무에서 자주 쓰이는 SVG 활용 사례.md | 158 ++++++++++++++ doc/svg/README.md | 75 +++++++ 13 files changed, 2012 insertions(+) create mode 100644 doc/svg/00_svg.md create mode 100644 doc/svg/02_SVG의 기본 구조와 핵심 요소.md create mode 100644 doc/svg/03_경로.md create mode 100644 doc/svg/04_스타일링.md create mode 100644 doc/svg/05_텍스트와 아이콘.md create mode 100644 doc/svg/06_SVG 애니메이션.md create mode 100644 doc/svg/07_인터랙티브 SVG.md create mode 100644 doc/svg/08_SVG 최적화.md create mode 100644 doc/svg/11_SVG 기반 아이콘 시스템.md create mode 100644 doc/svg/12_SVG를 활용한 대시보드 UI.md create mode 100644 doc/svg/13_반응형 SVG 디자인 패턴.md create mode 100644 doc/svg/14_실무에서 자주 쓰이는 SVG 활용 사례.md create mode 100644 doc/svg/README.md diff --git a/doc/svg/00_svg.md b/doc/svg/00_svg.md new file mode 100644 index 0000000..9ae5bbc --- /dev/null +++ b/doc/svg/00_svg.md @@ -0,0 +1,205 @@ +SVG의 모든 요소와 그 설명을 표로 정리한 후, 각 요소별 속성을 속성과 설명이 포함된 표로 정리하겠습니다. + +--- + +## 1. SVG 요소 목록 + +| 요소 | 설명 | +|------|------| +| `` | SVG 그래픽을 정의하는 루트 요소 | +| `` | 여러 요소를 그룹화하는 컨테이너 | +| `` | 재사용 가능한 요소(예: 패턴, 필터)를 정의하는 요소 | +| `` | 독립적인 그래픽을 정의하고 `` 요소로 재사용할 수 있도록 함 | +| `` | ``이나 다른 요소를 참조하여 재사용하는 요소 | +| `` | 사각형을 그림 | +| `` | 원을 그림 | +| `` | 타원을 그림 | +| `` | 한 점에서 다른 점까지 선을 그림 | +| `` | 여러 선을 연결한 열린 경로를 그림 | +| `` | 여러 선을 연결한 닫힌 도형을 그림 | +| `` | 복잡한 곡선 및 선을 그릴 수 있는 자유로운 경로를 정의 | +| `` | 텍스트를 그림 | +| `` | `` 내에서 텍스트의 위치나 스타일을 변경하는 요소 | +| `` | 경로를 따라 텍스트를 배치하는 요소 | +| `` | 외부 이미지를 SVG 내에 포함 | +| `` | 일부 영역만 표시되도록 마스크 역할을 하는 요소 | +| `` | 반투명한 마스킹 효과를 줄 때 사용 | +| `` | 반복되는 패턴을 정의 | +| `` | 선형 그라디언트를 정의 | +| `` | 방사형 그라디언트를 정의 | +| `` | 그라디언트의 색상 지점을 정의 | +| `` | 블러, 그림자 등의 그래픽 효과를 정의 | +| `` | 블러 효과를 적용 | +| `` | 요소의 위치를 이동 | +| `` | 색상을 변환 | +| `` | 속성에 애니메이션 효과를 추가 | +| `` | 변형(이동, 회전, 크기 변경) 애니메이션을 적용 | +| `` | 특정 속성을 일정 시간 동안 변경 | +| `` | SVG 내부에서 HTML 요소를 사용할 수 있도록 함 | + +--- + +## 2. 요소별 속성 목록 + +### 2.1 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `width` | SVG의 너비 | +| `height` | SVG의 높이 | +| `viewBox` | 좌표 시스템을 정의하는 영역 (`min-x min-y width height`) | +| `preserveAspectRatio` | 화면 크기에 따른 비율 조정 방식 | + +--- + +### 2.2 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `transform` | 그룹에 변환 효과(이동, 회전 등) 적용 | +| `fill` | 그룹 내 요소의 기본 색상 지정 | +| `stroke` | 그룹 내 요소의 테두리 색상 지정 | + +--- + +### 2.3 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `x` | 사각형의 좌측 상단 x 좌표 | +| `y` | 사각형의 좌측 상단 y 좌표 | +| `width` | 사각형의 너비 | +| `height` | 사각형의 높이 | +| `rx` | 사각형 모서리의 x 방향 둥근 정도 | +| `ry` | 사각형 모서리의 y 방향 둥근 정도 | + +--- + +### 2.4 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `cx` | 원의 중심 x 좌표 | +| `cy` | 원의 중심 y 좌표 | +| `r` | 원의 반지름 | + +--- + +### 2.5 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `cx` | 타원의 중심 x 좌표 | +| `cy` | 타원의 중심 y 좌표 | +| `rx` | x 방향 반지름 | +| `ry` | y 방향 반지름 | + +--- + +### 2.6 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `x1` | 선의 시작 x 좌표 | +| `y1` | 선의 시작 y 좌표 | +| `x2` | 선의 끝 x 좌표 | +| `y2` | 선의 끝 y 좌표 | + +--- + +### 2.7 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `points` | 여러 점을 정의 (`x1,y1 x2,y2 ...`) | + +--- + +### 2.8 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `points` | 다각형을 구성하는 점 좌표 리스트 | + +--- + +### 2.9 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `d` | 경로 데이터 (M, L, C, Q 등 사용) | +| `fill-rule` | 내부 영역 채우기 규칙 (`nonzero` 또는 `evenodd`) | + +--- + +### 2.10 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `x` | 텍스트의 시작 x 좌표 | +| `y` | 텍스트의 시작 y 좌표 | +| `dx` | x 방향 오프셋 | +| `dy` | y 방향 오프셋 | +| `text-anchor` | 텍스트 정렬 (`start`, `middle`, `end`) | + +--- + +### 2.11 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `href` | 이미지 경로 (SVG 2.0부터는 `xlink:href` 대신 사용) | +| `x` | 이미지의 x 좌표 | +| `y` | 이미지의 y 좌표 | +| `width` | 이미지 너비 | +| `height` | 이미지 높이 | + +--- + +### 2.12 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `clipPathUnits` | 좌표 시스템 단위 (`userSpaceOnUse` 또는 `objectBoundingBox`) | + +--- + +### 2.13 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `maskUnits` | 좌표 단위 (`userSpaceOnUse` 또는 `objectBoundingBox`) | +| `maskContentUnits` | 마스크 내용의 좌표 단위 | + +--- + +### 2.14 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `x1`, `y1` | 그라디언트 시작점 좌표 | +| `x2`, `y2` | 그라디언트 끝점 좌표 | + +--- + +### 2.15 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `cx`, `cy` | 방사형 그라디언트 중심 좌표 | +| `r` | 반지름 | + +--- + +### 2.16 `` 요소 속성 + +| 속성 | 설명 | +|------|------| +| `attributeName` | 애니메이션할 속성 이름 | +| `from` | 애니메이션 시작 값 | +| `to` | 애니메이션 종료 값 | +| `dur` | 애니메이션 지속 시간 | + +--- + +이 외에도 여러 속성이 있지만, 주요한 요소와 속성을 정리했습니다. 필요한 경우 추가 정보를 요청해 주세요! \ No newline at end of file diff --git a/doc/svg/02_SVG의 기본 구조와 핵심 요소.md b/doc/svg/02_SVG의 기본 구조와 핵심 요소.md new file mode 100644 index 0000000..456f3d7 --- /dev/null +++ b/doc/svg/02_SVG의 기본 구조와 핵심 요소.md @@ -0,0 +1,148 @@ +### SVG의 기본 구조와 주요 요소들 + +SVG(Scalable Vector Graphics)는 XML 기반의 벡터 그래픽 포맷으로, 웹에서 확장 가능한 그래픽을 표현하는 데 사용됩니다. SVG는 크기를 변경해도 품질이 유지되며, 텍스트로 작성되기 때문에 코드로 직접 편집하거나 스타일링할 수 있는 장점이 있습니다. 아래는 SVG의 기본 구조와 주요 요소들을 예시와 함께 설명한 내용입니다. + +#### SVG 기본 구조 +SVG 파일은 `` 태그로 시작하며, 일반적으로 XML 선언과 함께 작성됩니다. 기본 구조는 다음과 같습니다: + +```xml + + + + +``` + +- `width`와 `height`: SVG 캔버스의 크기를 정의합니다. +- `xmlns`: SVG 네임스페이스를 지정하여 브라우저가 이를 SVG로 인식하게 합니다. + +#### 주요 요소들 +1. **``**: 최상위 컨테이너로, 그래픽의 캔버스를 정의합니다. + ```xml + + + + ``` + 위 코드는 100x100 크기의 캔버스에 중심이 (50, 50)이고 반지름이 40인 빨간 원을 그립니다. + +2. **``**: 요소들을 그룹화하여 스타일이나 변환을 일괄 적용할 때 사용합니다. + ```xml + + + + + + + ``` + `` 안의 모든 도형에 `fill="blue"`가 적용됩니다. + +3. **``**: 재사용 가능한 정의(예: 패턴, 그라디언트)를 저장합니다. `` 안의 요소는 직접 렌더링되지 않습니다. + ```xml + + + + + + + + + + ``` + 그라디언트를 정의하고 사각형에 적용했습니다. + +4. **``**: 재사용 가능한 그래픽 템플릿을 정의합니다. `` 안에 사용되며, ``로 호출됩니다. + ```xml + + + + + + + + + ``` + 별 모양을 정의하고 재사용합니다. + +5. **``**: ``이나 다른 요소를 참조하여 재사용합니다. + ```xml + + + + + + + + ``` + 동일한 사각형을 다른 위치와 색상으로 재사용합니다. + +--- + +### 뷰박스(ViewBox)와 좌표 시스템 + +#### 뷰박스(ViewBox) +`viewBox` 속성은 SVG 캔버스의 보이는 영역과 좌표계를 정의합니다. 이는 "min-x, min-y, width, height" 형식으로 지정되며, 캔버스의 크기(`width`, `height`)와 독립적으로 내부 콘텐츠의 배율과 위치를 조정합니다. + +```xml + + + +``` +- `viewBox="0 0 100 100"`: 좌표계가 0,0에서 시작해 100x100 단위로 정의됨. +- 실제 캔버스는 200x200px이지만, `viewBox`에 맞춰 콘텐츠가 확대됩니다. + +`viewBox`를 사용하면 확대/축소나 특정 영역 포커싱이 가능합니다: +```xml + + + +``` +위 예시는 원의 일부만 보이도록 50x50 영역을 확대합니다. + +#### 좌표 시스템 +SVG의 좌표계는 왼쪽 위가 (0,0)이며, x는 오른쪽으로, y는 아래로 증가합니다. 단위는 기본적으로 사용자 단위(user units)로, `viewBox`에 따라 상대적으로 해석됩니다. + +--- + +### 기본 도형들 + +SVG는 다양한 기본 도형을 제공하며, 속성을 통해 크기, 위치, 스타일을 정의합니다. + +1. **``**: 사각형을 그립니다. + - 속성: `x`, `y` (왼쪽 위 좌표), `width`, `height`, `rx`, `ry` (모서리 둥글기) + ```xml + + ``` + +2. **``**: 원을 그립니다. + - 속성: `cx`, `cy` (중심 좌표), `r` (반지름) + ```xml + + ``` + +3. **``**: 타원을 그립니다. + - 속성: `cx`, `cy` (중심), `rx`, `ry` (가로/세로 반지름) + ```xml + + ``` + +4. **``**: 직선을 그립니다. + - 속성: `x1`, `y1` (시작점), `x2`, `y2` (끝점) + ```xml + + ``` + +5. **``**: 연속된 선분을 그립니다. + - 속성: `points` (점들의 좌표 목록) + ```xml + + ``` + +6. **``**: 다각형을 그립니다. 마지막 점이 첫 점과 자동 연결됩니다. + - 속성: `points` + ```xml + + ``` + +--- + +### 결론 +SVG는 ``를 기반으로 다양한 요소와 도형을 조합해 그래픽을 생성합니다. `viewBox`를 통해 유연한 크기 조정이 가능하고, 좌표계를 활용해 정밀한 위치 지정이 가능합니다. 위의 기본 도형과 요소들을 조합하면 간단한 아이콘부터 복잡한 일러스트까지 만들 수 있습니다. SVG의 강력함은 코드로 직접 제어할 수 있다는 점에 있으며, CSS나 JavaScript와 결합하면 동적이고 인터랙티브한 그래픽도 구현할 수 있습니다. \ No newline at end of file diff --git a/doc/svg/03_경로.md b/doc/svg/03_경로.md new file mode 100644 index 0000000..8cd4060 --- /dev/null +++ b/doc/svg/03_경로.md @@ -0,0 +1,117 @@ +### SVG의 `` 요소와 `d` 속성 + +SVG에서 `` 요소는 가장 강력하고 유연한 도구로, 직선, 곡선, 복잡한 모양을 자유롭게 그릴 수 있습니다. ``의 핵심은 `d` 속성(Data)으로, 이 속성에 일련의 명령과 좌표를 작성해 경로를 정의합니다. `d` 속성은 명령어와 숫자 쌍(좌표 또는 매개변수)으로 구성되며, 이를 통해 간단한 선부터 복잡한 곡선까지 표현할 수 있습니다. + +#### 기본 구조 +```xml + + + +``` +위 예시는 (10, 10)에서 시작해 (100, 100)까지 직선을 그립니다. + +--- + +### `d` 속성의 명령어 정리 + +`d` 속성에서 사용되는 명령어는 대문자(절대 좌표)와 소문자(상대 좌표)로 나뉩니다. 아래 표는 주요 명령어와 설명을 정리한 것입니다. + +| 명령어 | 설명 | +|--------|---------------------------------------------------------------------------------------| +| `M` / `m` | **Move to**: 펜을 (x, y)로 이동. 경로의 시작점을 지정. 예: `M10 10` (절대), `m10 10` (상대). | +| `L` / `l` | **Line to**: 현재 위치에서 (x, y)까지 직선을 그림. 예: `L100 100`. | +| `H` / `h` | **Horizontal line to**: 수평선을 그림. x값만 지정. 예: `H50`. | +| `V` / `v` | **Vertical line to**: 수직선을 그림. y값만 지정. 예: `V50`. | +| `Z` / `z` | **Close path**: 현재 경로를 닫음(시작점으로 직선 연결). | +| `C` / `c` | **Cubic Bézier curve**: 3차 베지어 곡선을 그림. (x1 y1, x2 y2, x y)로 제어점과 끝점 지정. | +| `S` / `s` | **Smooth cubic Bézier**: 이전 `C`의 두 번째 제어점을 반영해 부드럽게 이어지는 곡선. (x2 y2, x y). | +| `Q` / `q` | **Quadratic Bézier curve**: 2차 베지어 곡선. (x1 y1, x y)로 제어점과 끝점 지정. | +| `T` / `t` | **Smooth quadratic Bézier**: 이전 `Q`의 제어점을 반영해 부드럽게 이어짐. (x y). | +| `A` / `a` | **Arc**: 타원형 호를 그림. (rx ry x-axis-rotation large-arc-flag sweep-flag x y). | + +- **대문자**: 절대 좌표(캔버스 기준). +- **소문자**: 상대 좌표(현재 위치 기준). + +--- + +### 베지어 곡선(Bézier Curves) + +#### 1. 3차 베지어 곡선 (`C`) +3차 베지어 곡선은 두 개의 제어점과 끝점을 사용해 부드러운 곡선을 만듭니다. +```xml + + + +``` +- `M10 150`: 시작점 (10, 150). +- `C50 50, 150 50, 190 150`: 첫 제어점 (50, 50), 두 번째 제어점 (150, 50), 끝점 (190, 150). + +#### 2. 2차 베지어 곡선 (`Q`) +2차 베지어 곡선은 하나의 제어점을 사용하며, 더 단순한 곡선을 그립니다. +```xml + + + +``` +- `Q100 50 190 150`: 제어점 (100, 50), 끝점 (190, 150). + +#### 3. 부드러운 연결 (`S`, `T`) +`S`와 `T`는 이전 곡선의 제어점을 반영해 연속적인 곡선을 만듭니다. +```xml + + + +``` +- `S250 250, 300 150`: 첫 번째 `C`의 두 번째 제어점이 반영되어 부드럽게 이어짐. + +--- + +### 아크(Arc, `A`) + +`A` 명령어는 타원형 호를 그리며, 복잡한 매개변수를 사용합니다. +- 형식: `A rx ry x-axis-rotation large-arc-flag sweep-flag x y` + - `rx`, `ry`: 타원의 가로/세로 반지름. + - `x-axis-rotation`: x축 기준 회전 각도. + - `large-arc-flag`: 0(작은 호) 또는 1(큰 호). + - `sweep-flag`: 0(반시계), 1(시계 방향). + - `x`, `y`: 끝점 좌표. + +```xml + + + +``` +- `(50, 150)`에서 `(150, 150)`까지 반지름 50인 호를 시계 방향으로 그림. + +--- + +### 실무에서 자주 사용되는 `` 예시 + +1. **아이콘 (간단한 화살표)** + ```xml + + + + ``` + 수평선(`H`)과 꺾인 선(`L`)으로 화살표를 표현. + +2. **파도 모양 (베지어 곡선 활용)** + ```xml + + + + ``` + `Q`와 `T`로 부드러운 파도 형태를 그림. + +3. **하트 모양 (복합 경로)** + ```xml + + + + ``` + `C`와 `Z`를 사용해 하트 모양을 완성. + +--- + +### 결론 +SVG의 `` 요소는 `d` 속성을 통해 직선, 베지어 곡선, 아크 등 다양한 형태를 표현할 수 있어 실무에서 아이콘, 로고, 애니메이션 경로 등에 폭넓게 활용됩니다. 베지어 곡선은 부드러운 곡선을, 아크는 원형 경로를 다룰 때 유용하며, 명령어를 조합하면 거의 모든 2D 그래픽을 구현할 수 있습니다. 실무에서는 디자인 툴(예: Adobe Illustrator)로 만든 경로를 SVG로 내보내거나, 직접 코드를 작성해 정밀하게 조정하는 방식으로 사용됩니다. \ No newline at end of file diff --git a/doc/svg/04_스타일링.md b/doc/svg/04_스타일링.md new file mode 100644 index 0000000..c2ba731 --- /dev/null +++ b/doc/svg/04_스타일링.md @@ -0,0 +1,128 @@ +### SVG의 스타일링과 시각적 효과 + +SVG는 벡터 그래픽을 표현하는 강력한 도구로, 다양한 스타일링 속성과 시각적 효과를 통해 모양을 꾸밀 수 있습니다. CSS와 유사한 속성(`fill`, `stroke` 등)을 사용하거나, `