ãŠã§ãã¢ã¯ã»ã·ããªãã£APIãæ·±ãæ¢æ±ããã¹ã¯ãªãŒã³ãªãŒããŒå¯Ÿå¿ãšããŒããŒãããã²ãŒã·ã§ã³ã匷åããŠãäžçäžã®ãŠãŒã¶ãŒã«å æ¬çãªããžã¿ã«äœéšãåµåºããäžã§ã®éèŠãªåœ¹å²ã«çŠç¹ãåœãŠãŸãã
ãŠã§ãã¢ã¯ã»ã·ããªãã£APIïŒã¹ã¯ãªãŒã³ãªãŒããŒå¯Ÿå¿ãšããŒããŒãããã²ãŒã·ã§ã³ã匷åããã°ããŒãã«ãªå©çšè ã«åãäžãã
仿¥ã®çžäºæ¥ç¶ãããããžã¿ã«ç€ŸäŒã«ãããŠã誰ããã¢ã¯ã»ã¹ã§ãããŠã§ãäœéšãåµåºããããšã¯ãåãªããã¹ããã©ã¯ãã£ã¹ã§ã¯ãªããåºæ¬çãã€å«ççãæ³çãªçŸ©åã§ãããŠã§ãã¢ã¯ã»ã·ããªãã£ã¯ãé害ã®ãã人ã ããŠã§ããèªèãçè§£ãæäœã察話ã§ããããšãä¿èšŒããŸãããã®ç®æšéæã®äžå¿ã«ããã®ãããŠã§ãã¢ã¯ã»ã·ããªãã£APIã§ãããããã®åŒ·åãªããŒã«ã¯ãéçºè ãèªèº«ã®ãŠã§ããµã€ããã¢ããªã±ãŒã·ã§ã³ããç¹ã«ã¹ã¯ãªãŒã³ãªãŒããŒãããŒããŒãããã²ãŒã·ã§ã³ãªã©ã®æ¯æŽæè¡ã«äŸåãã倿§ãªãŠãŒã¶ãŒãå©çšã§ããããã«ããããã®ææ®µãæäŸããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ããŠã§ãã¢ã¯ã»ã·ããªãã£APIã®è€éããæ·±ãæãäžããç¹ã«ã¹ã¯ãªãŒã³ãªãŒããŒå¯Ÿå¿ãšããŒããŒãããã²ãŒã·ã§ã³ãžã®éèŠãªè²¢ç®ã«çŠç¹ãåœãŠãã°ããŒãã«ãªå©çšè ã«åããæŽå¯ãšå®è·µçãªæŠç¥ãæäŸããŸãã
ãŠã§ãã¢ã¯ã»ã·ããªãã£ã®æ±ãçè§£ããïŒã¹ã¯ãªãŒã³ãªãŒããŒãšããŒããŒãããã²ãŒã·ã§ã³
APIãã®ãã®ã«èžã¿èŸŒãåã«ããããã察å¿ãããŠãŒã¶ãŒã®ããŒãºãææ¡ããããšãäžå¯æ¬ ã§ããæãæ®åããŠããã圱é¿åã®ããæ¯æŽæè¡ã®ãã¡2ã€ããã¹ã¯ãªãŒã³ãªãŒããŒãšããŒããŒãããã²ãŒã·ã§ã³ã§ãã
ã¹ã¯ãªãŒã³ãªãŒããŒïŒãŠã§ãã«å£°ãäžãã
ã¹ã¯ãªãŒã³ãªãŒããŒã¯ããŠã§ãããŒãžã®ã³ã³ãã³ããè§£éããåæé³å£°ãç¹åã§ãŠãŒã¶ãŒã«æç€ºãããœãããŠã§ã¢ã¢ããªã±ãŒã·ã§ã³ã§ããèŠèŠé害ã®ãã人ã ã«ãšã£ãŠãã¹ã¯ãªãŒã³ãªãŒããŒã¯ãªã³ã©ã€ã³ã§æ å ±ã«ã¢ã¯ã»ã¹ããããã®äžå¯æ¬ ãªããŒã«ã§ããããããã¹ã¯ãªãŒã³ãªãŒããŒããŠã§ãããŒãžã®æå³ãæ§é ã广çã«äŒããããã«ã¯ããã®åºç€ãšãªãã³ãŒããæå³çã«è±ãã§ãé©åã«æ³šéä»ããããŠããå¿ èŠããããŸããããããªããã°ãã¹ã¯ãªãŒã³ãªãŒããŒã¯ã³ã³ãã³ããé äžåã§èªã¿äžããããéèŠãªæ å ±ãèŠéããããã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ã®æ©èœãäŒããããªãã£ããããå¯èœæ§ããããŸãã
ããŒããŒãããã²ãŒã·ã§ã³ïŒããŠã¹ãªãã§ã®æäœ
ããŒããŒãããã²ãŒã·ã§ã³ãšã¯ãããŒããŒãã®ã¿ã䜿çšããŠãŠã§ããµã€ããæäœããèœåãæããéåžžã¯TabããŒïŒã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ éã®ç§»åïŒãShift+TabïŒåŸæ¹ãžã®ç§»åïŒãEnterãŸãã¯SpacebarïŒèŠçŽ ã®æå¹åïŒãç¢å°ããŒïŒã¡ãã¥ãŒããªã¹ããªã©ã®ã³ã³ããŒãã³ãå ã®ç§»åïŒãä»ããŠè¡ãããŸããéåé害ãåšçšãã«åé¡ããããŠãŒã¶ãŒããããã¯åã«ããŠã¹ã䜿ãããããªããŠãŒã¶ãŒãªã©ãå€ãã®ãŠãŒã¶ãŒãããŒããŒãããã²ãŒã·ã§ã³ã«å€§ããäŸåããŠããŸããããŒããŒãã¢ã¯ã»ã·ããªãã£ã念é ã«çœ®ããŠèšèšãããŠããªããŠã§ããµã€ãã¯ããŠãŒã¶ãŒãéã蟌ããŠããŸããéèŠãªãã¿ã³ããªã³ã¯ããã©ãŒã ãã£ãŒã«ãã«å°éã§ããªãããããšããããŸãã
ãŠã§ãã¢ã¯ã»ã·ããªãã£APIã®åœ¹å²
ãŠã§ãã¢ã¯ã»ã·ããªãã£APIã¯ãæ¯æŽæè¡ããŠã§ãã³ã³ãã³ããçè§£ããæäœã§ããããã«ããããã®äžéçãªåœ¹å²ãæãããŸãããããã¯ãéçºè ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹èŠçŽ ã®åœ¹å²ãç¶æ ãããããã£ã«é¢ããæ å ±ãæ¯æŽæè¡ã«å ¬éããããã®æšæºåãããæ¹æ³ãæäŸããŸãããŠã§ãã¢ã¯ã»ã·ããªãã£ã«é¢ããæãèåã§åºãæ¡çšãããŠããæšæºã¯ãWorld Wide Web Consortium (W3C) ã管çããWeb Accessibility Initiative - Accessible Rich Internet Applications (WAI-ARIA)仿§ã§ãã
WAI-ARIAïŒæå³çãªè±ããã®åºç€
ARIAã¯ã远å ã®æå³æ å ±ãæäŸããããã«HTMLèŠçŽ ã«è¿œå ã§ãã屿§ã®ã»ããã§ããããã«ãããéçºè ã¯ã«ã¹ã¿ã UIèŠçŽ ãåçãªã³ã³ãã³ãæŽæ°ãHTMLããã€ãã£ãã§ãµããŒãããŠããªãè€éãªãŠã£ãžã§ããã®ç®çãç¶æ ãç¹æ§ãèšè¿°ã§ããŸããARIA屿§ã¯ããŠãŒã¶ãŒããŠã§ãããŒãžãã©ã®ããã«èŠãŠæäœããããšãæ¯æŽæè¡ããã®äœéšãã©ã®ããã«è§£éãããã®éã®ã®ã£ãããåããŸãã
ã¹ã¯ãªãŒã³ãªãŒããŒãšããŒããŒãããã²ãŒã·ã§ã³ã®ããã®äž»èŠãªARIAã®æŠå¿µ
- åœ¹å² (Roles): ARIAã®åœ¹å²ã¯èŠçŽ ã®ç®çãå®çŸ©ããŸããäŸãã°ããã€ãã£ãã®HTML <button>ã§ã¯ãªãã«ã¹ã¿ã ãã¿ã³ã«ã¯ããbuttonããšãã圹å²ïŒ
role="button"
ïŒãäžããããšãã§ããŸããããã«ãããã¹ã¯ãªãŒã³ãªãŒããŒã¯ãã®èŠçŽ ããã¿ã³ãšããŠæ©èœããããšãèªèããŸãããã®ä»ã®äžè¬çãªåœ¹å²ã«ã¯ããnavigationãããsearchãããdialogãããtabãããtablistããªã©ããããŸãã - ç¶æ
ãšãããã㣠(States and Properties): ãããã®å±æ§ã¯ãèŠçŽ ã®çŸåšã®ç¶æ
ãç¹æ§ãèšè¿°ããŸããäŸãã°ãã¿ãã¯ãéžææžã¿ãïŒ
aria-selected="true"
ïŒãŸãã¯ãæªéžæãïŒaria-selected="false"
ïŒã«ãªãããšããããŸãããã§ãã¯ããã¯ã¹ã¯ããã§ãã¯æžã¿ãïŒaria-checked="true"
ïŒãŸãã¯ãæªãã§ãã¯ãïŒaria-checked="false"
ïŒã«ãªãããšããããŸããaria-label
ïŒã¢ã¯ã»ã·ãã«ãªååãæäŸïŒãaria-describedby
ïŒèª¬æãžã®ãªã³ã¯ïŒã®ãããªããããã£ã¯ãèŠèŠçã«ã¯æããã§ãªãæ å ±ãäŒããããã«äžå¯æ¬ ã§ãã - ã©ã€ããªãŒãžã§ã³ (Live Regions): åçãªã³ã³ãã³ãæŽæ°ïŒäŸïŒãšã©ãŒã¡ãã»ãŒãžããªã¢ã«ã¿ã€ã éç¥ïŒã«å¯ŸããŠãARIAã©ã€ããªãŒãžã§ã³ïŒ
aria-live
ïŒã¯ã¹ã¯ãªãŒã³ãªãŒããŒã«ãããã®å€æŽãéç¥ãããŠãŒã¶ãŒãéèŠãªæ å ±ãèŠéããªãããã«ããŸããaria-live="polite"
ãaria-live="assertive"
ã®ãããªå±æ§ã¯ãã¹ã¯ãªãŒã³ãªãŒããŒããããã®æŽæ°ãã©ã®çšåºŠã®ç·æ¥åºŠã§èªã¿äžããããå¶åŸ¡ããŸãã
ARIAãè¶ ããŠïŒãã€ãã£ãHTMLã»ãã³ãã£ã¯ã¹
ARIAã¯ãé©åã«æ§é åãããã»ãã³ãã£ãã¯HTMLã®ä»£æ¿ã§ã¯ãªããè£è¶³ã§ããããšãå¿ããŠã¯ãªããŸãããå¯èœãªéããéçºè ã¯ãã€ãã£ãHTMLèŠçŽ ãšãã®åºæã®ã¢ã¯ã»ã·ããªãã£æ©èœã掻çšãã¹ãã§ããäŸãã°ïŒ
- ãã¿ã³ã«ã¯
<button>
ãããªã³ã¯ã«ã¯<a href="#">
ã䜿çšããããšã§ãæ¯æŽæè¡ãæ¬è³ªçã«çè§£ã§ããçµã¿èŸŒã¿ã®ããŒããŒãæäœæ§ãšæå³çãªæå³ãæäŸãããŸãã - èŠåºãèŠçŽ ïŒ
<h1>
ãã<h6>
ãŸã§ïŒãè«ççãéå±€çãªé åºã§äœ¿çšããããšã§ãã¹ã¯ãªãŒã³ãªãŒããŒãŠãŒã¶ãŒã¯ããã¥ã¡ã³ãã®æ§é ãçŽ æ©ãããã²ãŒãããçè§£ããããšãã§ããŸãã - å
¥åã«é¢é£ä»ãããã
<label>
ã®ãããªã»ãã³ãã£ãã¯ãªãã©ãŒã èŠçŽ ã䜿çšããïŒfor
屿§ãå ¥åã®id
ã«ãªã³ã¯ããïŒããšã§ãã¹ã¯ãªãŒã³ãªãŒããŒãåãã©ãŒã ãã£ãŒã«ãã®ç®çãèªã¿äžããããšãä¿èšŒãããŸãã
ã¢ã¯ã»ã·ããªãã£APIã«ããã¹ã¯ãªãŒã³ãªãŒããŒå¯Ÿå¿ã®åŒ·å
ã¢ã¯ã»ã·ããªãã£APIãç¹ã«ARIAã¯ãã¹ã¯ãªãŒã³ãªãŒããŒããŠã§ãã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã³ããšæ©èœãæ£ç¢ºã«è§£éããäŒããããšãã§ããããã«ããããã«æ¥µããŠéèŠãªåœ¹å²ãæãããŸããç®æšã¯ãã¹ã¯ãªãŒã³ãªãŒããŒãŠãŒã¶ãŒã«ãšã£ãŠãèŠèŠã®ãããŠãŒã¶ãŒãšåçã®äœéšãåµåºããããšã§ãã
ã¢ã¯ã»ã·ãã«ãªååãšèª¬æã®æäŸ
ã¹ã¯ãªãŒã³ãªãŒããŒå¯Ÿå¿ã®æãåºæ¬çãªåŽé¢ã®1ã€ã¯ãã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ã«æç¢ºã§ç°¡æœãªã¢ã¯ã»ã·ãã«ãªååãæäŸããããšã§ãããããã®ååã¯ãèŠçŽ ããã©ãŒã«ã¹ãåãåã£ããšãã«ã¹ã¯ãªãŒã³ãªãŒããŒãèªã¿äžãããã®ã§ãã
aria-label
: ãã®å±æ§ã¯ãã¢ã¯ã»ã·ãã«ãªååãšããŠäœ¿çšãããæååãçŽæ¥æäŸããŸããã¢ã€ã³ã³ãã¿ã³ã«å¯èŠããã¹ãããªãå Žåã«ãã䜿çšãããŸããäŸãã°ããæ€çŽ¢ãã¢ã€ã³ã³ãã¿ã³ã«ã¯aria-label="Search"
ãšä»ããããšãã§ããŸããaria-labelledby
: ãã®å±æ§ã¯ãã¢ã¯ã»ã·ãã«ãªååãå«ãããŒãžäžã®å¥ã®èŠçŽ ãåç §ããŸããããã¯ãååãèŠèŠçã«ååšããŠããŠããèŠçŽ ã«çŽæ¥é¢é£ä»ããããŠããªãå Žåã«äŸ¿å©ã§ããäŸãã°ãèŠåºãããã¿ã³ã®ã©ãã«ã«ãªãå ŽåããããŸãïŒ<h2 id="section-title">補å詳现</h2><button aria-labelledby="section-title">ãã£ãšèŠã</button>
ãaria-describedby
: ãã®å±æ§ã¯ãèŠçŽ ãããé·ã説æã«ãªã³ã¯ãããŸããã¹ã¯ãªãŒã³ãªãŒããŒã¯ãã¢ã¯ã»ã·ãã«ãªååã®åŸã«ããã°ãã°ãŠãŒã¶ãŒã®èŠæ±ã«å¿ããŠãã®èª¬æãèªã¿äžããããšããããŸããããã¯ãè€éãªæç€ºãè£è¶³æ å ±ã«éåžžã«åœ¹ç«ã¡ãŸãã
è€éãªãŠã£ãžã§ããã®ã€ã³ã¿ã©ã¯ã·ã§ã³ç®¡ç
çŸä»£ã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãã«ã«ãŒã»ã«ãã¿ãããã«ãã¢ã³ãŒãã£ãªã³ãã«ã¹ã¿ã ããããããŠã³ãªã©ã®ã«ã¹ã¿ã ãã«ãã®ãŠã£ãžã§ãããç¹åŸŽãšããããšããããããŸããARIAããªããã°ãã¹ã¯ãªãŒã³ãªãŒããŒã¯ããããæ±çšçãªèŠçŽ ãšããŠæ±ãã䜿çšã§ããªãããŠããŸããŸããARIAã¯ããããã®ãŠã£ãžã§ãããšãã®åäœãå®çŸ©ããããã«å¿ èŠãªåœ¹å²ãç¶æ ãããããã£ãæäŸããŸãïŒ
äŸïŒã¢ã¯ã»ã·ãã«ãªã¿ãä»ãã€ã³ã¿ãŒãã§ãŒã¹
ã¿ãä»ãã€ã³ã¿ãŒãã§ãŒã¹ãèããŠã¿ãŸããããARIAã䜿çšããŠé©åã«å®è£ ãããã¿ãä»ãã€ã³ã¿ãŒãã§ãŒã¹ã¯ã次ã®ããã«ãªããŸãïŒ
<ul role="tablist" aria-label="Information Sections">
<li role="presentation">
<button role="tab" id="tab-1" aria-selected="true" aria-controls="panel-1">Overview</button>
</li>
<li role="presentation">
<button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2">Details</button>
</li>
</ul>
<div id="panel-1" role="tabpanel" aria-labelledby="tab-1">
<p>This is the overview content.</p>
</div>
<div id="panel-2" role="tabpanel" aria-labelledby="tab-2" style="display: none;">
<p>This is the detailed content.</p>
</div>
ãã®äŸã§ã¯ïŒ
role="tablist"
ã¯ã¿ãã®ã°ã«ãŒããèå¥ããŸããrole="tab"
ã¯åã ã®ã¿ããã¿ã³ãå®çŸ©ããŸããaria-selected
ã¯çŸåšã©ã®ã¿ããã¢ã¯ãã£ããã瀺ããŸããaria-controls
ã¯ã¿ããã¿ã³ã察å¿ããã¿ãããã«ã«ãªã³ã¯ããŸããrole="tabpanel"
ã¯ã¿ãã®ã³ã³ãã³ãé åãèå¥ããŸããaria-labelledby
ã¯ã¿ãããã«ãæèã®ããã«å¶åŸ¡å ã®ã¿ãã«ãªã³ã¯ãçŽããŸãã
ã¹ã¯ãªãŒã³ãªãŒããŒã¯ãããã®åœ¹å²ãšå±æ§ãè§£éããŠããŠãŒã¶ãŒãç¢å°ããŒã§ã¿ãéãç§»åããããã©ã®ã¿ããã¢ã¯ãã£ãã§ããããçè§£ãããããã®ã¿ãã«é¢é£ããã³ã³ãã³ããã©ãã«ããããç¥ãããšãã§ããŸãã
åçãªã³ã³ãã³ãæŽæ°ã®åŠç
ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãŸããŸãåçã«ãªããã³ã³ãã³ãããªã¢ã«ã¿ã€ã ã§æŽæ°ãããŸããã¹ã¯ãªãŒã³ãªãŒããŒãŠãŒã¶ãŒã«ãšã£ãŠã¯ãé©åã«éç¥ãããªããšãããã®æŽæ°ãèŠéãå¯èœæ§ããããŸããARIAã©ã€ããªãŒãžã§ã³ã¯ãéèŠãªå€æŽãäŒéãããããšãä¿èšŒããããã«äžå¯æ¬ ã§ãã
aria-live="polite"
: ãããæãäžè¬çãªèšå®ã§ããã¹ã¯ãªãŒã³ãªãŒããŒã¯ãçŸåšã®é³å£°åºåãçµããåŸã«æŽæ°ãèªã¿äžããŸããããã¯ãæ€çŽ¢çµæã®æŽæ°ãã·ã§ããã³ã°ã«ãŒãã®åèšéé¡ã®å€æŽãªã©ãéèŠåºŠãäœãæ å ±ã«é©ããŠããŸããaria-live="assertive"
: ãã®èšå®ã¯ãã¹ã¯ãªãŒã³ãªãŒããŒã®çŸåšã®åºåãäžæããŠãçŽã¡ã«æŽæ°ãèªã¿äžããŸããããã¯ããšã©ãŒã¡ãã»ãŒãžãã¢ã¯ã·ã§ã³æåã®ç¢ºèªãã»ãã¥ãªãã£ã¢ã©ãŒããªã©ãéåžžã«éèŠãªæ å ±ã«ã®ã¿éå®ããŠäœ¿çšãã¹ãã§ãã
äŸïŒã©ã€ããšã©ãŒã¡ãã»ãŒãž
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<div id="email-error" class="error-message" role="alert" aria-live="assertive"></div>
// JavaScript to update the error message:
document.getElementById('email-error').textContent = 'Please enter a valid email address.';
ããã§ã¯ãrole="alert"
ãšaria-live="assertive"
ãæã€div
ãããšã©ãŒã¡ãã»ãŒãžãã¹ã¯ãªãŒã³ãªãŒããŒã«ãã£ãŠå³åº§ã«èªã¿äžããããããšãä¿èšŒããŸãã
ã·ãŒã ã¬ã¹ãªããŒããŒãããã²ãŒã·ã§ã³ã®ç¢ºä¿
ã¢ã¯ã»ã·ããªãã£APIã¯ããŠãŒã¶ãŒãããŒããŒãã®ã¿ã䜿çšããŠãŠã§ãã³ã³ãã³ãã广çã«ããã²ãŒãããæäœã§ããããã«ããããã«ãåæ§ã«éèŠã§ããããã«ã¯ããã¹ãŠã®ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ããã©ãŒã«ã¹å¯èœã§ããããã©ãŒã«ã¹ã®é åºãè«ççã§äºæž¬å¯èœã§ããããšãä¿èšŒããããšãå«ãŸããŸãã
ãã©ãŒã«ã¹ç®¡çãšé åº
tabindex
屿§ã¯ããŒããŒãããã²ãŒã·ã§ã³ã«ãããŠéèŠãªåœ¹å²ãæãããŸãããæ³šæããŠäœ¿çšããå¿
èŠããããŸãã
tabindex="0"
: èŠçŽ ããã©ãŒã«ã¹å¯èœã«ããããŒãžã®èªç¶ãªã¿ãé åºã«å«ããŸããããã¯ããã€ãã£ãã§ãã©ãŒã«ã¹å¯èœãªèŠçŽ ãæããªãã«ã¹ã¿ã ã€ã³ã¿ã©ã¯ãã£ãèŠçŽ ã«äŸ¿å©ã§ããtabindex="-1"
: èŠçŽ ãããã°ã©ã çã«ïŒäŸïŒJavaScriptã®element.focus()
ã§ïŒãã©ãŒã«ã¹å¯èœã«ããŸãããèªç¶ãªã¿ãé åºããã¯é€å€ããŸããããã¯ãã¢ãŒãã«ãã€ã¢ãã°ãéãããšãã«ãã©ãŒã«ã¹ãç§»åããããããã€ã¢ãã°ãéãããšãã«ãããããªã¬ãŒããèŠçŽ ã«ãã©ãŒã«ã¹ãæ»ããããããªã©ãè€éãªã³ã³ããŒãã³ãå ã®ãã©ãŒã«ã¹ç®¡çã«äžå¯æ¬ ã§ãã- 0ãã倧ãã
tabindex
å€ïŒäŸïŒtabindex="1"
ïŒ: ãããã¯ãã³ã³ãã³ãã®èŠèŠçãªæµãããéžè±ãã人工çãªã¿ãé åºãäœæããæ··ä¹±ãæãå¯èœæ§ããããããäžè¬çã«é¿ããã¹ãã§ãã
åçã€ã³ã¿ãŒãã§ãŒã¹ã§ã®ãã©ãŒã«ã¹ç®¡ç
ã¢ãŒãã«ãã€ã¢ãã°ããããã¢ããã¡ãã¥ãŒã®ãããªåçã³ã³ãã³ãã§ã¯ããŠãŒã¶ãŒãè¿·åã«ãªããªãããã«ãæ éãªãã©ãŒã«ã¹ç®¡çãäžå¯æ¬ ã§ãã
- ã¢ãŒãã«ãéããšã: ãã©ãŒã«ã¹ã¯ããã°ã©ã çã«ã¢ãŒãã«å ã®èŠçŽ ïŒäŸïŒæåã®ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ãéãããã¿ã³ïŒã«ç§»åãããã¹ãã§ãã
- ã¢ãŒãã«ãéãããšã: ãã©ãŒã«ã¹ã¯å ã ã¢ãŒãã«ãããªã¬ãŒããèŠçŽ ã«æ»ãã¹ãã§ãã
- ããŒããŒããã©ãã: ãŠãŒã¶ãŒãããŒããŒãã䜿çšããŠä»»æã®ã«ã¹ã¿ã ã³ã³ããŒãã³ãããæãåºããããã«ããŠãã ãããäŸãã°ãã¢ãŒãã«ã§ã¯ãEscapeããŒãæŒããšéåžžã¯éããã¹ãã§ãã
äŸïŒã¢ãŒãã«ã§ã®ãã©ãŒã«ã¹ç®¡ç
ãã¿ã³ãã¢ãŒãã«ãããªã¬ãŒããå ŽåïŒ
// Assume 'modalButton' triggers 'myModal'
modalButton.addEventListener('click', () => {
myModal.style.display = 'block';
const firstFocusableElement = myModal.querySelector('button, input, a');
if (firstFocusableElement) {
firstFocusableElement.focus();
}
});
// When closing the modal
closeButton.addEventListener('click', () => {
myModal.style.display = 'none';
modalButton.focus(); // Return focus to the trigger button
});
// Handle Escape key to close
document.addEventListener('keydown', (event) => {
if (event.key === 'Escape' && myModal.style.display === 'block') {
closeButton.click(); // Trigger the close action
}
});
ãã®ã·ããªãªã§ã¯ãtabindex="-1"
ãããããã¢ãŒãã«èŠçŽ èªäœã«é©çšãããããã°ã©ã çã«ãã©ãŒã«ã¹å¯èœã§ãããã®ã®ããã©ã«ãã®ã¿ãã·ãŒã±ã³ã¹ã®äžéšã§ã¯ãªãããã«ããå
éšã®èŠçŽ ã¯éåžžéããã©ãŒã«ã¹å¯èœã«ãªããŸãã
æç¢ºãªãã©ãŒã«ã¹ã€ã³ãžã±ãŒã¿ã®æäŸ
çŸåšã©ã®èŠçŽ ãããŒããŒããã©ãŒã«ã¹ãæã£ãŠããããèŠèŠçã«åºå¥ããããšã¯éåžžã«éèŠã§ãããã©ãŠã¶ã¯ããã©ã«ãã®ãã©ãŒã«ã¹ã€ã³ãžã±ãŒã¿ïŒã¢ãŠãã©ã€ã³ïŒãæäŸããŸããããããã¯ãã°ãã°CSSã«ãã£ãŠäžæžããããŸããã«ã¹ã¿ã ã®ãã©ãŒã«ã¹ã¹ã¿ã€ã«ãé©çšãããæç¢ºã«èŠããããã«ããããšãäžå¯æ¬ ã§ãã
è¯ãå®è·µäŸïŒ
/* Default focus outline can be removed, but MUST be replaced with a clear custom one */
*:focus {
outline: none;
}
button:focus,
a:focus,
input:focus,
select:focus,
textarea:focus {
outline: 3px solid blue; /* Example: a clear, high-contrast outline */
box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.5); /* Another option */
}
ã¢ãŠãã©ã€ã³ã®è²ã倪ããã³ã³ãã©ã¹ãã¯ãããŒããžã§ã³ã®ãŠãŒã¶ãŒã«ãšã£ãŠååã§ããã¹ãã§ãã
ãŠã§ãã¢ã¯ã»ã·ããªãã£ã«é¢ããã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ãªå©çšè ã察象ã«éçºããå Žåãã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé ã¯ããã«å€å²ã«ããããŸããããå°åã§ã¢ã¯ã»ã·ãã«ãšèŠãªããããã®ããç°ãªãèŠå¶ãé害ã«å¯Ÿããæåçãªèªèãæè¡å°å ¥ã®ã¬ãã«ã®éãã«ãããå¥ã®å°åã§ã¯ãã¥ã¢ã³ã¹ãç°ãªãå ŽåããããŸãã
åœéæšæºãšèŠå¶ã®çè§£
W3Cã«ãã£ãŠéçºããããŠã§ãã³ã³ãã³ãã»ã¢ã¯ã»ã·ããªãã£ã»ã¬ã€ãã©ã€ã³ (WCAG) ã¯ããŠã§ãã¢ã¯ã»ã·ããªãã£ã®äºå®äžã®åœéæšæºã§ããWCAG 2.1ïŒããã³è¿æ¥å ¬éã®WCAG 2.2ïŒã¯ãåºç¯ãªé害ãã«ããŒããäžé£ã®ã¬ã€ãã©ã€ã³ãšæååºæºãæäŸããŸããå€ãã®åœããèªåœã®æ³åŸã§WCAGãæ¡æãŸãã¯åç §ããŠããŸããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- ã¢ã¡ãªã«åè¡åœ: ãªãããªããŒã·ã§ã³æ³ç¬¬508æ¡ããã³é害ãæã€ã¢ã¡ãªã«äººæ³ (ADA) ã¯ããã°ãã°WCAGãåç §ããŸãã
- 欧å·é£å: ãŠã§ãã¢ã¯ã»ã·ããªãã£æä»€ã¯ãå ¬å ±éšéã®ãŠã§ããµã€ããšã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãWCAG 2.1ã¬ãã«AAã«æºæ ããããšã矩åä»ããŠããŸãã
- ã«ãã: æ§ã ãªå·ã®ã¢ã¯ã»ã·ããªãã£æ³ãWCAGãåç §ããŠããŸãã
- ãªãŒã¹ãã©ãªã¢: é害è å·®å¥çŠæ¢æ³ããã³æ¿åºã®ICTã¢ã¯ã»ã·ããªãã£ããªã·ãŒã¯ããã°ãã°WCAGã«æºæ ããŠããŸãã
éçºè ã¯å¯Ÿè±¡åžå Žã®ç¹å®ã®æ³çèŠä»¶ãèªèããå¿ èŠããããŸãããWCAGã«æºæ ããããšã¯ãã»ãšãã©ã®ã°ããŒãã«ãªã¢ã¯ã»ã·ããªãã£æä»€ãæºããããã®ç¢ºåºããæ¹æ³ã§ãã
æåçãªãã¥ã¢ã³ã¹ãšãŠãŒã¶ãŒã®å€æ§æ§
ã¢ã¯ã»ã·ããªãã£ã®ååã¯æ®éçã§ããããã®èªèãå®è£ æ¹æ³ã¯æ§ã ã§ãïŒ
- èšèª: ã¹ã¯ãªãŒã³ãªãŒããŒãè€æ°ã®èšèªã®ããã¹ããæ£ããè§£éããçºé³ã§ããããšãä¿èšŒããããšãéèŠã§ããããã«ã¯ãHTMLã§ã®é©åãªèšèªå®£èšïŒ
lang
屿§ïŒãšãæ¯æŽæè¡ããããã®èšèªããµããŒãããŠããããšã確èªããããšãå«ãŸããŸãã - æåçæ £ç¿: è²ã®é£æ³ã象城çãªæå³ãã€ã³ã¿ã©ã¯ã·ã§ã³ã®ãã¿ãŒã³ã¯æåã«ãã£ãŠç°ãªãããšããããŸããããæåã§çŽæçãªãã®ããå¥ã®æåã§ã¯æ··ä¹±ãæãå¯èœæ§ããããŸãã倿§ãªãŠãŒã¶ãŒã°ã«ãŒããšã®ãã¹ãã¯ããããã®éããæããã«ããããšãã§ããŸãã
- æ¯æŽæè¡ã®æ®åç: æ¯æŽæè¡ã®çš®é¡ãšæ®åçã¯å°åã«ãã£ãŠç°ãªãå ŽåããããŸããã¹ã¯ãªãŒã³ãªãŒããŒãšããŒããŒãããã²ãŒã·ã§ã³ã¯äžççã«é¢é£æ§ããããŸãããå°åã®å¥œã¿ãå¶éãçè§£ããããšã¯éçºã«åœ¹ç«ã¡ãŸãã
ããŒã«ã©ã€ãŒãŒã·ã§ã³ãšã¢ã¯ã»ã·ããªãã£
ãŠã§ããµã€ããããŒã«ã©ã€ãºããéãã¢ã¯ã»ã·ããªãã£ã¯ããã»ã¹å šäœãéããŠèæ ®ãããªããã°ãªããŸãããããã¯ä»¥äžã®ããšãæå³ããŸãïŒ
- ããŒã«ã©ã€ãºãããã³ã³ãã³ããã»ãã³ãã£ãã¯ãªæ§é ãç¶æããŠããããšã確èªããã
- 翻蚳ãããããã¹ãã§ãARIA屿§ãæ£ãããŸãŸã§ããããšãæ€èšŒããã
- ãµããŒããããŠãããã¹ãŠã®èšèªã§ããŒããŒãããã²ãŒã·ã§ã³ãšã¹ã¯ãªãŒã³ãªãŒããŒã®åºåããã¹ãããã
- ç°ãªãèšèªã§ã®ã¬ã€ã¢ãŠã倿Žããã©ãŒã«ã¹é åºãå¯èªæ§ã«åœ±é¿ãäžããå¯èœæ§ã«æ³šæããïŒäŸïŒããã¹ããå€§å¹ ã«é·ããªã£ããçããªã£ããããèšèªïŒã
ã¢ã¯ã»ã·ãã«ãªAPIãå®è£ ããããã®å®è·µçãªæŠç¥
ã¢ã¯ã»ã·ããªãã£APIã广çã«çµ±åããã«ã¯ãç©æ¥µçãªã¢ãããŒããšã€ã³ã¯ã«ãŒã·ããã¶ã€ã³ã®ååãžã®ã³ãããã¡ã³ããå¿ èŠã§ãã
1. ã»ãã³ãã£ãã¯HTMLãåªå ãã
åžžã«ãã€ãã£ãHTMLããå§ããŸããããã¢ã¯ã·ã§ã³ã«ã¯ãã¿ã³ããããã²ãŒã·ã§ã³ã«ã¯ãªã³ã¯ããæ§é ã«ã¯èŠåºããããªã¹ãé ç®ã«ã¯ãªã¹ãã䜿çšããŸããããã¯ã¢ã¯ã»ã·ããªãã£ã®ããã®åŒ·åºãªåºç€ãæäŸããŸãã
2. ARIAãè³¢æã«æŽ»çšãã
ãã€ãã£ãHTMLã®ã»ãã³ãã£ã¯ã¹ãäžååãªå Žåã«ã®ã¿ARIAã䜿çšããŠãã ãããäžæ£ç¢ºãªARIAã®å®è£ ã¯ãARIAããªãå Žåãããæå®³ã«ãªãå¯èœæ§ããããŸããã¢ã¯ã»ã·ãã«ãªã«ã¹ã¿ã ãŠã£ãžã§ããã®å ç¢ãªäŸã«ã€ããŠã¯ãARIA Authoring Practices Guide (APG) ãåç §ããŠãã ããã
3. 培åºçã«ãã¹ããã
èªååãããã¢ã¯ã»ã·ããªãã£ãã§ãã«ãŒã¯è¯ãåºçºç¹ã§ããããã¹ãŠãæ€åºããããšã¯ã§ããŸããã宿çãªæåãã¹ããäžå¯æ¬ ã§ãïŒ
- ããŒããŒãã®ã¿ã®ãã¹ã: ããŒããŒãã®ã¿ã䜿çšããŠãµã€ãå šäœãããã²ãŒãããŸãããã¹ãŠã®ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ã«å°éããæäœã§ããŸããïŒãã©ãŒã«ã¹ã®é åºã¯è«ççã§ããïŒããŒããŒããã©ããã¯ãããŸãããïŒ
- ã¹ã¯ãªãŒã³ãªãŒããŒãã¹ã: äžè¬çãªã¹ã¯ãªãŒã³ãªãŒããŒïŒäŸïŒNVDAãJAWSãVoiceOverãTalkBackïŒã䜿çšããŠãŠã§ããµã€ããäœéšããŸããã³ã³ãã³ããã©ã®ããã«èªã¿äžããããããèããã¢ã¯ã»ã·ãã«ãªååã®æçãã確èªããåçãªæŽæ°ãäŒéãããããšãæ€èšŒããŸãã
- ãŠãŒã¶ãŒãã¹ã: ãã¹ãããã»ã¹ã«é害ã®ãããŠãŒã¶ãŒãåå ãããŸãã圌ãã®æŽå¯ã¯ãçŸå®äžçã®ãŠãŒã¶ããªãã£åé¡ãç¹å®ããããã«éåžžã«è²Žéã§ãã
4. ããŒã ãæè²ãã
ãã¶ã€ããŒãéçºè ãã³ã³ãã³ãå¶äœè ãQAãã¹ã¿ãŒããŠã§ãã¢ã¯ã»ã·ããªãã£ã®ååãšãããå®è£ ããæ¹æ³ãçè§£ããŠããããšã確èªããŠãã ãããç¶ç¶çãªãã¬ãŒãã³ã°ãšãªãœãŒã¹ãæäŸããŸãã
5. ããã©ãŒãã³ã¹ãšã¢ã¯ã»ã·ããªãã£ãèæ ®ãã
ãªãããªã€ã³ã¿ã©ã¯ãã£ããã£ã«çŠç¹ãåœãŠãããšã¯éèŠã§ãããããã©ãŒãã³ã¹ãç ç²ã«ãªããªãããã«ããŠãã ãããèªã¿èŸŒã¿ãé ãããŒãžãé å»¶ã®ããã€ã³ã¿ã©ã¯ã·ã§ã³ã¯ãARIA屿§ã®æ¬ èœãšåããããã¢ã¯ã»ã·ããªãã£ã«æªåœ±é¿ãåãŒãå¯èœæ§ããããŸããã³ãŒããšã¢ã»ãããæé©åããŠãã ããã
ãŠã§ãã¢ã¯ã»ã·ããªãã£APIã®æªæ¥
ãŠã§ãã¢ã¯ã»ã·ããªãã£ã®ç¶æ³ã¯åžžã«é²åããŠããŸããç§ãã¡ã¯ä»¥äžã®åéã§ç¶ç¶çãªé²æ©ãæåŸ ã§ããŸãïŒ
- ãã©ãŠã¶ã𿝿޿è¡ã®ãµããŒãæ¡å€§: æšæºãæçããã«ã€ããŠãARIAããã®ä»ã®ã¢ã¯ã»ã·ããªãã£æ©èœã®ãµããŒãã¯ãšã³ã·ã¹ãã å šäœã§ããå ç¢ã«ãªããŸãã
- AIãšæ©æ¢°åŠç¿: ãããã®æè¡ã¯ãããã¢ã¯ã»ã·ãã«ãªã³ãŒããèªåçã«çæããããã¢ã¯ã»ã·ããªãã£ã®åé¡ãç¹å®ããããã圹å²ãæããå¯èœæ§ããããŸãã
- æ°ããARIAæ©èœ: W3Cã¯ãæ°ããªUIãã¿ãŒã³ãè€éãªã€ã³ã¿ã©ã¯ãã£ãã³ã³ããŒãã³ãã«å¯Ÿå¿ããããã«ARIAãæ¹è¯ãç¶ããŠããŸãã
- ãŠã§ãã³ã³ããŒãã³ããšãã¬ãŒã ã¯ãŒã¯: ãã¬ãŒã ã¯ãŒã¯ããŠã§ãã³ã³ããŒãã³ããããæ®åããã«ã€ããŠãããããæåããã¢ã¯ã»ã·ããªãã£ã念é ã«çœ®ããŠæ§ç¯ãããããšãäžå¯æ¬ ã«ãªããŸãã
çµè«
ãŠã§ãã¢ã¯ã»ã·ããªãã£APIãç¹ã«WAI-ARIAã¯ãã€ã³ã¯ã«ãŒã·ãã§å ¬å¹³ãªããžã¿ã«äœéšãæ§ç¯ããããã®äžå¯æ¬ ãªããŒã«ã§ãããããã®APIãçè§£ããæ£ããå®è£ ããããšã§ãéçºè ã¯ã¹ã¯ãªãŒã³ãªãŒããŒå¯Ÿå¿ãšããŒããŒãããã²ãŒã·ã§ã³ãå€§å¹ ã«åŒ·åããããããèœåã®ãŠãŒã¶ãŒããªã³ã©ã€ã³ã®äžçã«å®å šã«åå ã§ããããã«ããããšãã§ããŸããã°ããŒãã«ãªèŠç¹ãæã¡ãWCAGã®ãããªåœéæšæºãéµå®ããç¶ç¶çãªãã¹ããšæè²ã«åãçµãããšããçã«ãã¹ãŠã®äººã ã«åœ¹ç«ã€ãŠã§ããåµé ããããã®éµã§ããã¢ã¯ã»ã·ããªãã£ãåªå ããããšã¯ãåãªãæè¡çãªã¿ã¹ã¯ã§ã¯ãªããããã€ã³ã¯ã«ãŒã·ãã§å ¬æ£ãªããžã¿ã«ç€ŸäŒãžã®ã³ãããã¡ã³ãã§ãã