
W3C 제안 권장사항 (2021년 9월 30일) 자료를 기준으로 작성하였습니다.
https://www.w3.org/TR/html-aria/#case-sensitivity
ARIA in HTML
Element with contenteditable=true or element without contenteditable attribute whose closest ancestor with a contenteditable attribute has contenteditable="true". Note This is equivalent to the isContentEditable IDL attribute. aria-readonly="false" Authors
www.w3.org
[ role="" 부여 시 주의사항 ]
1.1 기본 역할을 재정의하지 않기
다음은 잘못된 role 부여 방식입니다.
1
2
|
<!-- 잘못된 역할 -->
<button role="heading">search</button>
|
cs |
<button> 요소에는 표제 역할(heading)과 충돌하는 기본 특성이 있기 때문에 해당 태그에 role="heading"을 부여하는 것은 허용되지 않습니다.
1.2 중복 역할을 추가하지 않기
1
2
|
<!-- 위와 같은 작성은 피해주세요 -->
<button role="button">버튼</button>
|
cs |
<button> 은 이미 button의 역할을 하고있기 때문에 개별적으로 role="button"을 제공할 필요가 없습니다.
굳이 버튼이 버튼역할을 하는 것을 표기하고 싶다면 role="button" 이 아닌 type="button" 을 추가해주는 것이 옳습니다.
button 외에도 role="group"은 <fieldset>이, role="main"은 <main>이 사용하고 있기 때문에 굳이 중복해서 역할을 넣어줄 필요가 없습니다.
1.3 불필요한 역할 제공하지 않기
1
2
3
4
|
<!-- 아래와 같이 마크업을 짜면 안 됩니다 -->
<details>
<summary role="button">더보기</summary>
</details>
|
cs |
위의 html코드에서 <summary> 에 role="button"을 제공한 것을 볼 수 있습니다.
이는 <summary> 태그가 올바르게 사용되는 것을 방해하고 역으로 사용자에게 혼란을 줄 수 있는 마크업임을 알아야해요.
위와 같은 경우는 <
details
>와 <summary>가 아닌 다른 방식의 마크업을 사용하시는 것이 옳은 방법입니다😋
2. HTML에서 ARIA 속성을 사용하기 위해 요구되는 적합한 작성방법
ARIA 의미 체계와 일치하는 ARIA role 및 aria-* 속성을 설정하는 것은 필수가 아니지만 일부 상황에서는 이러한 속성을 제공해주는 것이 사용자에게 큰 도움이 될 수 있습니다.
요소의 알파벳 별로 나누어서 표로 정리해두었기 때문에
조금 더 찾아보시기 쉬우실 것 같아요 🤗
앞으로 수정할 일이 생기거나 바뀐 점이 있으면 틈틈히 갱신하도록 하겠습니다.
<A>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<a href=""> | role="link" | 역할 : button, checkbox, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab, treeitem aria-disabled="true" 속성은 href 속성과 함께 쓰이는 <a>태그에 권장되지 않습니다.❌ * 만약 aria-disabled 속성을 사용하고 싶다면 href 속성을 제거하면 됩니다. |
<a> (href 속성 X) |
X | 어떤 role이든 적용 가능 |
<abbr> | X | 어떤 role이든 적용 가능 |
<address> | X | 어떤 role이든 적용 가능 |
<area href=""> | role="link" | X |
<article> | role="article" => 해당요소 자체만으로 개별 페이지로 독립할 수 있는 것 |
역할 : application, document, feed, main, none, presentation, region |
<aside> | role="complementary" => 해당요소 자체만으로는 독립이 불가능한 것 |
역할 : feed, none, note, presentation, region, search |
<audio> | X | 역할 : application |
<B>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<b> | X | 어떤 role이든 적용 가능 |
<base> | X | X |
<bdi> | X | 어떤 role이든 적용 가능 |
<bdo> | X | 어떤 role이든 적용 가능 |
<blockquote> | X | 어떤 role이든 적용 가능 |
<body> | X | X |
<br> | X | 역할 : presentation, none |
<button> | role="button" | 역할 : checkbox, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab |
<C>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<canvas> | X | 어떤 role이든 적용 가능 |
<caption> | X | X |
<cite> | X | 어떤 role이든 적용 가능 |
<code> | X | 어떤 role이든 적용 가능 |
<col> | X | X |
<colgroup> | X | X |
<D>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<data> | X | 어떤 role이든 적용 가능 |
<datalist> | role="listbox" | X |
<dd> | role="definition" | X |
<del> | X | 어떤 role이든 적용 가능 |
<dfn> | role="term" | 어떤 role이든 적용 가능 |
<details> | role="group" | X |
<dialog> | role="dialog" | 역할 : alertdialog |
<div> | X | 어떤 role이든 적용 가능 |
<dl> | X | 역할 : group, list, presentation, none |
<dt> | role="term" | 역할 : listitem |
<E, F>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<em> | X | 어떤 role이든 적용 가능 |
<embed> | X | 역할 : application, document, img, presentation, none |
<fieldset> | role="group" | 역할 : none, presentation, radiogroup |
<figcaption> | X | 역할 : group, presentation, none |
<figure> | role="figure" | 만약 <figcaption>의 하위항목으로 <figure>가 들어갔다면 => 어떤 role이든 적용 가능 만약 <figcaption>의 하위항목이 아니라면 => X |
<footer> | 만약, (1) article, aside, main, nav, section의 하위요소로서 존재하거나 (2) role="article", complrementary, main, navigation, region과 함께 사용되는 것이라면 => role="contentinfo" 그게 아니라면 X |
역할 : group, none, presentation |
<form> | accessible name 을 가지고 있다면 => role="form" 그게 아니라면 X *accessible name => 요소 안의 텍스트, name, value 등 보조기기가 요소의 정보를 읽을 수 있도록 하는 내용들 |
역할 : search, none, presentation |
<H>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<h1> to <h6> | role="heading", aria-level = <h1>~<h6>의 태그 숫자 |
역할 : none, presentation, tab |
<head> | X | X |
<header> | 만약 (1) article, aside, main, nav, section의 하위요소로서 존재하거나 (2) role="article", complrementary, main, navigation, region과 함께 사용되는 것이라면 => role="banner" 그게 아니라면 X |
역할 : group, none, presentation |
<hgroup> | X | 어떤 role이든 적용 가능 |
<hr> | role="separator" | 역할 : none, presentation |
<html> | role="document" | X |
<I>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<i> | X | 어떤 role이든 적용 가능 |
<iframe> | X | 역할 : application, document, img, none, presentation |
<img alt="텍스트"> | role="img" | 역할 : button, checkbox, link, menuitem, menuitemcheckbox, menuitemradio, option, progressbar, scrollbar, separator, slider, switch, tab, treeitem |
<img alt=""> | role="presentation" | X |
<img> | role="img" | X <img>에 accessible name이 없을 경우엔 해당 요소에 접근할 수가 없음 *accessible name => 요소 안의 텍스트, name, value 등 보조기기가 요소의 정보를 읽을 수 있도록 하는 내용들 |
<input type="button"> | role="button" | 역할 : link, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab |
<input type="checkbox"> | role="checkbox" | 역할 : menuitemcheckbox, option, switch aria-pressed와 함께 사용할 경우 role="button" * aira-checked 속성을 쓰지 않아야한다 |
<input type="color"> | X | X |
<input type="date"> | X | X |
<input type="datetime-local"> | X | X |
<input type="email"> (list 속성이 없는 경우) |
role="textbox" | X |
<input type="file"> | X | X |
<input type="hidden"> | X | X, aria-* 속성 사용 불가 |
<input type="image"> | role="button" | 역할 : link, menuitem, menuitemcheckbox, menuitemradio, radio, switch |
<input type="month"> | X | X |
<input type="number"> | role="spinbutton" | X |
<input type="password"> | X | X |
<input type="radio"> | role="radio" | 역할 : menuitemradio * aira-checked 속성을 쓰지 않아야한다 |
<input type="range"> |
role="slider" | X * aira-valuemax, aira-valuemin 속성을 쓰지 않아야한다 |
<input type="reset"> | role="button" | X |
<input type="search"> (list 속성이 없는 경우) |
role="searchbox" | X |
<input type="submit"> | role="button" | X |
<input type="tel"> (list 속성이 없는 경우) |
role="textbox" | X |
<input> type="text"> (list 속성이 누락되거나 유효하지 않은 것이 들어갔을 때) |
role="textbox" | 역할 : combobox, searchbox, spinbutton |
<input type="text">, <input type="search">, <input type="tel">, <input type="url">, <input type="email"> list 속성이 포함되어 있을 때 |
role="combobox" | X |
<input type="time"> | X | X |
<input type="url"> list 속성이 없는 경우 |
role="textbox" | X |
<input type="week"> | X | X |
<ins> | X | 어떤 role이든 적용 가능 |
<K, L>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<kbd> | X | 어떤 role이든 적용 가능 |
<label> | X | X |
<legend> | X | X |
<li> | role="listitem" | 역할 : menuitem, menuitemcheckbox, menuitemradio, option, none, presentation, radio, separator, tab, treeitem |
<link> | X | X, aria-* 속성 사용 불가능 |
<M, N>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<main> | role="main" | X |
<map> | X | X, aria-* 속성 사용 불가능 |
<math> | role="math" | X |
<mark> | X | 어떤 role이든 적용 가능 |
<menu> | role="list" | 역할 : directory, group, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar, tree |
<meta> | X | X, aria-* 속성 사용 불가능 |
<meter> | X | X * aira-valuemax, aira-valuemin 속성을 쓰지 않아야한다 |
<nav> | role="navigation" | 역할 : menu, menubar, tablist |
<noscript> | X | X, aria-* 속성 사용 불가능 |
<O>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<object> | X | 역할 : application, document, img |
<ol> | role="list" | 역할 : directory, group, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar, tree |
<optgroup> | role="group" | X |
<option> list of option 안에 있거나 datalist에서 제안사항을 나타낼 경우 |
role="option" | X * aria-selected 속성을 쓰지 않아야 한다 |
<output> | role="status" | 어떤 role이든 적용 가능 |
<P>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<p> | X | 어떤 role이든 적용 가능 |
<param> | X | X, aria-* 속성 사용 불가능 |
<picture> | X | X, aria-* 속성 사용 불가능 |
<pre> | X | 어떤 role이든 적용 가능 |
<progress> | role="progressbar" | X * aria-valuemax 속성을 쓰지 않아야 한다 |
<Q, R>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<q> | X | 어떤 role이든 적용 가능 |
<rp> | X | 어떤 role이든 적용 가능 |
<rt> | X | 어떤 role이든 적용 가능 |
<ruby> | X | 어떤 role이든 적용 가능 |
<S>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<s> | X | 어떤 role이든 적용 가능 |
<samp> | X | 어떤 role이든 적용 가능 |
<script> | X | X, aria-* 속성 사용 불가능 |
<section> | 만약, <section> 에 accessioble name 이 있을 경우 => role="region" 그게 아니라면 X |
역할 : alert, alertdialog, application, banner, complementary, contentinfo, dialog, document, feed, log, main, marquee, navigation, none, note, presentation, search, status, tabpanel |
<select> multiple, 1보다 큰 size 속성을 가지지 않은 경우 |
role="listbox" | X * aria-multiselectable 속성을 쓰지 않아야 한다 |
<slot> | X | X, aria-* 속성 사용 불가능 |
<small> | X | 어떤 role이든 적용 가능 |
<source> | X | X, aria-* 속성 사용 불가능 |
<span> | X | 어떤 role이든 적용 가능 |
<strong> | X | 어떤 role이든 적용 가능 |
<style> | X | X, aria-* 속성 사용 불가능 |
<sub> | X | 어떤 role이든 적용 가능 |
<summary> | role="button" | X |
<sup> | X | 어떤 role이든 적용 가능 |
<SVG> | role="graphics-document" as defined by SVG AAM |
어떤 role이든 적용 가능 |
<T>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<table> | role="table" | 어떤 role이든 적용 가능 |
<tbody> | role="rowgroup" | 어떤 role이든 적용 가능 |
<template> | X | X, aria-* 속성 사용 불가능 |
<textarea> | role="textbox" | X |
<tfoot> | role="rowgroup" | 어떤 role이든 적용 가능 |
<thead> | role="rowgroup" | 어떤 role이든 적용 가능 |
<time> | X | 어떤 role이든 적용 가능 |
<title> | X | X, aria-* 속성 사용 불가능 |
<td> | (1) <table> 요소가 role="table"일 때 => role="cell" (2) <table> 요소가 role="grid"일 때 => role="gridcell" |
<table> 요소가 (1) role="table", role="grid", role="treegrid" 일 때 => X |
<th> | (1) <table> 요소가 role="table"일 때 => role="columnheader" role="rowheader" role="cell" (2) <table> 요소가 role="grid" or "treegrid"일 때 => role="columnheader" role="rowheader" role="gridcell" (3) <table> 요소가 role="table", "grid" or "treegrid"이 아닐 때 => X |
<table> 요소가 (1) role="table", role="grid", role="treegrid" 일 때 => X 그 외의 경우, 어떤 role이든 적용 가능 |
<tr> | role="row" | <table> 요소가 (1) role="table", role="grid", role="treegrid" 일 때 => X 그 외의 경우, 어떤 role이든 적용 가능 |
<track> | X | X, aria-* 속성 사용 불가능 |
<U, V, W>
HTML 태그 | 암묵적인 기본 역할 | role 역할, 사용할 수 있는 상태 및 속성 |
<u> | X | 어떤 role이든 적용 가능 |
<ul> | X | 역할 : directory, group, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar, tree |
<var> | X | 어떤 role이든 적용 가능 |
<video> | X | 역할 : application |
<wbr> | X | 어떤 role이든 적용 가능 |
'📁 Screen > 🖥️ 웹접근성' 카테고리의 다른 글
[웹접근성] ARIA 사용하기 : 규칙, 상태, 속성 (0) | 2021.12.14 |
---|---|
[웹접근성] 인식의 용이성(perceivable) (0) | 2021.11.23 |
[웹접근성] 용어의 정의 (0) | 2021.11.23 |