# 접근성 고려사항 CMS 기반 웹사이트의 접근성은 [콘텐츠를 적절하게 모델링](content_modeling)하고, [접근성 있는 템플릿 생성](accessibility_in_templates), 그리고 가독성과 접근성 가이드라인을 염두에 둔 [접근성 있는 콘텐츠 작성](authoring_accessible_content)의 문제입니다. Wagtail은 일반적으로 개발자가 콘텐츠 모델링과 프론트엔드 마크업을 제어할 수 있게 하지만, 그럼에도 불구하고 알아야 할 몇 가지 영역이 있으며, 작성자가 가독성 모범 사례를 인식하도록 돕는 방법이 있습니다. 여기서 다루는 것보다 접근성 있는 웹사이트를 구축하는 데 더 많은 내용이 있습니다 - 자세한 정보는 [접근성 리소스](accessibility_resources) 목록을 참조하세요. ```{contents} --- local: depth: 1 --- ``` (content_modeling)= ## 콘텐츠 모델링 사이트의 모델을 정의하는 과정에서 특별히 주의해야 할 영역은 다음과 같습니다: ### 이미지의 대체 텍스트 이미지가 사용되는 모든 곳에서, 콘텐츠 편집자는 이미지를 장식용으로 표시하거나 상황에 맞는 텍스트 대안을 제공할 수 있어야 합니다. 리치 텍스트 편집기의 이미지 임베드는 이 기능을 지원합니다. Wagtail 6.3에서는 StreamField 내 이미지를 위해 이 기능을 제공하는 [`ImageBlock`](streamfield_imageblock)이 추가되었습니다. Wagtail 6.3은 또한 Wagtail 이미지 모델과 `wagtail.images.models.AbstractImage` 를 상속하는 사용자 정의 이미지 모델에 선택적 `description` 필드를 추가했습니다. 이 필드의 텍스트는 리치 텍스트나 ImageBlock에서 이미지를 삽입할 때 기본 대체 텍스트로 제공됩니다. description 필드가 비어 있으면 대신 title 필드가 사용됩니다. 이 동작을 사용자 정의하려면 이미지 모델에서 [`default_alt_text` 속성을 재정의](custom_image_model)하세요. ```{note} 중요한 고려사항 - 대체 텍스트는 이미지가 표시되는 컨텍스트를 기반으로 작성되어야 합니다. - 대체 텍스트 필드를 지정할 때, 편집자가 장식용 이미지에 대체 텍스트를 작성하지 않도록 선택할 수 있게 필드를 선택적으로 만드세요. 이미지는 경우에 따라 장식용일 수도 있고 아닐 수도 있습니다. 예를 들어, 페이지 목록의 썸네일은 종종 장식용으로 간주될 수 있습니다. - 대체 텍스트의 내용이 이미 페이지의 다른 부분에 있다면, 이상적으로는 이미지가 동일한 내용을 반복하지 않아야 합니다. - 적절한 지침으로 `help_text` 를 제공하는 데 시간을 투자하세요. 예를 들어, [대체 텍스트에 관한 확립된 리소스](https://axesslab.com/alt-texts/)에 링크하는 것이 좋습니다. ``` ### 임베드 제목 누락된 임베드 제목은 Wagtail 웹사이트의 접근성 감사에서 흔히 발견되는 실패 사례입니다. 일부 경우에는 Wagtail 임베드의 iframe에 `title` 속성이 설정되지 않습니다. 이는 종종 OEmbed 제공자의 문제입니다. 이는 스크린 리더 사용자에게 매우 문제가 됩니다. 그들은 임베드가 무엇인지, 그리고 상호 작용해야 하는지 여부를 이해하기 위해 제목에 의존합니다. 웹사이트가 제목이 누락된 임베드에 의존하는 경우, 다음 중 하나를 수행하세요: - OEmbed _title_ 필드를 `iframe` 의 `title` 로 추가합니다. - 임베드에 사용자 정의 필수 제목 필드를 추가하고, 이를 `iframe` 의 `title` 로 추가합니다. ### 사용 가능한 제목 수준 Wagtail은 개발자가 [리치 텍스트 기능](rich_text_features)이나 사용자 정의 StreamField 블록을 통해 특정 콘텐츠에 사용할 수 있는 제목 수준을 쉽게 제어할 수 있게 합니다. 두 경우 모두, 페이지의 문서 개요가 논리적이고 순차적일 가능성이 높도록 사용 가능한 제목 수준을 제한하는 데 시간을 투자하세요. 다음과 같은 제한 사항을 고려하세요: - 리치 텍스트에서 `h1` 을 허용하지 마세요. 페이지당 하나의 `h1` 태그만 있어야 하며, 일반적으로 페이지의 `title` 에 매핑됩니다. - 페이지 주요 콘텐츠의 제목 수준을 `h2` 로 제한하세요. 필요하다고 판단되는 경우에만 `h3` 을 추가하세요. 일반적으로 다른 수준은 피하세요. - 페이지의 특정 섹션에 표시되는 콘텐츠의 경우, 제목 수준을 섹션의 주요 제목 바로 아래 수준으로 제한하세요. StreamField를 통해 제목을 관리하는 경우, 동일한 제한 사항을 적용하세요. ### 리치 텍스트의 굵게 및 기울임꼴 서식 기본적으로 Wagtail은 굵은 서식을 `b` 태그로, 기울임꼴을 `i` 로 저장합니다([#4665](https://github.com/wagtail/wagtail/issues/4665)). 이러한 태그가 항상 올바른 의미를 갖지는 않지만(`strong` 과 `em` 이 더 보편적임), 스크린 리더는 기본적으로 강조에 따라 콘텐츠를 다르게 발표하지 않기 때문에 스크린 리더 사용자에게 큰 영향은 없습니다. 이것이 걱정된다면, [리치 텍스트 형식 변환기](rich_text_format_converters)를 사용하여 콘텐츠 저장 시 사용되는 태그를 변경할 수 있습니다. 미래에는 [리치 텍스트 재작성 핸들러](rich_text_rewrite_handlers)가 저장 형식을 변경하지 않고도 이를 지원할 것입니다([#4223](https://github.com/wagtail/wagtail/issues/4223)). ### TableBlock 스크린 리더는 행과 열 헤더를 사용하여 각 테이블 셀의 컨텍스트를 발표합니다. 편집자가 테이블에 적합한 행 헤더 및/또는 열 헤더를 설정하도록 권장하세요. 항상 캡션을 추가하여 스크린 리더 사용자가 사이트의 테이블을 탐색할 때 테이블 내용이 읽히기 전에 개요를 얻을 수 있도록 하세요. (accessibility_in_templates)= ## 템플릿의 접근성 사이트의 템플릿을 최대한 접근성 있게 만들기 위해 알아야 할 일반적인 함정은 다음과 같습니다. ### 템플릿의 대체 텍스트 위의 [콘텐츠 모델링](content_modeling) 섹션을 참조하세요. 또한, [이미지의 대체 텍스트를 사용자 정의](image_tag_alt)하여 관련 필드로 설정하거나, 장식용 이미지의 경우 빈 문자열로 설정하거나, 대체 텍스트가 다른 콘텐츠의 반복이 될 이미지의 경우에도 설정해야 합니다. 이미지의 대체 텍스트가 이미지 모델에서 직접 오는 경우에도, 이미지가 사용되는 특정 컨텍스트에 대체 텍스트가 있어야 하는지 결정해야 합니다. 예를 들어, 대체 텍스트가 목록 항목의 제목을 반복하는 목록에서는 대체 텍스트를 피하세요. ### 빈 제목 태그 리치 텍스트와 사용자 정의 StreamField 블록 모두에서, 편집자가 제목 블록을 만들지만 내용을 추가하지 않는 것은 쉽습니다. [내장 접근성 검사기](built_in_accessibility_checker)는 빈 제목을 강조 표시하여 편집자가 찾아 수정할 수 있게 합니다. 더 엄격한 시행이 필요한 경우: - 해당 필드에 유효성 검사 규칙을 추가하여 빈 제목이 있는 페이지를 저장할 수 없도록 합니다. 예를 들어, 기본적으로 필수인 [StreamField](../topics/streamfield) `CharBlock` 을 사용하는 방법이 있습니다. - 리치 텍스트 필드에도 유사한 유효성 검사 규칙을 추가하는 것을 고려하세요. 또는 CSS로 빈 제목 블록을 숨길 수 있습니다: ```css h1:empty, h2:empty, h3:empty, h4:empty, h5:empty, h6:empty { display: none; } ``` ### 양식 [양식 빌더](form_builder)는 Django의 양식 API를 사용합니다. 템플릿의 양식과 관련된 고려사항은 다음과 같습니다: - `as_table`, `as_ul`, `as_p` 와 같은 렌더링 헬퍼 사용을 피하세요. 이는 스크린 리더 사용자가 양식을 탐색하기 어렵게 만들거나 HTML 유효성 검사 문제를 일으킬 수 있습니다(Django 티켓 [#32339](https://code.djangoproject.com/ticket/32339) 참조). - 필수 필드와 선택적 필드를 시각적으로 구분해야 합니다. - 관련 필드를 `fieldset` 으로 그룹화하고 적절한 `legend` 를 사용하는 데 시간을 투자하세요. 특히 라디오 버튼과 체크박스의 경우 그렇습니다(Django 티켓 [#32338](https://code.djangoproject.com/ticket/32338) 참조). - 관련이 있다면 적절한 `autocomplete` 및 `autocapitalize` 속성을 사용하세요. - 날짜 및 날짜시간 필드의 경우, 예상 형식이나 예제 값을 표시해야 합니다(Django 티켓 [#32340](https://code.djangoproject.com/ticket/32340) 참조). 또는 [input type="date"](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date)를 사용하세요. - 숫자 필드의 경우, `input type="number"` 가 정말로 적절한지, 아니면 [inputmode와 같은 더 나은 대안](https://technology.blog.gov.uk/2020/02/24/why-the-gov-uk-design-system-team-changed-the-input-type-for-numbers/)이 있는지 고려하세요. 보조 기술로 양식 구현을 테스트하고, 추가 정보를 위해 [접근성 있는 양식 개발에 관한 공식 W3C 지침](https://www.w3.org/WAI/tutorials/forms/)을 검토하세요. (authoring_accessible_content)= ## 접근성 있는 콘텐츠 작성 접근성 있는 콘텐츠를 만드는 데 도움이 되는 여러 내장 도구와 추가 리소스를 사용할 수 있습니다. (built_in_accessibility_checker)= ### 내장 접근성 검사기 Wagtail에는 [사용자 바](wagtailuserbar_tag)와 미리보기를 지원하는 편집 뷰에 내장된 접근성 검사기가 포함되어 있습니다. 이 검사기는 작성자가 모범 사례와 [WCAG](https://www.w3.org/WAI/standards-guidelines/wcag/)와 같은 접근성 표준을 따르는 더 접근성 있는 웹사이트를 만드는 데 도움이 됩니다. 이 검사기는 [Axe](https://github.com/dequelabs/axe-core) 테스트 엔진을 기반으로 하며 로드된 페이지에서 오류를 스캔합니다. 기본적으로 검사기는 작성된 콘텐츠에서 일반적인 접근성 문제를 찾기 위해 다음 규칙을 포함합니다: - `button-name`: `