You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`<main>`, `<area>`, `<h1>`, `<h2>`, `<img>`, `<li>`, `<ul>`, `<ol>` 등 의미 있는 컨테이너 요소에는 `button`, `link` 와 같은 상호작용 역할(interactive role)을 부여하면 안 돼요. 의미에 맞는 태그를 사용해야 해요.
Copy file name to clipboardExpand all lines: fundamentals/a11y/semantic/required-label.md
+5-4Lines changed: 5 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,6 +3,7 @@
3
3
인터랙티브 요소(입력 필드, 버튼, 선택 상자 등)에는 반드시 사용자에게 그 목적을 명확히 알려주는 이름이 필요해요. 이름이 없거나 불명확한 요소는 스크린 리더 사용자나 음성 지원 사용자에게 큰 불편을 줄 수 있어요.
4
4
5
5
::: details 인터랙티브 요소 목록
6
+
6
7
| 요소 | 조건 |
7
8
|------|------|
8
9
|`<a>`| - |
@@ -22,7 +23,7 @@
22
23
|`<video>`|`controls` 속성이 있는 경우 |
23
24
:::
24
25
25
-
인터랙티브 요소에 이름을 붙이는 방법은 여러가지가 있는데요. 스크린 리더는 다음 순서대로 이름을 읽습니다:
26
+
인터랙티브 요소에 이름을 붙이는 방법은 여러 가지가 있는데요. 스크린 리더는 다음 순서대로 이름을 읽습니다:
26
27
27
28
1.`aria-labelledby` - 스크린 리더가 가장 먼저 읽는 속성
28
29
2.`aria-label` - `aria-labelledby`가 없을 경우 읽는 속성
@@ -63,7 +64,7 @@ HTML에서 가장 좋은 방법은 `<label>` 요소를 사용해 입력 필드
63
64
<inputid="user-name"type="text" />
64
65
```
65
66
66
-
레이블의 장점은 여러가지가 있어요.
67
+
레이블의 장점은 여러 가지가 있어요.
67
68
68
69
먼저, 스크린 리더 사용자에게 입력 필드의 목적을 분명히 알려줘요. 또 레이블을 클릭해도 연결된 입력 필드에 포커스가 가서, 터치 인터페이스에서 특히 유용해요. 필드에 입력 중에도 항상 표시되어 사용자가 필드 목적을 기억할 수 있고요. 모든 사용자에게 가장 명확한 경험을 제공하는 방식이죠.
69
70
@@ -137,7 +138,7 @@ HTML에서 가장 좋은 방법은 `<label>` 요소를 사용해 입력 필드
137
138
138
139
### 플레이스 홀더의 올바른 사용법
139
140
140
-
플레이스 홀더만으로는 접근성을 보장할 수 없어요. 플레이스 홀더를 사용할 때는 레이블의 대체재가 아니라 보조 수단이라는 점을 기억해 주세요. 입력 형식에 대한 힌트를 제공하는 용도로 사용하는 것이 좋아요.
141
+
플레이스 홀더만으로는 접근성을 보장할 수 없어요. 플레이스 홀더를 사용할 때는 레이블의 대체재가 아니라 보조 수단이라는 점을 기억해 주세요. 입력 형식에 대한 힌트를 제공하는 용도로 사용하는 것이 좋아요.
141
142
142
143
#### ❌ 잘못된 예시: 플레이스 홀더만 사용
143
144
@@ -157,4 +158,4 @@ HTML에서 가장 좋은 방법은 `<label>` 요소를 사용해 입력 필드
Copy file name to clipboardExpand all lines: fundamentals/a11y/structure/button-inside-button.md
+3-4Lines changed: 3 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@
8
8
9
9
다음과 같이 `<a>` 태그 안에 `<button>` 을 출력하는 컴포넌트를 넣는 것은 잘못된 방법이에요. HTML에서는 상호작용하는 요소 안에 또 다른 상호작용 요소를 넣는 걸 허용하지 않기 때문이에요[^1]. 이런 구조에서는 접근성에 문제가 생기고, 브라우저에서 예측하지 못한 동작이 생길 수 있어요.
10
10
11
-
[^1]: https://www.w3.org/TR/2011/WD-html5-20110405/text-level-semantics.html#the-a-element 의 Content model 항목을 참고해주세요.
11
+
[^1]: <https://www.w3.org/TR/2011/WD-html5-20110405/text-level-semantics.html#the-a-element> 의 Content model 항목을 참고해 주세요.
12
12
13
13
```jsx
14
14
<a href="/go-to">
@@ -77,11 +77,12 @@ UI 구성상 다음과 같이 버튼처럼 보이는 카드 안에 또 다른
77
77
outline: 2pxsolidblue;
78
78
}
79
79
```
80
+
80
81
:::
81
82
82
83
## 이런 구조가 왜 문제가 될까요?
83
84
84
-
왜 버튼 안에 버튼을 넣으면 안되는지 자세히 설명해 드릴게요.
85
+
왜 버튼 안에 버튼을 넣으면 안 되는지 자세히 설명해 드릴게요.
85
86
86
87
### 접근성 관점에서의 문제
87
88
@@ -122,5 +123,3 @@ UI 구성상 다음과 같이 버튼처럼 보이는 카드 안에 또 다른
Copy file name to clipboardExpand all lines: fundamentals/a11y/why.md
+3-4Lines changed: 3 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,16 +4,16 @@
4
4
5
5
## 장애인에게 필요한 이유
6
6
7
-
버튼의 색상, 아이콘 형태, 레이아웃 배치, 차트나 이미지 같은 웹 상의 시각적 정보를 볼 수 없는 사용자는 어떻게 웹사이트를 이용할까요? 바로 스크린리더 같은 보조기기를 사용합니다. 이때, 올바른 역할(`role`), 레이블(`label`), 대체 텍스트(`alt`) 같은 접근성 속성이 제공되지 않으면 원하는 정보를 얻지 못하거나, 버튼·링크 같은 상호작용 요소를 놓쳐 웹사이트 사용에 큰 불편을 겪게 돼요.
8
-
7
+
버튼의 색상, 아이콘 형태, 레이아웃 배치, 차트나 이미지 같은 웹 상의 시각적 정보를 볼 수 없는 사용자는 어떻게 웹사이트를 이용할까요? 바로 스크린리더 같은 보조 기기를 사용합니다. 이때, 올바른 역할(`role`), 레이블(`label`), 대체 텍스트(`alt`) 같은 접근성 속성이 제공되지 않으면 원하는 정보를 얻지 못하거나, 버튼·링크 같은 상호작용 요소를 놓쳐 웹사이트 사용에 큰 불편을 겪게 돼요.
8
+
9
9
예를 들어, 단순히 클릭 이벤트만 달아둔 `<div>` 는 스크린리더에서 버튼 요소로 인식되지 않아서 사용자가 해당 기능을 사용할 수 없어요.
10
10
11
11
## 일반 사용자에게도 유용한 이유
12
12
13
13
접근성을 지키면 장애가 없는 일반 사용자도 웹을 더 빠르고 편리하게 이용할 수 있어요. 익숙한 웹 동작이 자연스럽게 제공되기 때문이에요.
14
14
15
15
예를 들어, 링크(`<a>`)를 제대로 사용하면 마우스 오른쪽 버튼으로 '새 창에서 열기', '링크 복사'와 같은 동작을 할 수 있어요. 하지만 단순히 `<div>`나 `<span>`에 클릭 이벤트만 넣으면 이런 기본 기능을 사용할 수 없어요. 또, 폼을 만들 때 올바른 `<form>` 태그와 `<input>`, `<button type="submit">`을 사용하면 사용자가 Enter 키를 눌러 폼을 제출할 수 있어요. 하지만 그렇지 않으면 사용자는 익숙한 동작을 기대할 수 없어요.
16
-
16
+
17
17
또, 키보드를 주로 사용하는 사용자는 Tab 키와 Shift+Tab, Enter, Space, 방향키 등으로 웹사이트를 탐색해요. 버튼이나 링크, 폼 요소에 올바른 역할과 포커스가 지정되어 있지 않으면, 키보드로는 해당 기능을 사용할 수 없어요.
18
18
19
19
다음 이미지는 브라우저에서 링크를 우클릭했을 때 나타나는 컨텍스트 메뉴예요. 링크 요소를 제대로 사용하면 사용자가 기대하는 이런 기본적인 기능들을 모두 사용할 수 있어요.
0 commit comments