{"id":13205,"date":"2026-03-17T06:30:06","date_gmt":"2026-03-17T06:30:06","guid":{"rendered":"https:\/\/withcode.tech\/media\/?p=13205"},"modified":"2026-07-06T14:36:31","modified_gmt":"2026-07-06T14:36:31","slug":"wai-aria-complete-guide","status":"publish","type":"post","link":"https:\/\/withcode.tech\/media\/wai-aria-complete-guide\/","title":{"rendered":"WAI-ARIA\u5b8c\u5168\u30ac\u30a4\u30c9\uff5caria-label\u30fbaria-live\u30fb\u30d5\u30a9\u30fc\u30ab\u30b9\u7ba1\u7406\u30fb\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30fbReact\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u30fbaxe\u30c6\u30b9\u30c8\u307e\u3067\u5fb9\u5e95\u89e3\u8aac"},"content":{"rendered":"\n<div class=\"wp-block-group swl-box\"><div class=\"wp-block-group__inner-container\">\n<h2 class=\"wp-block-heading\">\u3053\u306e\u8a18\u4e8b\u3067\u308f\u304b\u308b\u3053\u3068<\/h2>\n<ul class=\"wp-block-list\">\n<li>WAI-ARIA\u3068\u306f\u4f55\u304b\u30fbWCAG\u3068\u306e\u95a2\u4fc2\u30fb\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u540d\u524d\u306e\u8a08\u7b97\u9806\u5e8f<\/li>\n<li>aria-label \/ aria-labelledby \/ aria-describedby \u306e\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/li>\n<li>aria-live\uff08\u30e9\u30a4\u30d6\u30ea\u30fc\u30b8\u30e7\u30f3\uff09\u3067\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u52d5\u7684\u901a\u77e5\u306e\u5b9f\u88c5\u65b9\u6cd5<\/li>\n<li>\u30d5\u30a9\u30fc\u30ab\u30b9\u7ba1\u7406\u30fb\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30fb\u30d5\u30a9\u30fc\u30ab\u30b9\u30c8\u30e9\u30c3\u30d7\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/li>\n<li>React\u3067\u306euseId\u6d3b\u7528\u30fbjest-axe\u81ea\u52d5\u30c6\u30b9\u30c8\u30fb\u3088\u304f\u3042\u308b\u9593\u9055\u3044\u3068\u4fee\u6b63\u65b9\u6cd5<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div class=\"swell-block-balloon\"><div class=\"c-balloon -bln-left\" data-col=\"gray\"><div class=\"c-balloon__icon -square\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/withcode.tech\/media\/wp-content\/uploads\/2025\/06\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-06-15-14.48.08.jpg\" alt=\"\" class=\"c-balloon__iconImg\" width=\"80px\" height=\"80px\"><span class=\"c-balloon__iconName\">\u751f\u5f92<\/span><\/div><div class=\"c-balloon__body -speaking -border-none\"><div class=\"c-balloon__text\">\n  <p><strong>\u30a2\u30a4\u30b3\u30f3\u3060\u3051\u306e\u30dc\u30bf\u30f3\u3092\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u3067\u8aad\u307f\u4e0a\u3052\u308b\u3068\u300c\u30dc\u30bf\u30f3\u300d\u3068\u3057\u304b\u8a00\u308f\u306a\u304f\u3066\u3001\u8996\u899a\u969c\u5bb3\u306e\u3042\u308b\u30e6\u30fc\u30b6\u30fc\u306b\u4f55\u306e\u30dc\u30bf\u30f3\u304b\u4f1d\u308f\u3089\u306a\u3044\u3093\u3067\u3059\u2026\u2026<\/strong><\/p>\n  <span class=\"c-balloon__shapes\"><span class=\"c-balloon__before\"><\/span><span class=\"c-balloon__after\"><\/span><\/span><\/div><\/div><\/div><\/div>\n\n  <div class=\"swell-block-balloon\"><div class=\"c-balloon -bln-right\" data-col=\"gray\"><div class=\"c-balloon__icon -square\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/withcode.tech\/media\/wp-content\/uploads\/2025\/06\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-06-15-15.11.23.jpg\" alt=\"\" class=\"c-balloon__iconImg\" width=\"80px\" height=\"80px\"><span class=\"c-balloon__iconName\">\u30da\u30f3\u535a\u58eb<\/span><\/div><div class=\"c-balloon__body -speaking -border-none\"><div class=\"c-balloon__text\">\n  <p><strong>\u305d\u308c\u306faria-label\u5c5e\u6027\u3067\u89e3\u6c7a\u3067\u304d\u308b\u3093\u3058\u3083\uff01\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u304c\u8aad\u307f\u4e0a\u3052\u308b\u30e9\u30d9\u30eb\u3092HTML\u306e\u5c5e\u6027\u3067\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u8996\u899a\u7684\u306a\u30c6\u30ad\u30b9\u30c8\u304c\u306a\u304f\u3066\u3082\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u540d\u524d\u3092\u63d0\u4f9b\u3067\u304d\u308b\u3093\u3058\u3083\u3002\u3055\u3089\u306baria-live\u30fb\u30d5\u30a9\u30fc\u30ab\u30b9\u7ba1\u7406\u30fb\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u5b8c\u5168\u306b\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306aUI\u304c\u5b9f\u73fe\u3067\u304d\u308b\u305e\uff01<\/strong><\/p>\n  <span class=\"c-balloon__shapes\"><span class=\"c-balloon__before\"><\/span><span class=\"c-balloon__after\"><\/span><\/span><\/div><\/div><\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d50\u8ad6\uff1aWAI-ARIA\u306fHTML\u306e\u30bb\u30de\u30f3\u30c6\u30a3\u30af\u30b9\u3092\u88dc\u5b8c\u3057\u3001\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306a\u3069\u306e\u652f\u63f4\u6280\u8853\u306b\u6b63\u78ba\u306a\u60c5\u5831\u3092\u4f1d\u3048\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002<\/strong>aria-label\u30fbaria-labelledby\u30fbaria-describedby\u3092\u4f7f\u3044\u5206\u3051\u3001aria-live\u3067\u52d5\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u901a\u77e5\u3057\u3001\u30d5\u30a9\u30fc\u30ab\u30b9\u7ba1\u7406\u3067\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u3092\u5b8c\u7d50\u3055\u305b\u308b\u3053\u3068\u3067\u3001\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u4f7f\u3048\u308bWeb\u30a2\u30d7\u30ea\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u672c\u8a18\u4e8b\u3067\u306f\u3001<strong><span class=\"swl-marker mark_yellow\">WAI-ARIA\u306e\u6982\u8981\u30fb\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u540d\u524d\u306e\u4ed5\u7d44\u307f\u30fbaria-label\/labelledby\/describedby\u306e\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051\u30fbaria-live\uff08\u30e9\u30a4\u30d6\u30ea\u30fc\u30b8\u30e7\u30f3\uff09\u30fbaria-hidden\u30fb\u30d5\u30a9\u30fc\u30ab\u30b9\u7ba1\u7406\u30fb\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30fb\u30d5\u30a9\u30fc\u30e0\/\u30e2\u30fc\u30c0\u30eb\/\u30c6\u30fc\u30d6\u30eb\/\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3\u306e\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u30d1\u30bf\u30fc\u30f3\u30fbReact\u306euseId\u30fbjest-axe\u306b\u3088\u308b\u81ea\u52d5\u30c6\u30b9\u30c8\u30fb\u3088\u304f\u3042\u308b\u9593\u9055\u3044\u3068\u4fee\u6b63\u65b9\u6cd5<\/span><\/strong>\u3092\u5b8c\u5168\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u3068WCAG\u3068\u306f<\/h2>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>&gt;\u3010\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\uff08a11y\uff09\u3068\u306f\u3011\n\nWeb\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\uff1a\u969c\u5bb3\u306e\u3042\u308b\u30e6\u30fc\u30b6\u30fc\u3092\u542b\u3080\u3059\u3079\u3066\u306e\u4eba\u304c\u3001\n                   Web\u30b5\u30a4\u30c8\u3084\u30a2\u30d7\u30ea\u3092\u4f7f\u3048\u308b\u3088\u3046\u306b\u3059\u308b\u3053\u3068\n\n\u5bfe\u8c61\u3068\u306a\u308b\u969c\u5bb3\u306e\u7a2e\u985e\uff1a\n\u2192 \u8996\u899a\u969c\u5bb3\uff08\u5168\u76f2\u30fb\u5f31\u8996\uff09\u2192 \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u4f7f\u7528\n\u2192 \u904b\u52d5\u969c\u5bb3\uff08\u624b\u306e\u9707\u3048\u306a\u3069\uff09\u2192 \u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u307f\u64cd\u4f5c\n\u2192 \u8a8d\u77e5\u30fb\u5b66\u7fd2\u969c\u5bb3 \u2192 \u660e\u78ba\u306a\u8a00\u8a9e\u30fb\u4e00\u8cab\u3057\u305fUI\u304c\u5fc5\u8981\n\u2192 \u8074\u899a\u969c\u5bb3 \u2192 \u52d5\u753b\u306e\u5b57\u5e55\u30fb\u97f3\u58f0\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30c6\u30ad\u30b9\u30c8\u4ee3\u66ff\n\n\u3010WCAG\uff08Web Content Accessibility Guidelines\uff09\u3011\nWeb\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306e\u56fd\u969b\u6a19\u6e96\u30024\u3064\u306e\u539f\u5247\u3092\u6301\u3064\uff1a\n1. \u77e5\u899a\u53ef\u80fd\uff08Perceivable\uff09: \u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u77e5\u899a\u3067\u304d\u308b\n2. \u64cd\u4f5c\u53ef\u80fd\uff08Operable\uff09: UI\u3092\u64cd\u4f5c\u3067\u304d\u308b\uff08\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u307f\u3067\u3082\uff09\n3. \u7406\u89e3\u53ef\u80fd\uff08Understandable\uff09: \u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u7406\u89e3\u3067\u304d\u308b\n4. \u5805\u7262\u6027\uff08Robust\uff09: \u652f\u63f4\u6280\u8853\u3067\u3082\u6b63\u3057\u304f\u52d5\u4f5c\u3059\u308b\n\n\u9054\u6210\u30ec\u30d9\u30eb\uff1a\n\u2192 Level A: \u6700\u4f4e\u9650\u306e\u5bfe\u5fdc\n\u2192 Level AA: \u63a8\u5968\uff08\u516c\u5171\u6a5f\u95a2\u306f\u7fa9\u52d9\u5316\u306e\u6d41\u308c\uff09\n\u2192 Level AAA: \u6700\u9ad8\u30ec\u30d9\u30eb\uff08\u3059\u3079\u3066\u306e\u5bfe\u5fdc\u304c\u96e3\u3057\u3044\u5834\u5408\u3082\uff09\n\n\u3010\u65e5\u672c\u306e\u6cd5\u7684\u80cc\u666f\u3011\n\u2192 \u969c\u5bb3\u8005\u5dee\u5225\u89e3\u6d88\u6cd5\u306e\u6539\u6b63\uff082024\u5e74\uff09\u306b\u3088\u308a\u3001\u5408\u7406\u7684\u914d\u616e\u304c\u7fa9\u52d9\u5316\n\u2192 JIS X 8341-3\uff08WCAG 2.1\u5bfe\u5fdc\uff09\u304c\u56fd\u5185\u6a19\u6e96\u898f\u683c<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">WAI-ARIA\u3068\u306f\uff5c\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u540d\u524d\u3092\u63d0\u4f9b\u3059\u308b\u4ed5\u7d44\u307f<\/h2>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>&gt;\u3010WAI-ARIA\uff08Web Accessibility Initiative - Accessible Rich Internet Applications\uff09\u3011\n\n\u76ee\u7684\uff1aHTML\u8981\u7d20\u306e\u610f\u5473\uff08role\uff09\u30fb\u72b6\u614b\uff08state\uff09\u30fb\u30d7\u30ed\u30d1\u30c6\u30a3\uff08property\uff09\u3092\u88dc\u5b8c\u3057\u3066\u3001\n     \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u7b49\u306e\u652f\u63f4\u6280\u8853\u306b\u6b63\u78ba\u306a\u60c5\u5831\u3092\u4f1d\u3048\u308b\n\n3\u3064\u306e\u30ab\u30c6\u30b4\u30ea\u30fc\uff1a\n1. Roles\uff08\u5f79\u5272\uff09: role=\"button\", role=\"dialog\", role=\"navigation\" \u7b49\n   \u2192 \u8981\u7d20\u304c\u4f55\u3067\u3042\u308b\u304b\u3092\u5b9a\u7fa9\n2. Properties\uff08\u30d7\u30ed\u30d1\u30c6\u30a3\uff09: aria-label, aria-required, aria-invalid \u7b49\n   \u2192 \u8981\u7d20\u306e\u7279\u6027\u30fb\u8a2d\u5b9a\u3092\u5b9a\u7fa9\uff08\u5909\u308f\u3089\u306a\u3044\u60c5\u5831\uff09\n3. States\uff08\u72b6\u614b\uff09: aria-expanded, aria-pressed, aria-checked \u7b49\n   \u2192 \u8981\u7d20\u306e\u73fe\u5728\u306e\u72b6\u614b\uff08\u52d5\u7684\u306b\u5909\u5316\u3059\u308b\u60c5\u5831\uff09\n\n\u300c\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u540d\u524d\uff08Accessible Name\uff09\u300d\u306e\u8a08\u7b97\u9806\u5e8f\uff1a\n1. aria-labelledby \u2192 \u53c2\u7167\u3059\u308b\u5225\u306e\u8981\u7d20\u306e\u30c6\u30ad\u30b9\u30c8\n2. aria-label \u2192 \u5c5e\u6027\u5024\u3092\u305d\u306e\u307e\u307e\u540d\u524d\u3068\u3057\u3066\u4f7f\u3046\n3. title\u5c5e\u6027\uff08\u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\uff09\n4. \u30c6\u30ad\u30b9\u30c8\u30b3\u30f3\u30c6\u30f3\u30c4\uff08button\u5185\u306e\u30c6\u30ad\u30b9\u30c8\u7b49\uff09\n5. alt\u5c5e\u6027\uff08\u753b\u50cf\u306e\u5834\u5408\uff09\n\nWAI-ARIA\u306e3\u5927\u539f\u5247\uff08ARIA\u3092\u4f7f\u3046\u524d\u306b\u78ba\u8a8d\uff01\uff09\uff1a\n1. \u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u306aHTML\u3067\u5b9f\u73fe\u3067\u304d\u308b\u3053\u3068\u306fARIA\u3092\u4f7f\u308f\u306a\u3044\n2. \u8996\u899a\u7684\u306a\u8868\u793a\u306b\u5408\u308f\u305b\u3066ARIA\u3082\u5909\u66f4\u3059\u308b\uff08\u540c\u671f\u3055\u305b\u308b\uff09\n3. \u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306aARIA\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306f\u30ad\u30fc\u30dc\u30fc\u30c9\u64cd\u4f5c\u53ef\u80fd\u306b\u3059\u308b<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">aria-label \u306e\u4f7f\u3044\u65b9\uff5c\u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3\u3078\u306e\u9069\u7528<\/h2>\n\n\n<div class=\"wp-block-image\">\n  <figure class=\"alignleft size-full\"><img decoding=\"async\" src=\"img\/aria_label_icon_button.png\" alt=\"aria-label\u3092\u4f7f\u3063\u305f\u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3\u306e\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u5b9f\u88c5\u4f8b\" class=\"wp-image-12610\"\/><\/figure>\n<\/div>\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;&lt;!-- ===== \u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3\u306e\u6b63\u3057\u3044\u5b9f\u88c5 ===== --&gt;\n\n&lt;!-- \u274c \u554f\u984c\u306e\u3042\u308b\u5b9f\u88c5 --&gt;\n&lt;button type=\"button\"&gt;\n  &lt;svg viewBox=\"0 0 24 24\"&gt;\n    &lt;path d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\/&gt;\n  &lt;\/svg&gt;\n&lt;\/button&gt;\n&lt;!-- \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc: \"\u30dc\u30bf\u30f3\" \u2192 \u4f55\u306e\u30dc\u30bf\u30f3\uff1f --&gt;\n\n&lt;!-- \u2705 aria-label \u3067\u540d\u524d\u3092\u63d0\u4f9b --&gt;\n&lt;button type=\"button\" aria-label=\"\u691c\u7d22\"&gt;\n  &lt;svg aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 24 24\"&gt;\n    &lt;!-- aria-hidden=\"true\": \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u304b\u3089\u96a0\u3059\uff08\u30dc\u30bf\u30f3\u306e\u30e9\u30d9\u30eb\u304c\u8aad\u307e\u308c\u308b\u305f\u3081\uff09 --&gt;\n    &lt;!-- focusable=\"false\": IE\u3067SVG\u306b\u30d5\u30a9\u30fc\u30ab\u30b9\u304c\u5f53\u305f\u308b\u554f\u984c\u3092\u9632\u3050 --&gt;\n    &lt;path d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\/&gt;\n  &lt;\/svg&gt;\n&lt;\/button&gt;\n&lt;!-- \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc: \"\u691c\u7d22 \u30dc\u30bf\u30f3\" --&gt;\n\n&lt;!-- \u2705 \u9589\u3058\u308b\u30dc\u30bf\u30f3 --&gt;\n&lt;button type=\"button\" aria-label=\"\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u9589\u3058\u308b\"&gt;\n  &lt;svg aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 24 24\"&gt;\n    &lt;path d=\"M6 18L18 6M6 6l12 12\"\/&gt;\n  &lt;\/svg&gt;\n&lt;\/button&gt;\n\n&lt;!-- \u2705 \u30c6\u30ad\u30b9\u30c8 + \u30a2\u30a4\u30b3\u30f3\u306e\u30dc\u30bf\u30f3\uff08aria-label\u306f\u4e0d\u8981\uff09 --&gt;\n&lt;button type=\"button\"&gt;\n  &lt;svg aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 24 24\"&gt;\n    &lt;path d=\"M12 4v16m8-8H4\"\/&gt;\n  &lt;\/svg&gt;\n  &lt;span&gt;\u8ffd\u52a0&lt;\/span&gt;\n&lt;\/button&gt;\n&lt;!-- \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc: \"\u8ffd\u52a0 \u30dc\u30bf\u30f3\"\uff08\u30c6\u30ad\u30b9\u30c8\u304c\u8aad\u307e\u308c\u308b\uff09 --&gt;\n\n&lt;!-- \u2705 \u30c6\u30ad\u30b9\u30c8\u3068\u30a2\u30a4\u30b3\u30f3\u3067\u3001\u30a2\u30a4\u30b3\u30f3\u306b\u610f\u5473\u3092\u8ffd\u52a0\u3057\u305f\u3044\u5834\u5408 --&gt;\n&lt;button type=\"button\" aria-label=\"\u30ab\u30fc\u30c8\u306b\u8ffd\u52a0\"&gt;\n  &lt;svg aria-hidden=\"true\" focusable=\"false\"&gt;&lt;!-- \u30ab\u30fc\u30c8\u30a2\u30a4\u30b3\u30f3 --&gt;&lt;\/svg&gt;\n  &lt;span aria-hidden=\"true\"&gt;\u8ffd\u52a0&lt;\/span&gt;\n  &lt;!-- \u8996\u899a\u7684\u306b\u306f\u300c\u8ffd\u52a0\u300d\u3068\u8868\u793a\u3001ARIA\u3067\u306f\u300c\u30ab\u30fc\u30c8\u306b\u8ffd\u52a0\u300d\u3068\u8aad\u3080 --&gt;\n&lt;\/button&gt;<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">aria-labelledby\u30fbaria-describedby\uff5c\u5225\u8981\u7d20\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u53c2\u7167\u3059\u308b<\/h2>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;&lt;!-- ===== aria-labelledby ===== --&gt;\n&lt;!-- \u5225\u8981\u7d20\u306eID\u3092\u53c2\u7167\u3057\u3066\u305d\u306e\u8981\u7d20\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u30e9\u30d9\u30eb\u306b\u3059\u308b --&gt;\n\n&lt;!-- \u30e2\u30fc\u30c0\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0 --&gt;\n&lt;div role=\"dialog\"\n     aria-labelledby=\"modal-title\"\n     aria-describedby=\"modal-desc\"\n     aria-modal=\"true\"&gt;\n  &lt;h2 id=\"modal-title\"&gt;\u3054\u6ce8\u6587\u306e\u78ba\u8a8d&lt;\/h2&gt;\n  &lt;p id=\"modal-desc\"&gt;\u4ee5\u4e0b\u306e\u5185\u5bb9\u3067\u3054\u6ce8\u6587\u3057\u307e\u3059\u304b\uff1f\u6ce8\u6587\u5f8c\u306e\u30ad\u30e3\u30f3\u30bb\u30eb\u306f\u3067\u304d\u307e\u305b\u3093\u3002&lt;\/p&gt;\n  &lt;div&gt;\n    &lt;!-- \u6ce8\u6587\u5185\u5bb9 --&gt;\n  &lt;\/div&gt;\n  &lt;div&gt;\n    &lt;button type=\"button\"&gt;\u6ce8\u6587\u78ba\u5b9a&lt;\/button&gt;\n    &lt;button type=\"button\" aria-label=\"\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u9589\u3058\u308b\"&gt;\u00d7&lt;\/button&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;\n&lt;!-- \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc: \"\u3054\u6ce8\u6587\u306e\u78ba\u8a8d \u30c0\u30a4\u30a2\u30ed\u30b0 \uff08\u8aac\u660e\uff09\u4ee5\u4e0b\u306e\u5185\u5bb9\u3067...\" --&gt;\n\n&lt;!-- \u30bb\u30af\u30b7\u30e7\u30f3\u306e\u30e9\u30d9\u30ea\u30f3\u30b0\uff08\u540c\u3058\u540d\u524d\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u8907\u6570\u3042\u308b\u5834\u5408\uff09 --&gt;\n&lt;section aria-labelledby=\"news-heading\"&gt;\n  &lt;h2 id=\"news-heading\"&gt;\u6700\u65b0\u30cb\u30e5\u30fc\u30b9&lt;\/h2&gt;\n  &lt;!-- ... --&gt;\n&lt;\/section&gt;\n&lt;section aria-labelledby=\"popular-heading\"&gt;\n  &lt;h2 id=\"popular-heading\"&gt;\u4eba\u6c17\u8a18\u4e8b&lt;\/h2&gt;\n  &lt;!-- ... --&gt;\n&lt;\/section&gt;\n\n&lt;!-- \u8907\u6570\u306e\u8981\u7d20\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u30e9\u30d9\u30eb\u306b\u3059\u308b\uff08\u30b9\u30da\u30fc\u30b9\u533a\u5207\u308a\u3067\u8907\u6570ID\u6307\u5b9a\u53ef\u80fd\uff09 --&gt;\n&lt;table aria-labelledby=\"table-title table-subtitle\"&gt;\n  &lt;caption&gt;\n    &lt;span id=\"table-title\"&gt;2026\u5e741\u301c3\u6708&lt;\/span&gt;\n    &lt;span id=\"table-subtitle\"&gt;\u58f2\u4e0a\u5b9f\u7e3e&lt;\/span&gt;\n  &lt;\/caption&gt;\n  &lt;!-- ... --&gt;\n&lt;\/table&gt;\n&lt;!-- \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc: \"2026\u5e741\u301c3\u6708 \u58f2\u4e0a\u5b9f\u7e3e \u30c6\u30fc\u30d6\u30eb\" --&gt;<\/code><\/pre><\/div>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;&lt;!-- ===== aria-describedby ===== --&gt;\n&lt;!-- \u30e9\u30d9\u30eb\uff08\u540d\u524d\uff09\u3067\u306f\u306a\u304f\u88dc\u8db3\u8aac\u660e\u3092\u63d0\u4f9b\u3059\u308b --&gt;\n\n&lt;!-- \u30d5\u30a9\u30fc\u30e0\u306e\u5165\u529b\u8981\u4ef6\u3092\u8aac\u660e --&gt;\n&lt;div&gt;\n  &lt;label for=\"password\"&gt;\n    \u30d1\u30b9\u30ef\u30fc\u30c9 &lt;span aria-hidden=\"true\"&gt;*&lt;\/span&gt;\n    &lt;span class=\"sr-only\"&gt;\uff08\u5fc5\u9808\uff09&lt;\/span&gt;\n  &lt;\/label&gt;\n  &lt;input type=\"password\"\n         id=\"password\"\n         aria-describedby=\"password-hint\"\n         aria-required=\"true\"\n         autocomplete=\"new-password\"&gt;\n  &lt;p id=\"password-hint\" class=\"hint\"&gt;\n    8\u6587\u5b57\u4ee5\u4e0a\u3001\u5927\u6587\u5b57\u30fb\u6570\u5b57\u30fb\u8a18\u53f7\u3092\u5c11\u306a\u304f\u3068\u30821\u6587\u5b57\u305a\u3064\u542b\u3081\u3066\u304f\u3060\u3055\u3044\n  &lt;\/p&gt;\n&lt;\/div&gt;\n\n&lt;!-- \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u3068\u306e\u9023\u643a --&gt;\n&lt;div&gt;\n  &lt;label for=\"email\"&gt;\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9&lt;\/label&gt;\n  &lt;input type=\"email\"\n         id=\"email\"\n         aria-describedby=\"email-error\"\n         aria-invalid=\"true\"&gt;\n  &lt;p id=\"email-error\" role=\"alert\"&gt;\n    &lt;!-- role=\"alert\": \u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u5909\u308f\u3063\u305f\u3068\u304d\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u304c\u81ea\u52d5\u3067\u8aad\u307f\u4e0a\u3052\u308b --&gt;\n    \u6709\u52b9\u306a\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u4f8b: user@example.com\uff09\n  &lt;\/p&gt;\n&lt;\/div&gt;\n\n&lt;!-- \u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\u306e\u8aac\u660e --&gt;\n&lt;button type=\"button\"\n        aria-describedby=\"copy-tooltip\"\n        id=\"copy-btn\"&gt;\n  \u30b3\u30d4\u30fc\n&lt;\/button&gt;\n&lt;div id=\"copy-tooltip\" role=\"tooltip\"&gt;\n  \u30c6\u30ad\u30b9\u30c8\u3092\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\n&lt;\/div&gt;<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">aria-live\uff5c\u52d5\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8aad\u307f\u4e0a\u3052\uff08\u30e9\u30a4\u30d6\u30ea\u30fc\u30b8\u30e7\u30f3\uff09<\/h2>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;&lt;!-- ===== \u30e9\u30a4\u30d6\u30ea\u30fc\u30b8\u30e7\u30f3\uff08aria-live\uff09 ===== --&gt;\n&lt;!-- \u52d5\u7684\u306b\u5909\u5316\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306b\u901a\u77e5\u3059\u308b\u4ed5\u7d44\u307f --&gt;\n\n&lt;!-- aria-live=\"polite\": \u73fe\u5728\u306e\u8aad\u307f\u4e0a\u3052\u304c\u7d42\u308f\u3063\u305f\u3089\u901a\u77e5\uff08\u975e\u7dca\u6025\uff09 --&gt;\n&lt;div aria-live=\"polite\" aria-atomic=\"true\"&gt;\n  &lt;!-- \u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u5909\u308f\u308b\u3068\u81ea\u52d5\u7684\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u304c\u8aad\u307f\u4e0a\u3052\u308b --&gt;\n&lt;\/div&gt;\n\n&lt;!-- aria-live=\"assertive\": \u5373\u5ea7\u306b\u8aad\u307f\u4e0a\u3052\u3092\u4e2d\u65ad\u3057\u3066\u901a\u77e5\uff08\u7dca\u6025\uff09 --&gt;\n&lt;div aria-live=\"assertive\" id=\"error-message\"&gt;\n  &lt;!-- \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306a\u3069\u3001\u5373\u6642\u306e\u901a\u77e5\u304c\u5fc5\u8981\u306a\u5834\u5408 --&gt;\n&lt;\/div&gt;\n\n&lt;!-- role=\"status\": polite \u3068\u540c\u7b49\uff08\u30b9\u30c6\u30fc\u30bf\u30b9\u66f4\u65b0\u7528\uff09 --&gt;\n&lt;div role=\"status\"&gt;\u8aad\u307f\u8fbc\u307f\u4e2d...&lt;\/div&gt;\n\n&lt;!-- role=\"alert\": assertive \u3068\u540c\u7b49\uff08\u30a8\u30e9\u30fc\u30fb\u8b66\u544a\u7528\uff09 --&gt;\n&lt;div role=\"alert\"&gt;\u5165\u529b\u5185\u5bb9\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3059&lt;\/div&gt;\n\n&lt;!-- aria-atomic: true\u306a\u3089\u9818\u57df\u5168\u4f53\u3092\u518d\u8aad\u307f\u4e0a\u3052\u3001false\u306a\u3089\u5909\u66f4\u90e8\u5206\u306e\u307f --&gt;\n&lt;!-- aria-relevant: \u5909\u66f4\u306e\u7a2e\u985e\u3092\u6307\u5b9a\uff08additions, removals, text, all\uff09 --&gt;\n\n&lt;!-- \u5b9f\u88c5\u4f8b1: \u30d5\u30a9\u30fc\u30e0\u9001\u4fe1\u5f8c\u306e\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af --&gt;\n&lt;div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" id=\"form-feedback\"&gt;\n  &lt;!-- JS\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u633f\u5165\u3059\u308b --&gt;\n&lt;\/div&gt;\n\n&lt;!-- \u5b9f\u88c5\u4f8b2: \u30ab\u30fc\u30c8\u66f4\u65b0\u306e\u901a\u77e5 --&gt;\n&lt;div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\"&gt;\n  &lt;!-- \u8996\u899a\u7684\u306b\u306f\u975e\u8868\u793a\u3060\u304c\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306f\u8aad\u3080 --&gt;\n&lt;\/div&gt;<\/code><\/pre><\/div>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-javascript\" data-lang=\"JavaScript\"><code>&gt;\/\/ JavaScript \u3067\u30e9\u30a4\u30d6\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\nconst liveRegion = document.getElementById('form-feedback')\n\nasync function submitForm(data) {\n  try {\n    await api.submit(data)\n\n    \/\/ \u6210\u529f\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u30e9\u30a4\u30d6\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u8a2d\u5b9a\n    liveRegion.textContent = '\u30d5\u30a9\u30fc\u30e0\u306e\u9001\u4fe1\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002'\n    liveRegion.setAttribute('role', 'status')  \/\/ polite\n\n    \/\/ 3\u79d2\u5f8c\u306b\u30af\u30ea\u30a2\n    setTimeout(() =&gt; { liveRegion.textContent = '' }, 3000)\n  } catch (error) {\n    \/\/ \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u30e9\u30a4\u30d6\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u8a2d\u5b9a\n    liveRegion.textContent = `\u9001\u4fe1\u306b\u5931\u6557\u3057\u307e\u3057\u305f: ${error.message}`\n    liveRegion.setAttribute('role', 'alert')  \/\/ assertive\uff08\u5373\u5ea7\u306b\u8aad\u307f\u4e0a\u3052\uff09\n  }\n}<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u30d5\u30a9\u30fc\u30ab\u30b9\u7ba1\u7406\u3068\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3<\/h2>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;&lt;!-- ===== tabindex ===== --&gt;\n\n&lt;!-- tabindex=\"0\": \u30ad\u30fc\u30dc\u30fc\u30c9\u30d5\u30a9\u30fc\u30ab\u30b9\u306e\u5bfe\u8c61\u306b\u52a0\u3048\u308b\uff08\u901a\u5e38\u306e\u9806\u5e8f\uff09 --&gt;\n&lt;div role=\"button\" tabindex=\"0\" onclick=\"doSomething()\"&gt;\n  \u30ab\u30b9\u30bf\u30e0\u30dc\u30bf\u30f3\n&lt;\/div&gt;\n\n&lt;!-- tabindex=\"-1\": \u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u5f53\u3066\u3089\u308c\u308b\u304c\u3001Tab\u30ad\u30fc\u3067\u306f\u98db\u3070\u306a\u3044 --&gt;\n&lt;div id=\"modal\" tabindex=\"-1\"&gt;\n  &lt;!-- \u30e2\u30fc\u30c0\u30eb\u304c\u30aa\u30fc\u30d7\u30f3\u3057\u305f\u3068\u304d\u306bJS\u3067focus()\u3059\u308b --&gt;\n&lt;\/div&gt;\n\n&lt;!-- tabindex=\"\u6b63\u306e\u6570\"\uff08\u975e\u63a8\u5968\uff09: \u30d5\u30a9\u30fc\u30ab\u30b9\u9806\u5e8f\u3092\u6307\u5b9a\u3059\u308b\u304c\u8907\u96d1\u306b\u306a\u308a\u304c\u3061 --&gt;\n&lt;!-- \u30da\u30fc\u30b8\u306eDOM\u9806\u5e8f\u3067\u30d5\u30a9\u30fc\u30ab\u30b9\u304c\u81ea\u7136\u306b\u79fb\u52d5\u3059\u308b\u3088\u3046\u8a2d\u8a08\u3059\u308b\u3053\u3068\u304c\u63a8\u5968 --&gt;\n\n&lt;!-- ===== \u30d5\u30a9\u30fc\u30ab\u30b9\u30c8\u30e9\u30c3\u30d7\uff08\u30e2\u30fc\u30c0\u30eb\u5185\u3067\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u9589\u3058\u8fbc\u3081\u308b\uff09===== --&gt;\n&lt;!-- \u30e2\u30fc\u30c0\u30eb\u304c\u958b\u3044\u3066\u3044\u308b\u3068\u304d\u306f\u3001Tab\u30ad\u30fc\u3067\u30d5\u30a9\u30fc\u30ab\u30b9\u304c\u30e2\u30fc\u30c0\u30eb\u5185\u3060\u3051\u3092\u79fb\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b --&gt;<\/code><\/pre><\/div>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-javascript\" data-lang=\"JavaScript\"><code>&gt;\/\/ \u30d5\u30a9\u30fc\u30ab\u30b9\u30c8\u30e9\u30c3\u30d7\u306e\u5b9f\u88c5\nclass FocusTrap {\n  constructor(container) {\n    this.container = container\n    this.focusableSelectors = [\n      'a[href]', 'button:not([disabled])', 'input:not([disabled])',\n      'select:not([disabled])', 'textarea:not([disabled])',\n      '[tabindex]:not([tabindex=\"-1\"])',\n    ].join(', ')\n  }\n\n  getFocusableElements() {\n    return [...this.container.querySelectorAll(this.focusableSelectors)]\n  }\n\n  trap = (event) =&gt; {\n    if (event.key !== 'Tab') return\n\n    const focusable = this.getFocusableElements()\n    const first = focusable[0]\n    const last = focusable[focusable.length - 1]\n\n    if (event.shiftKey) {\n      \/\/ Shift+Tab: \u5f8c\u308d\u5411\u304d\u306b\u79fb\u52d5\n      if (document.activeElement === first) {\n        event.preventDefault()\n        last.focus()\n      }\n    } else {\n      \/\/ Tab: \u524d\u5411\u304d\u306b\u79fb\u52d5\n      if (document.activeElement === last) {\n        event.preventDefault()\n        first.focus()\n      }\n    }\n  }\n\n  activate() {\n    document.addEventListener('keydown', this.trap)\n    \/\/ \u30e2\u30fc\u30c0\u30eb\u306e\u6700\u521d\u306e\u30d5\u30a9\u30fc\u30ab\u30b9\u53ef\u80fd\u8981\u7d20\u306b\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u79fb\u3059\n    const focusable = this.getFocusableElements()\n    if (focusable.length &gt; 0) focusable[0].focus()\n  }\n\n  deactivate(returnFocusTo) {\n    document.removeEventListener('keydown', this.trap)\n    \/\/ \u30e2\u30fc\u30c0\u30eb\u3092\u9589\u3058\u305f\u3089\u3001\u30e2\u30fc\u30c0\u30eb\u3092\u958b\u3044\u305f\u30dc\u30bf\u30f3\u306b\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u623b\u3059\n    if (returnFocusTo) returnFocusTo.focus()\n  }\n}\n\n\/\/ \u30e2\u30fc\u30c0\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0\u306e\u5b9f\u88c5\u4f8b\nconst modalEl = document.getElementById('modal')\nconst openBtn = document.getElementById('open-modal')\nconst closeBtn = document.getElementById('close-modal')\nconst focusTrap = new FocusTrap(modalEl)\n\nopenBtn.addEventListener('click', () =&gt; {\n  modalEl.removeAttribute('hidden')\n  focusTrap.activate()  \/\/ \u30d5\u30a9\u30fc\u30ab\u30b9\u30c8\u30e9\u30c3\u30d7\u3092\u958b\u59cb\n})\n\ncloseBtn.addEventListener('click', () =&gt; {\n  modalEl.setAttribute('hidden', '')\n  focusTrap.deactivate(openBtn)  \/\/ \u5143\u306e\u30dc\u30bf\u30f3\u306b\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u623b\u3059\n})\n\n\/\/ Escape\u30ad\u30fc\u3067\u9589\u3058\u308b\ndocument.addEventListener('keydown', (e) =&gt; {\n  if (e.key === 'Escape' &amp;&amp; !modalEl.hidden) {\n    closeBtn.click()\n  }\n})<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u3088\u304f\u3042\u308b\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u96c6<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3\uff08\u5c55\u958b\/\u6298\u308a\u305f\u305f\u307f\uff09<\/h3>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;&lt;!-- \u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3 --&gt;\n&lt;div class=\"accordion\"&gt;\n  &lt;!-- aria-expanded: \u5c55\u958b\u72b6\u614b\u3092\u793a\u3059 --&gt;\n  &lt;button type=\"button\"\n          aria-expanded=\"false\"\n          aria-controls=\"accordion-panel-1\"\n          id=\"accordion-header-1\"&gt;\n    Q. \u3088\u304f\u3042\u308b\u8cea\u554f1\n  &lt;\/button&gt;\n  &lt;!-- aria-controls: \u3053\u306e\u30dc\u30bf\u30f3\u304c\u64cd\u4f5c\u3059\u308b\u8981\u7d20\u306eID\u3092\u6307\u5b9a --&gt;\n  &lt;div id=\"accordion-panel-1\"\n       role=\"region\"\n       aria-labelledby=\"accordion-header-1\"\n       hidden&gt;\n    &lt;p&gt;\u56de\u7b54\u30c6\u30ad\u30b9\u30c8...&lt;\/p&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;\n\n&lt;!-- JavaScript\u3067\u306e\u30c8\u30b0\u30eb --&gt;\nbutton.addEventListener('click', () =&gt; {\n  const isExpanded = button.getAttribute('aria-expanded') === 'true'\n  button.setAttribute('aria-expanded', String(!isExpanded))\n  panel.toggleAttribute('hidden')\n})<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u5168\u306a\u30d5\u30a9\u30fc\u30e0\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3<\/h3>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;&lt;!-- \u5b8c\u5168\u306b\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u30d5\u30a9\u30fc\u30e0\u5b9f\u88c5 --&gt;\n&lt;form novalidate&gt;\n  &lt;fieldset&gt;\n    &lt;legend&gt;\u30ed\u30b0\u30a4\u30f3\u60c5\u5831&lt;\/legend&gt;\n\n    &lt;div&gt;\n      &lt;label for=\"username\"&gt;\n        \u30e6\u30fc\u30b6\u30fc\u540d\n        &lt;span aria-hidden=\"true\"&gt;*&lt;\/span&gt;\n      &lt;\/label&gt;\n      &lt;!-- aria-required: \u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u793a\u3059 --&gt;\n      &lt;!-- aria-invalid: \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u3092\u793a\u3059\uff08\u521d\u671f\u306ffalse\uff09 --&gt;\n      &lt;!-- aria-describedby: \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3078\u306e\u53c2\u7167 --&gt;\n      &lt;input type=\"text\"\n             id=\"username\"\n             name=\"username\"\n             autocomplete=\"username\"\n             aria-required=\"true\"\n             aria-invalid=\"false\"\n             aria-describedby=\"username-error\"&gt;\n      &lt;!-- role=\"alert\": \u52d5\u7684\u306b\u73fe\u308c\u308b\u30a8\u30e9\u30fc\u3092\u81ea\u52d5\u3067\u8aad\u307f\u4e0a\u3052 --&gt;\n      &lt;span id=\"username-error\" role=\"alert\" aria-live=\"polite\"&gt;&lt;\/span&gt;\n    &lt;\/div&gt;\n\n    &lt;div&gt;\n      &lt;label for=\"current-password\"&gt;\u30d1\u30b9\u30ef\u30fc\u30c9&lt;\/label&gt;\n      &lt;input type=\"password\"\n             id=\"current-password\"\n             name=\"password\"\n             autocomplete=\"current-password\"\n             aria-required=\"true\"\n             aria-describedby=\"password-hint password-error\"&gt;\n      &lt;p id=\"password-hint\"&gt;\u534a\u89d2\u82f1\u6570\u5b578\u6587\u5b57\u4ee5\u4e0a&lt;\/p&gt;\n      &lt;span id=\"password-error\" role=\"alert\" aria-live=\"polite\"&gt;&lt;\/span&gt;\n    &lt;\/div&gt;\n\n    &lt;!-- \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u30b0\u30eb\u30fc\u30d7 --&gt;\n    &lt;fieldset&gt;\n      &lt;legend&gt;\u901a\u77e5\u8a2d\u5b9a &lt;span class=\"required\" aria-hidden=\"true\"&gt;*&lt;\/span&gt;&lt;\/legend&gt;\n      &lt;div&gt;\n        &lt;input type=\"checkbox\" id=\"notify-email\" name=\"notify\" value=\"email\"&gt;\n        &lt;label for=\"notify-email\"&gt;\u30e1\u30fc\u30eb\u901a\u77e5&lt;\/label&gt;\n      &lt;\/div&gt;\n      &lt;div&gt;\n        &lt;input type=\"checkbox\" id=\"notify-sms\" name=\"notify\" value=\"sms\"&gt;\n        &lt;label for=\"notify-sms\"&gt;SMS\u901a\u77e5&lt;\/label&gt;\n      &lt;\/div&gt;\n    &lt;\/fieldset&gt;\n\n  &lt;\/fieldset&gt;\n\n  &lt;!-- aria-busy: \u9001\u4fe1\u4e2d\u306e\u72b6\u614b\u3092\u793a\u3059 --&gt;\n  &lt;button type=\"submit\" id=\"submit-btn\" aria-busy=\"false\"&gt;\n    \u30ed\u30b0\u30a4\u30f3\n  &lt;\/button&gt;\n&lt;\/form&gt;\n\n&lt;style&gt;\n\/* \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306e\u307f\u306b\u8868\u793a\uff08\u8996\u899a\u7684\u306b\u96a0\u3059\uff09 *\/\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n&lt;\/style&gt;<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c9\u30de\u30fc\u30af<\/h3>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;&lt;!-- \u30e9\u30f3\u30c9\u30de\u30fc\u30af\u8981\u7d20\u3067\u30da\u30fc\u30b8\u69cb\u9020\u3092\u660e\u78ba\u5316\u3059\u308b --&gt;\n\n&lt;!-- \u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u306aHTML\u8981\u7d20\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067role\u3092\u6301\u3064 --&gt;\n&lt;header&gt;&lt;!-- role=\"banner\" \uff08\u30da\u30fc\u30b8\u5168\u4f53\u306e\u30d8\u30c3\u30c0\u30fc\uff09--&gt;&lt;\/header&gt;\n&lt;nav aria-label=\"\u30e1\u30a4\u30f3\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\"&gt;&lt;!-- role=\"navigation\" --&gt;&lt;\/nav&gt;\n&lt;main&gt;&lt;!-- role=\"main\" --&gt;&lt;\/main&gt;\n&lt;aside aria-label=\"\u30b5\u30a4\u30c9\u30d0\u30fc\"&gt;&lt;!-- role=\"complementary\" --&gt;&lt;\/aside&gt;\n&lt;footer&gt;&lt;!-- role=\"contentinfo\" --&gt;&lt;\/footer&gt;\n&lt;search&gt;&lt;!-- role=\"search\" \uff08HTML5.3+\uff09--&gt;&lt;\/search&gt;\n\n&lt;!-- \u540c\u3058\u7a2e\u985e\u306e\u30e9\u30f3\u30c9\u30de\u30fc\u30af\u304c\u8907\u6570\u3042\u308b\u5834\u5408\u306f\u533a\u5225\u3059\u308b --&gt;\n&lt;nav aria-label=\"\u30b0\u30ed\u30fc\u30d0\u30eb\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\"&gt;\n  &lt;!-- \u30d8\u30c3\u30c0\u30fc\u306e\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3 --&gt;\n&lt;\/nav&gt;\n\n&lt;nav aria-label=\"\u30d1\u30f3\u304f\u305a\u30ea\u30b9\u30c8\"&gt;\n  &lt;ol&gt;\n    &lt;li&gt;&lt;a href=\"\/\"&gt;\u30db\u30fc\u30e0&lt;\/a&gt;&lt;\/li&gt;\n    &lt;li&gt;&lt;a href=\"\/category\"&gt;\u30ab\u30c6\u30b4\u30ea\u30fc&lt;\/a&gt;&lt;\/li&gt;\n    &lt;li&gt;\n      &lt;!-- aria-current=\"page\": \u73fe\u5728\u306e\u30da\u30fc\u30b8\u3092\u793a\u3059 --&gt;\n      &lt;span aria-current=\"page\"&gt;\u73fe\u5728\u306e\u30da\u30fc\u30b8&lt;\/span&gt;\n    &lt;\/li&gt;\n  &lt;\/ol&gt;\n&lt;\/nav&gt;\n\n&lt;!-- \u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\uff08\u30ad\u30fc\u30dc\u30fc\u30c9\u30e6\u30fc\u30b6\u30fc\u306e\u30e1\u30a4\u30f3\u30b3\u30f3\u30c6\u30f3\u30c4\u3078\u306e\u76f4\u63a5\u79fb\u52d5\uff09 --&gt;\n&lt;a href=\"#main-content\" class=\"skip-link\"&gt;\u30e1\u30a4\u30f3\u30b3\u30f3\u30c6\u30f3\u30c4\u3078\u30b9\u30ad\u30c3\u30d7&lt;\/a&gt;\n&lt;nav&gt;&lt;!-- \u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\uff08\u30b9\u30ad\u30c3\u30d7\u5bfe\u8c61\uff09--&gt;&lt;\/nav&gt;\n&lt;main id=\"main-content\" tabindex=\"-1\"&gt;\n  &lt;!-- \u30e1\u30a4\u30f3\u30b3\u30f3\u30c6\u30f3\u30c4 --&gt;\n&lt;\/main&gt;\n\n&lt;style&gt;\n.skip-link {\n  position: absolute;\n  top: -100%;\n  left: 1rem;\n  background: #000;\n  color: #fff;\n  padding: 0.5rem 1rem;\n  z-index: 9999;\n  border-radius: 0 0 4px 4px;\n}\n.skip-link:focus {\n  top: 0;  \/* \u30d5\u30a9\u30fc\u30ab\u30b9\u6642\u3060\u3051\u8868\u793a *\/\n}\n&lt;\/style&gt;<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">React\u3067\u306eWAI-ARIA\u5b9f\u88c5<\/h2>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;\/\/ React 18+ \u306e useId \u3092\u4f7f\u3063\u305f\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u30d5\u30a9\u30fc\u30e0\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\nimport { useId, useState, useRef } from 'react'\n\ninterface FormFieldProps {\n  label: string\n  type?: 'text' | 'email' | 'password'\n  required?: boolean\n  hint?: string\n  error?: string\n}\n\nexport function FormField({ label, type = 'text', required, hint, error }: FormFieldProps) {\n  \/\/ useId: \u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3067\u3082\u4e00\u610f\u306aID\u3092\u751f\u6210\n  const id = useId()\n  const hintId = hint ? `${id}-hint` : undefined\n  const errorId = error ? `${id}-error` : undefined\n\n  const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined\n\n  return (\n    &lt;div&gt;\n      &lt;label htmlFor={id}&gt;\n        {label}\n        {required &amp;&amp; &lt;span aria-hidden=\"true\"&gt; *&lt;\/span&gt;}\n      &lt;\/label&gt;\n      &lt;input\n        type={type}\n        id={id}\n        aria-required={required}\n        aria-invalid={!!error}\n        aria-describedby={describedBy}\n      \/&gt;\n      {hint &amp;&amp; &lt;p id={hintId}&gt;{hint}&lt;\/p&gt;}\n      {error &amp;&amp; (\n        &lt;p id={errorId} role=\"alert\" style={{ color: 'red' }}&gt;\n          {error}\n        &lt;\/p&gt;\n      )}\n    &lt;\/div&gt;\n  )\n}<\/code><\/pre><\/div>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;\/\/ \u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u30c8\u30b0\u30eb\u30dc\u30bf\u30f3\nimport { useState } from 'react'\n\ninterface ToggleButtonProps {\n  label: string\n  defaultPressed?: boolean\n  onChange?: (pressed: boolean) =&gt; void\n}\n\nexport function ToggleButton({ label, defaultPressed = false, onChange }: ToggleButtonProps) {\n  const [isPressed, setIsPressed] = useState(defaultPressed)\n\n  const handleClick = () =&gt; {\n    const newState = !isPressed\n    setIsPressed(newState)\n    onChange?.(newState)\n  }\n\n  return (\n    &lt;button\n      type=\"button\"\n      aria-pressed={isPressed}\n      onClick={handleClick}\n      style={{\n        backgroundColor: isPressed ? '#3B82F6' : 'transparent',\n        color: isPressed ? 'white' : 'inherit',\n      }}\n    &gt;\n      {label}\n    &lt;\/button&gt;\n  )\n}\n\n\/\/ \u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u30e2\u30fc\u30c0\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0\nimport { useEffect, useRef } from 'react'\n\ninterface ModalProps {\n  isOpen: boolean\n  title: string\n  onClose: () =&gt; void\n  children: React.ReactNode\n  triggerRef: React.RefObject&lt;HTMLElement&gt;\n}\n\nexport function Modal({ isOpen, title, onClose, children, triggerRef }: ModalProps) {\n  const titleId = useId()\n  const modalRef = useRef&lt;HTMLDivElement&gt;(null)\n\n  useEffect(() =&gt; {\n    if (isOpen &amp;&amp; modalRef.current) {\n      \/\/ \u30e2\u30fc\u30c0\u30eb\u304c\u958b\u3044\u305f\u3089\u6700\u521d\u306e\u30d5\u30a9\u30fc\u30ab\u30b9\u53ef\u80fd\u8981\u7d20\u306b\u30d5\u30a9\u30fc\u30ab\u30b9\n      const firstFocusable = modalRef.current.querySelector&lt;HTMLElement&gt;(\n        'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n      )\n      firstFocusable?.focus()\n    } else if (!isOpen &amp;&amp; triggerRef.current) {\n      \/\/ \u30e2\u30fc\u30c0\u30eb\u304c\u9589\u3058\u305f\u3089\u5143\u306e\u30c8\u30ea\u30ac\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u623b\u3059\n      triggerRef.current.focus()\n    }\n  }, [isOpen])\n\n  if (!isOpen) return null\n\n  return (\n    &lt;div\n      role=\"dialog\"\n      aria-modal=\"true\"\n      aria-labelledby={titleId}\n      ref={modalRef}\n    &gt;\n      &lt;h2 id={titleId}&gt;{title}&lt;\/h2&gt;\n      {children}\n      &lt;button type=\"button\" onClick={onClose} aria-label=\"\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u9589\u3058\u308b\"&gt;\n        \u00d7\n      &lt;\/button&gt;\n    &lt;\/div&gt;\n  )\n}<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306e\u30c6\u30b9\u30c8\u65b9\u6cd5<\/h2>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;\/\/ jest-axe \u3092\u4f7f\u3063\u305f\u81ea\u52d5\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u30c6\u30b9\u30c8\n\/\/ npm install --save-dev jest-axe\n\nimport { render } from '@testing-library\/react'\nimport { axe, toHaveNoViolations } from 'jest-axe'\nimport { Button } from '.\/Button'\nimport { FormField } from '.\/FormField'\n\nexpect.extend(toHaveNoViolations)\n\ndescribe('Button \u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3', () =&gt; {\n  it('\u30a2\u30a4\u30b3\u30f3\u306e\u307f\u306e\u30dc\u30bf\u30f3\u306b\u306faria-label\u304c\u5fc5\u8981', async () =&gt; {\n    const { container } = render(\n      &lt;button type=\"button\" aria-label=\"\u691c\u7d22\"&gt;\n        &lt;svg aria-hidden=\"true\"&gt;&lt;!-- \u691c\u7d22\u30a2\u30a4\u30b3\u30f3 --&gt;&lt;\/svg&gt;\n      &lt;\/button&gt;\n    )\n    const results = await axe(container)\n    expect(results).toHaveNoViolations()\n  })\n\n  it('aria-label\u306a\u3057\u306e\u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3\u306faxe\u9055\u53cd\u306b\u306a\u308b', async () =&gt; {\n    const { container } = render(\n      &lt;button type=\"button\"&gt;\n        &lt;svg&gt;&lt;!-- \u691c\u7d22\u30a2\u30a4\u30b3\u30f3 --&gt;&lt;\/svg&gt;\n      &lt;\/button&gt;\n    )\n    const results = await axe(container)\n    \/\/ \u9055\u53cd\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\uff08\u30c6\u30b9\u30c8\u304c\u5931\u6557\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\uff09\n    expect(results.violations.length).toBeGreaterThan(0)\n  })\n})\n\ndescribe('FormField \u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3', () =&gt; {\n  it('label\u3068input\u304c\u6b63\u3057\u304f\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b', async () =&gt; {\n    const { container } = render(\n      &lt;FormField label=\"\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\" type=\"email\" required \/&gt;\n    )\n    const results = await axe(container)\n    expect(results).toHaveNoViolations()\n  })\n})<\/code><\/pre><\/div>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>&gt;\u3010\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u30c6\u30b9\u30c8\u65b9\u6cd5\u4e00\u89a7\u3011\n\n1. \u81ea\u52d5\u30c6\u30b9\u30c8\uff08\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u6642\uff09\uff1a\n   \u2192 jest-axe (Vitest\u7528: @axe-core\/vitest)\n   \u2192 Storybook Accessibility addon (a11y)\n   \u2192 eslint-plugin-jsx-a11y\uff08JSX\u8a18\u8ff0\u306elint\uff09\n\n2. \u30d6\u30e9\u30a6\u30b6DevTools\uff08\u958b\u767a\u6642\uff09\uff1a\n   \u2192 Chrome: Accessibility Tree\uff08DevTools &gt; Elements &gt; Accessibility\uff09\n   \u2192 Chrome: Lighthouse \u306e Accessibility \u30b9\u30b3\u30a2\n   \u2192 axe DevTools Chrome\u62e1\u5f35\u6a5f\u80fd\uff08\u7121\u6599\u7248\u3067\u5341\u5206\u306a\u691c\u51fa\uff09\n\n3. \u30ad\u30fc\u30dc\u30fc\u30c9\u64cd\u4f5c\u30c6\u30b9\u30c8\uff08\u624b\u52d5\uff09\uff1a\n   \u2192 Tab\u30ad\u30fc\u3067\u5168\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u8981\u7d20\u3092\u9806\u756a\u306b\u5de1\u56de\u3067\u304d\u308b\u304b\n   \u2192 Enter\u30ad\u30fc\u3068Space\u30ad\u30fc\u3067\u30dc\u30bf\u30f3\u30fb\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u64cd\u4f5c\u3067\u304d\u308b\u304b\n   \u2192 Escape\u30ad\u30fc\u3067\u30e2\u30fc\u30c0\u30eb\u30fb\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u3092\u9589\u3058\u3089\u308c\u308b\u304b\n   \u2192 \u30d5\u30a9\u30fc\u30ab\u30b9\u304c\u8996\u899a\u7684\u306b\u78ba\u8a8d\u3067\u304d\u308b\u304b\uff08\u30d5\u30a9\u30fc\u30ab\u30b9\u30ea\u30f3\u30b0\u304c\u898b\u3048\u308b\uff09\n\n4. \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u30c6\u30b9\u30c8\uff1a\n   \u2192 macOS\/iOS: VoiceOver (Command + F5\u3067\u30aa\u30f3)\n   \u2192 Windows: NVDA\uff08\u7121\u6599\uff09\/ JAWS\n   \u2192 Android: TalkBack<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u3088\u304f\u3042\u308b\u9593\u9055\u3044\u3068\u6b63\u3057\u3044\u5b9f\u88c5<\/h2>\n\n\n  \n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&gt;\u3010\u3088\u304f\u3042\u308b\u9593\u9055\u3044\u30d1\u30bf\u30fc\u30f3\u3011\n\n\u274c \u9593\u9055\u30441: div\u3084span\u3092\u30af\u30ea\u30c3\u30af\u53ef\u80fd\u306b\u3059\u308b\uff08role\u306a\u3057\u30fbkeydown\u672a\u5bfe\u5fdc\uff09\n&lt;div onclick=\"doSomething()\"&gt;\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044&lt;\/div&gt;\n\u2192 \u30ad\u30fc\u30dc\u30fc\u30c9\u64cd\u4f5c\u4e0d\u53ef\u30fb\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u304c\u30dc\u30bf\u30f3\u3068\u8a8d\u8b58\u3057\u306a\u3044\n\n\u2705 \u4fee\u6b63: button\u8981\u7d20\u3092\u4f7f\u3046\uff08\u307e\u305f\u306f\u9069\u5207\u306arole + tabindex + keydown\uff09\n&lt;button type=\"button\" onclick=\"doSomething()\"&gt;\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044&lt;\/button&gt;\n\n---\n\n\u274c \u9593\u9055\u30442: alt\u5c5e\u6027\u306e\u4ee3\u308f\u308a\u306baria-label\u3092\u753b\u50cf\u306b\u4f7f\u3046\n&lt;img src=\"hero.jpg\" aria-label=\"\u30d2\u30fc\u30ed\u30fc\u753b\u50cf\"&gt;\n\u2192 img\u306e\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u540d\u524d\u306falt\u5c5e\u6027\u304c\u6b63\u3057\u3044\u65b9\u6cd5\n\n\u2705 \u4fee\u6b63: alt\u3092\u4f7f\u3046\n&lt;img src=\"hero.jpg\" alt=\"\u685c\u306e\u82b1\u304c\u54b2\u3044\u3066\u3044\u308b\u516c\u5712\u306e\u5199\u771f\"&gt;\n\n---\n\n\u274c \u9593\u9055\u30443: aria-hidden=\"true\"\u306e\u307e\u307e\u5b50\u8981\u7d20\u306b\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u6b8b\u3059\n&lt;div aria-hidden=\"true\"&gt;\n  &lt;button tabindex=\"0\"&gt;\u3053\u306e\u30dc\u30bf\u30f3\u306faria-hidden\u89aa\u306e\u4e2d&lt;\/button&gt;\n&lt;\/div&gt;\n\u2192 \u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306f\u8aad\u307e\u306a\u3044\u304c\u30ad\u30fc\u30dc\u30fc\u30c9\u30d5\u30a9\u30fc\u30ab\u30b9\u306f\u53ef\u80fd\uff08\u6df7\u4e71\u3092\u751f\u3080\uff09\n\n\u2705 \u4fee\u6b63: aria-hidden\u306e\u8981\u7d20\u5185\u306e\u30d5\u30a9\u30fc\u30ab\u30b9\u53ef\u80fd\u8981\u7d20\u3082tabindex=\"-1\"\u306b\u3059\u308b\n&lt;div aria-hidden=\"true\"&gt;\n  &lt;button tabindex=\"-1\"&gt;\u3053\u306e\u30dc\u30bf\u30f3\uff08\u30d5\u30a9\u30fc\u30ab\u30b9\u4e0d\u53ef\uff09&lt;\/button&gt;\n&lt;\/div&gt;\n\n---\n\n\u274c \u9593\u9055\u30444: aria-label\u3068\u30c6\u30ad\u30b9\u30c8\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u4e0d\u4e00\u81f4\n&lt;button aria-label=\"\u524a\u9664\u3059\u308b\"&gt;\u9001\u4fe1&lt;\/button&gt;\n\u2192 \u97f3\u58f0\u5165\u529b\u30e6\u30fc\u30b6\u30fc\u304c\u300c\u9001\u4fe1\u3092\u30af\u30ea\u30c3\u30af\u300d\u3068\u8a00\u3063\u3066\u3082\u52d5\u304b\u306a\u3044\u5834\u5408\u304c\u3042\u308b\n\n\u2705 \u4fee\u6b63: aria-label\u306b\u306f\u30c6\u30ad\u30b9\u30c8\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u542b\u3081\u308b\u304b\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u5909\u3048\u308b\n&lt;button aria-label=\"\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3059\u308b\"&gt;\u524a\u9664&lt;\/button&gt;\n\n---\n\n\u274c \u9593\u9055\u30445: aria-required \u3092\u4f7f\u308f\u305arequired\u5c5e\u6027\u306e\u307f\n&lt;input type=\"text\" required&gt;\n\u2192 required\u5c5e\u6027\u306f\u30d6\u30e9\u30a6\u30b6\u306e\u30cd\u30a4\u30c6\u30a3\u30d6\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u7528\u3002ARIA\u3067\u660e\u793a\u7684\u306b\u4f1d\u3048\u308b\u306b\u306f\u5fc5\u9808\n\n\u2705 \u4fee\u6b63: aria-required \u3082\u8ffd\u52a0\uff08\u307e\u305f\u306f\u4e21\u65b9\u4f7f\u3046\uff09\n&lt;input type=\"text\" required aria-required=\"true\"&gt;<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u3088\u304f\u3042\u308b\u8cea\u554f\uff08FAQ\uff09<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Q1. aria-label\u3068title\u306e\u9055\u3044\u306f\u4f55\u3067\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A.<\/strong> <code>title<\/code>\u5c5e\u6027\u306f\u30db\u30d0\u30fc\u6642\u306b\u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u3001\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u540d\u524d\u306e\u8a08\u7b97\u306b\u3082\u4f7f\u308f\u308c\u307e\u3059\u304c\u3001<strong>\u512a\u5148\u9806\u4f4d\u304caria-label\u3088\u308a\u4f4e\u304f\u3001\u30bf\u30c3\u30c1\u30c7\u30d0\u30a4\u30b9\u3084\u30ad\u30fc\u30dc\u30fc\u30c9\u3067\u306f\u8868\u793a\u3055\u308c\u306a\u3044<\/strong>\u3068\u3044\u3046\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002aria-label\u306f\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306b\u78ba\u5b9f\u306b\u540d\u524d\u3092\u63d0\u4f9b\u3057\u3001title\u306e\u3088\u3046\u306a\u30d3\u30b8\u30e5\u30a2\u30eb\u8868\u793a\u306f\u3057\u307e\u305b\u3093\u3002\u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3\u3078\u306e\u540d\u524d\u63d0\u4f9b\u306b\u306faria-label\u3092\u4f7f\u7528\u3057\u3001\u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\u3068\u3057\u3066\u8996\u899a\u7684\u306b\u8868\u793a\u3057\u305f\u3044\u5834\u5408\u306faria-describedby\u3068JavaScript\u88fd\u306e\u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Q2. aria-hidden\u3068display:none\u306e\u9055\u3044\u306f\u4f55\u3067\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A.<\/strong> <code>display: none<\/code>\u3084<code>visibility: hidden<\/code>\u306fCSS\u3067\u8981\u7d20\u3092\u975e\u8868\u793a\u306b\u3057\u3001\u540c\u6642\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u304b\u3089\u3082\u96a0\u308c\u307e\u3059\u3002<strong>aria-hidden=&#8221;true&#8221;\u306f\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306e\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u30c4\u30ea\u30fc\u304b\u3089\u8981\u7d20\u3092\u9664\u5916\u3057\u307e\u3059\u304c\u3001\u8996\u899a\u7684\u306b\u306f\u8868\u793a\u3055\u308c\u305f\u307e\u307e<\/strong>\u3067\u3059\u3002\u4f8b\u3048\u3070\u88c5\u98fe\u7684\u306a\u30a2\u30a4\u30b3\u30f3SVG\u306f\u8996\u899a\u7684\u306b\u8868\u793a\u3057\u3064\u3064\u8aad\u307f\u4e0a\u3052\u304b\u3089\u9664\u5916\u3059\u308b\u305f\u3081\u306baria-hidden=&#8221;true&#8221;\u3092\u4f7f\u3044\u307e\u3059\u3002hidden\u5c5e\u6027\uff08HTML5\uff09\u306fdisplay: none\u3068\u540c\u7b49\u3067\u3001\u898b\u305f\u76ee\u3068\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u4e21\u65b9\u3067\u975e\u8868\u793a\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Q3. CSS\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\uff08::before\/::after\u306e\u5185\u5bb9\uff09\u306f\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u3067\u8aad\u307e\u308c\u307e\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A.<\/strong> CSS\u306e\u7591\u4f3c\u8981\u7d20\uff08::before\/::after\uff09\u3067content\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u4f7f\u3063\u305f\u6587\u5b57\uff08\u300c*\u300d\u300c\u5fc5\u9808\u300d\u7b49\uff09\u306f\u3001\u4e00\u90e8\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u3067\u8aad\u307f\u4e0a\u3052\u3089\u308c\u307e\u3059\u3002\u4e00\u65b9\u3001\u7d75\u6587\u5b57\u30fb\u30a2\u30a4\u30b3\u30f3\u30d5\u30a9\u30f3\u30c8\uff08FontAwesome\u7b49\uff09\u306econtent\u5024\u306f\u74b0\u5883\u306b\u3088\u3063\u3066\u8aad\u307f\u4e0a\u3052\u304c\u4e0d\u5b89\u5b9a\u3067\u3059\u3002\u91cd\u8981\u306a\u60c5\u5831\u3092CSS\u306econtent\u3067\u8868\u73fe\u3059\u308b\u3053\u3068\u306f\u907f\u3051\u3001<strong>HTML\u306b\u9069\u5207\u306baria\u5c5e\u6027\u3092\u4f7f\u3063\u3066\u610f\u5473\u3092\u63d0\u4f9b\u3059\u308b<\/strong>\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Q4. role=&#8221;presentation&#8221;\u3068aria-hidden=&#8221;true&#8221;\u306e\u9055\u3044\u306f\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A.<\/strong> <code>role=\"presentation\"<\/code>\uff08\u307e\u305f\u306f<code>role=\"none\"<\/code>\uff09\u306f\u305d\u306e\u8981\u7d20\u306e\u30ed\u30fc\u30eb\uff08\u610f\u5473\uff09\u3092\u524a\u9664\u3057\u307e\u3059\u304c\u3001\u30c6\u30ad\u30b9\u30c8\u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u8aad\u307f\u4e0a\u3052\u3089\u308c\u307e\u3059\u3002<code>aria-hidden=\"true\"<\/code>\u306f\u8981\u7d20\u5168\u4f53\u3092\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u30c4\u30ea\u30fc\u304b\u3089\u9664\u5916\u3059\u308b\u305f\u3081\u3001\u30c6\u30ad\u30b9\u30c8\u3082\u542b\u3081\u3066\u8aad\u307e\u308c\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u30ec\u30a4\u30a2\u30a6\u30c8\u76ee\u7684\u306e\u30c6\u30fc\u30d6\u30eb\uff08<code>&lt;table role=\"presentation\"&gt;<\/code>\uff09\u306a\u3069\u306b\u306frole=&#8221;presentation&#8221;\u3092\u4f7f\u3044\u3001\u5b8c\u5168\u306b\u96a0\u3057\u305f\u3044\u88c5\u98fe\u8981\u7d20\u306b\u306faria-hidden\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Q5. \u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306f\u306a\u305c\u5fc5\u8981\u3067\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A.<\/strong> \u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u307f\u3067\u64cd\u4f5c\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u306f\u3001\u30da\u30fc\u30b8\u3092\u8a2a\u554f\u3059\u308b\u305f\u3073\u306bTab\u30ad\u30fc\u3067\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30e1\u30cb\u30e5\u30fc\u30921\u3064\u305a\u3064\u901a\u904e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306f\u300c\u30e1\u30a4\u30f3\u30b3\u30f3\u30c6\u30f3\u30c4\u3078\u30b9\u30ad\u30c3\u30d7\u300d\u3068\u3044\u3046\u30ea\u30f3\u30af\u3092\u30da\u30fc\u30b8\u5148\u982d\u306b\u914d\u7f6e\u3057\u3001<strong>\u30ad\u30fc\u30dc\u30fc\u30c9\u30e6\u30fc\u30b6\u30fc\u304c\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u3092\u98db\u3070\u3057\u3066\u76f4\u63a5\u30b3\u30f3\u30c6\u30f3\u30c4\u306b\u5230\u9054\u3067\u304d\u308b<\/strong>\u3088\u3046\u306b\u3059\u308b\u3082\u306e\u3067\u3059\u3002\u901a\u5e38\u306ffocus\u6642\u306e\u307f\u8868\u793a\uff08CSS\u3067\u5236\u5fa1\uff09\u3057\u3001WCAG 2.1\u306eLevel A\u3067\u5fc5\u9808\u8981\u4ef6\u3068\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n  <ul class=\"wp-block-list\">\n    <li><strong>aria-label<\/strong>\uff1a\u77ed\u3044\u30e9\u30d9\u30eb\u3092\u76f4\u63a5\u5c5e\u6027\u5024\u3067\u6307\u5b9a\u3002\u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3\u30fb\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u306e\u8b58\u5225\u306b\u7279\u306b\u6709\u52b9\u3002<\/li>\n    <li><strong>aria-labelledby<\/strong>\uff1a\u30da\u30fc\u30b8\u4e0a\u306e\u5225\u8981\u7d20\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u30e9\u30d9\u30eb\u3068\u3057\u3066\u53c2\u7167\u3002\u30e2\u30fc\u30c0\u30eb\u306e\u30bf\u30a4\u30c8\u30eb\u3068\u306e\u9023\u643a\u306a\u3069\u306b\u4f7f\u3046\u3002\u8907\u6570ID\u3092\u30b9\u30da\u30fc\u30b9\u533a\u5207\u308a\u3067\u7d44\u307f\u5408\u308f\u305b\u3089\u308c\u308b\u3002<\/li>\n    <li><strong>aria-describedby<\/strong>\uff1a\u88dc\u8db3\u8aac\u660e\uff08\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u30fb\u5165\u529b\u8981\u4ef6\u30fb\u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\uff09\u3092\u63d0\u4f9b\u3002\u540d\u524d\u3067\u306f\u306a\u304f\u8aac\u660e\u3068\u3057\u3066\u6a5f\u80fd\u3059\u308b\u3002<\/li>\n    <li><strong>aria-live\uff08\u30e9\u30a4\u30d6\u30ea\u30fc\u30b8\u30e7\u30f3\uff09<\/strong>\uff1a\u52d5\u7684\u306b\u5909\u5316\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u5909\u66f4\u3092\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306b\u901a\u77e5\u3002polite\uff08\u5f85\u3063\u3066\u901a\u77e5\uff09\u3068assertive\uff08\u5373\u5ea7\u306b\u901a\u77e5\uff09\u3092\u4f7f\u3044\u5206\u3051\u308b\u3002<\/li>\n    <li><strong>aria-hidden<\/strong>\uff1a\u88c5\u98fe\u7684\u8981\u7d20\u3092\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u304b\u3089\u96a0\u3059\u3002SVG\u30a2\u30a4\u30b3\u30f3\u30fb\u88c5\u98fe\u753b\u50cf\u306b\u5fc5\u9808\u3002\u5b50\u8981\u7d20\u306e\u30d5\u30a9\u30fc\u30ab\u30b9\u306ftabindex=&#8221;-1&#8243;\u3067\u5408\u308f\u305b\u3066\u7121\u52b9\u5316\u3059\u308b\u3002<\/li>\n    <li><strong>\u30d5\u30a9\u30fc\u30ab\u30b9\u7ba1\u7406<\/strong>\uff1a\u30e2\u30fc\u30c0\u30eb\u958b\u6642\u306f\u6700\u521d\u306e\u30d5\u30a9\u30fc\u30ab\u30b9\u53ef\u80fd\u8981\u7d20\u306b\u30d5\u30a9\u30fc\u30ab\u30b9\u79fb\u52d5\u3002\u9589\u6642\u306f\u30c8\u30ea\u30ac\u30fc\u306b\u623b\u3059\u3002\u30d5\u30a9\u30fc\u30ab\u30b9\u30c8\u30e9\u30c3\u30d7\u3067\u30e2\u30fc\u30c0\u30eb\u5185\u306b\u9589\u3058\u8fbc\u3081\u308b\u3002<\/li>\n    <li><strong>\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u72b6\u614b<\/strong>\uff1aaria-expanded\uff08\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3\uff09\u30fbaria-pressed\uff08\u30c8\u30b0\u30eb\uff09\u30fbaria-current\uff08\u73fe\u5728\u30da\u30fc\u30b8\uff09\u3067\u72b6\u614b\u3092\u4f1d\u3048\u308b\u3002<\/li>\n    <li><strong>React\u306e\u5b9f\u88c5<\/strong>\uff1auseId\u3067ID\u3092\u5b89\u5168\u306b\u751f\u6210\u3002\u30d5\u30a9\u30fc\u30e0\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306f\u6c4e\u7528\u7684\u306awrapper\u578b\u306b\u3059\u308b\u3068ID\u306e\u7ba1\u7406\u304c\u697d\u306b\u306a\u308b\u3002<\/li>\n    <li><strong>\u30c6\u30b9\u30c8<\/strong>\uff1ajest-axe\u3067\u81ea\u52d5\u30c6\u30b9\u30c8\u30fbLighthouse\u3067\u30b9\u30b3\u30a2\u78ba\u8a8d\u30fbVoiceOver\u3067\u5b9f\u969b\u306e\u8aad\u307f\u4e0a\u3052\u3092\u78ba\u8a8d\u3059\u308b3\u6bb5\u968e\u306e\u30c6\u30b9\u30c8\u3092\u63a8\u5968\u3002<\/li>\n  <\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span class=\"swl-marker mark_yellow\">\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306f\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002\u300c\u307e\u305aaria-label\u3092\u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3\u306b\u8ffd\u52a0\u3059\u308b\u300d\u300c\u30d5\u30a9\u30fc\u30e0\u306elabel\u3092input\u306b\u95a2\u9023\u4ed8\u3051\u308b\u300d\u3068\u3044\u3046\u30b7\u30f3\u30d7\u30eb\u306a\u5b9f\u88c5\u304b\u3089\u59cb\u3081\u308b\u3060\u3051\u3067\u3082\u3001\u591a\u304f\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u4f53\u9a13\u304c\u6539\u5584\u3057\u307e\u3059\u3002jest-axe\u3092\u958b\u767a\u30d5\u30ed\u30fc\u306b\u7d44\u307f\u8fbc\u3081\u3070\u3001\u610f\u56f3\u305b\u305a\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u3092\u58ca\u3059\u3053\u3068\u3092\u9632\u304e\u3001\u7d99\u7d9a\u7684\u306b\u6539\u5584\u3067\u304d\u307e\u3059\u3002<\/span><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<!-- withmedia-related -->\n<h2 class=\"wp-block-heading\">\u95a2\u9023\u8a18\u4e8b<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/withcode.tech\/media\/markuplint-complete-guide\/\">Markuplint\u5b8c\u5168\u30ac\u30a4\u30c9\uff5c\u5168\u30eb\u30fc\u30eb\u89e3\u8aac\u30fbReact\/Vue\/Astro\u5bfe\u5fdc\u30fbVSCode\u30fbpre-commit\u30fbGitHub Actions\u30fb\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30eb\u30fb\u6bb5\u968e\u7684\u5c0e\u5165\u6226\u7565\u307e\u3067\u5fb9\u5e95\u89e3\u8aac<\/a><\/li>\n<li><a href=\"https:\/\/withcode.tech\/media\/webp_avif\/\">WebP\/AVIF\u5b8c\u5168\u30ac\u30a4\u30c9\uff5cpicture\u8981\u7d20\u3067\u5b9f\u88c5\u3059\u308b\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af<\/a><\/li>\n<li><a href=\"https:\/\/withcode.tech\/media\/content_security_policy\/\">CSP\u5b8c\u5168\u30ac\u30a4\u30c9\uff5cXSS\u5bfe\u7b56\u304b\u3089\u6bb5\u968e\u7684\u5c0e\u5165\u307e\u3067\u30102026\u5e74\u7248\u3011<\/a><\/li>\n<li><a href=\"https:\/\/withcode.tech\/media\/jamstackform_explanation\/\">Jamstack\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u30102026\u5e74\u7248\u3011\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u5b9f\u88c5\u5b8c\u5168\u30ac\u30a4\u30c9<\/a><\/li>\n<li><a href=\"https:\/\/withcode.tech\/media\/details_summary\/\">details\u30fbsummary\u30bf\u30b0\u5b8c\u5168\u30ac\u30a4\u30c9\u30102026\u5e74\u7248\u3011\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3UI\u5b9f\u88c5<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<!-- withmedia-references -->\n<h2 class=\"wp-block-heading\">\u53c2\u8003\u30ea\u30f3\u30af\uff08\u516c\u5f0f\u30fb\u4e00\u6b21\u60c5\u5831\uff09<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.mozilla.org\/ja\/docs\/Web\/HTML\" target=\"_blank\" rel=\"noopener noreferrer\">MDN Web Docs \u2014 HTML<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/ja\/docs\/Web\/JavaScript\" target=\"_blank\" rel=\"noopener noreferrer\">MDN Web Docs \u2014 JavaScript<\/a><\/li>\n<li><a href=\"https:\/\/ja.react.dev\/\" target=\"_blank\" rel=\"noopener noreferrer\">React \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">WithCode\u3092\u4f53\u9a13\u3067\u304d\u308b\u521d\u7d1a\u30b3\u30fc\u30b9\u516c\u958b\u4e2d\uff01<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full\"><img decoding=\"async\" width=\"600\" height=\"500\" src=\"https:\/\/withcode.tech\/media\/wp-content\/uploads\/2024\/04\/\u30d0\u30ca\u30fc_300\u00d7250_20240425.png\" alt=\"\" class=\"wp-image-2650\"\/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">\u521d\u7d1a\u30b3\u30fc\u30b9(\u00a549,800)\u304c\u5b8c\u5168\u7121\u6599\u306b\uff01<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u671f\u9593\uff1a1\u9031\u9593<\/strong><\/li>\n<li><strong>\u5b66\u7fd2\u5185\u5bb9\uff1a<\/strong><br><strong>\u30ed\u30fc\u30c9\u30de\u30c3\u30d7\/\u57fa\u790e\u77e5\u8b58\/\u74b0\u5883\u69cb\u7bc9\/HTML\/CSS\/LP\u30fb\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u4f5c\u6210<\/strong><br><strong>\u2192 <span class=\"swl-marker mark_yellow\">\u6b63\u3057\u3044\u5b66\u7fd2\u65b9\u6cd5\u3067\u300c\u78ba\u304b\u306a\u6210\u9577\u300d\u3092\u5b9f\u611f\u3067\u304d\u308b\u30ab\u30ea\u30ad\u30e5\u30e9\u30e0\u3002<\/span><\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u526f\u696d\u30fb\u30d5\u30ea\u30fc\u30e9\u30f3\u30b9\u304c\u4e3b\u6d41\u306b\u306a\u3063\u3066\u3044\u308b\u4eca\u3053\u305d\u3001\u81ea\u3089\u306e\u30b9\u30ad\u30eb\u3067\u7a3c\u3052\u308b\u4eba\u6750\u3092\u76ee\u6307\u3057\u3066\u307f\u307e\u305b\u3093\u304b\uff1f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u672a\u7d4c\u9a13\u3067\u3082\u5fc3\u914d\u3059\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u521d\u7d1a\u30b3\u30fc\u30b9\u3092\u53d7\u8b1b\u3055\u308c\u308b\u65b9\u306e\u5927\u591a\u6570\u306f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u672a\u7d4c\u9a13\u3067\u3059\u3002\u307e\u305a\u306f\u7121\u6599\u30ab\u30a6\u30f3\u30bb\u30ea\u30f3\u30b0\u3067\u3001\u60a9\u307f\u3084\u4e0d\u5b89\u3092\u304a\u805e\u304b\u305b\u304f\u3060\u3055\u3044\uff01<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-white-color has-text-color has-background has-link-color wp-element-button\" href=\"https:\/\/withcode.tech\/reservation\/\" style=\"background-color:#ffbf00\"><strong>\u516c\u5f0f\u30b5\u30a4\u30c8\u304b\u3089\u7121\u6599\u30ab\u30a6\u30f3\u30bb\u30ea\u30f3\u30b0\u306b\u7533\u3057\u8fbc\u3080 \u2192<\/strong><\/a><\/div>\n<\/div>\n\n\n\n<!-- withmedia-faq-schema -->\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"aria-label\u3068title\u306e\u9055\u3044\u306f\u4f55\u3067\u3059\u304b\uff1f\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"title\u5c5e\u6027\u306f\u30db\u30d0\u30fc\u6642\u306b\u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u3001\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306a\u540d\u524d\u306e\u8a08\u7b97\u306b\u3082\u4f7f\u308f\u308c\u307e\u3059\u304c\u3001\u512a\u5148\u9806\u4f4d\u304caria-label\u3088\u308a\u4f4e\u304f\u3001\u30bf\u30c3\u30c1\u30c7\u30d0\u30a4\u30b9\u3084\u30ad\u30fc\u30dc\u30fc\u30c9\u3067\u306f\u8868\u793a\u3055\u308c\u306a\u3044\u3068\u3044\u3046\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002aria-label\u306f\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306b\u78ba\u5b9f\u306b\u540d\u524d\u3092\u63d0\u4f9b\u3057\u3001title\u306e\u3088\u3046\u306a\u30d3\u30b8\u30e5\u30a2\u30eb\u8868\u793a\u306f\u3057\u307e\u305b\u3093\u3002\u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3\u3078\u306e\u540d\u524d\u63d0\u4f9b\u306b\u306faria-label\u3092\u4f7f\u7528\u3057\u3001\u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\u3068\u3057\u3066\u8996\u899a\u7684\u306b\u8868\u793a\u3057\u305f\u3044\u5834\u5408\u306faria-describedby\u3068JavaScript\u88fd\u306e\u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\u3002\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"aria-hidden\u3068display:none\u306e\u9055\u3044\u306f\u4f55\u3067\u3059\u304b\uff1f\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"display: none\u3084visibility: hidden\u306fCSS\u3067\u8981\u7d20\u3092\u975e\u8868\u793a\u306b\u3057\u3001\u540c\u6642\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u304b\u3089\u3082\u96a0\u308c\u307e\u3059\u3002aria-hidden=\\\"true\\\"\u306f\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u306e\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u30c4\u30ea\u30fc\u304b\u3089\u8981\u7d20\u3092\u9664\u5916\u3057\u307e\u3059\u304c\u3001\u8996\u899a\u7684\u306b\u306f\u8868\u793a\u3055\u308c\u305f\u307e\u307e\u3067\u3059\u3002\u4f8b\u3048\u3070\u88c5\u98fe\u7684\u306a\u30a2\u30a4\u30b3\u30f3SVG\u306f\u8996\u899a\u7684\u306b\u8868\u793a\u3057\u3064\u3064\u8aad\u307f\u4e0a\u3052\u304b\u3089\u9664\u5916\u3059\u308b\u305f\u3081\u306baria-hidden=\\\"true\\\"\u3092\u4f7f\u3044\u307e\u3059\u3002hidden\u5c5e\u6027\uff08HTML5\uff09\u306fdisplay: none\u3068\u540c\u7b49\u3067\u3001\u898b\u305f\u76ee\u3068\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u4e21\u65b9\u3067\u975e\u8868\u793a\u306b\u306a\u308a\u307e\u3059\u3002\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"CSS\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\uff08::before\/::after\u306e\u5185\u5bb9\uff09\u306f\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u3067\u8aad\u307e\u308c\u307e\u3059\u304b\uff1f\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"CSS\u306e\u7591\u4f3c\u8981\u7d20\uff08::before\/::after\uff09\u3067content\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u4f7f\u3063\u305f\u6587\u5b57\uff08\u300c*\u300d\u300c\u5fc5\u9808\u300d\u7b49\uff09\u306f\u3001\u4e00\u90e8\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30ea\u30fc\u30c0\u30fc\u3067\u8aad\u307f\u4e0a\u3052\u3089\u308c\u307e\u3059\u3002\u4e00\u65b9\u3001\u7d75\u6587\u5b57\u30fb\u30a2\u30a4\u30b3\u30f3\u30d5\u30a9\u30f3\u30c8\uff08FontAwesome\u7b49\uff09\u306econtent\u5024\u306f\u74b0\u5883\u306b\u3088\u3063\u3066\u8aad\u307f\u4e0a\u3052\u304c\u4e0d\u5b89\u5b9a\u3067\u3059\u3002\u91cd\u8981\u306a\u60c5\u5831\u3092CSS\u306econtent\u3067\u8868\u73fe\u3059\u308b\u3053\u3068\u306f\u907f\u3051\u3001HTML\u306b\u9069\u5207\u306baria\u5c5e\u6027\u3092\u4f7f\u3063\u3066\u610f\u5473\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\u3002\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"role=\\\"presentation\\\"\u3068aria-hidden=\\\"true\\\"\u306e\u9055\u3044\u306f\uff1f\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"role=\\\"presentation\\\"\uff08\u307e\u305f\u306frole=\\\"none\\\"\uff09\u306f\u305d\u306e\u8981\u7d20\u306e\u30ed\u30fc\u30eb\uff08\u610f\u5473\uff09\u3092\u524a\u9664\u3057\u307e\u3059\u304c\u3001\u30c6\u30ad\u30b9\u30c8\u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u8aad\u307f\u4e0a\u3052\u3089\u308c\u307e\u3059\u3002aria-hidden=\\\"true\\\"\u306f\u8981\u7d20\u5168\u4f53\u3092\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u30c4\u30ea\u30fc\u304b\u3089\u9664\u5916\u3059\u308b\u305f\u3081\u3001\u30c6\u30ad\u30b9\u30c8\u3082\u542b\u3081\u3066\u8aad\u307e\u308c\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u30ec\u30a4\u30a2\u30a6\u30c8\u76ee\u7684\u306e\u30c6\u30fc\u30d6\u30eb\uff08<table role=\\\"presentation\\\">\uff09\u306a\u3069\u306b\u306frole=\\\"presentation\\\"\u3092\u4f7f\u3044\u3001\u5b8c\u5168\u306b\u96a0\u3057\u305f\u3044\u88c5\u98fe\u8981\u7d20\u306b\u306faria-hidden\u3092\u4f7f\u3044\u307e\u3059\u3002\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306f\u306a\u305c\u5fc5\u8981\u3067\u3059\u304b\uff1f\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u307f\u3067\u64cd\u4f5c\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u306f\u3001\u30da\u30fc\u30b8\u3092\u8a2a\u554f\u3059\u308b\u305f\u3073\u306bTab\u30ad\u30fc\u3067\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30e1\u30cb\u30e5\u30fc\u30921\u3064\u305a\u3064\u901a\u904e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306f\u300c\u30e1\u30a4\u30f3\u30b3\u30f3\u30c6\u30f3\u30c4\u3078\u30b9\u30ad\u30c3\u30d7\u300d\u3068\u3044\u3046\u30ea\u30f3\u30af\u3092\u30da\u30fc\u30b8\u5148\u982d\u306b\u914d\u7f6e\u3057\u3001\u30ad\u30fc\u30dc\u30fc\u30c9\u30e6\u30fc\u30b6\u30fc\u304c\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u3092\u98db\u3070\u3057\u3066\u76f4\u63a5\u30b3\u30f3\u30c6\u30f3\u30c4\u306b\u5230\u9054\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u3082\u306e\u3067\u3059\u3002\u901a\u5e38\u306ffocus\u6642\u306e\u307f\u8868\u793a\uff08CSS\u3067\u5236\u5fa1\uff09\u3057\u3001WCAG 2.1\u306eLevel A\u3067\u5fc5\u9808\u8981\u4ef6\u3068\u3055\u308c\u3066\u3044\u307e\u3059\u3002\"\n      }\n    }\n  ]\n}\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>WAI-ARIA\u306earia-label\u30fbaria-labelledby\u30fbaria-describedby\u30fbaria-live\u306e\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051\u3092\u5b9f\u88c5\u30b3\u30fc\u30c9\u4ed8\u304d\u3067\u89e3\u8aac\u3002\u30d5\u30a9\u30fc\u30ab\u30b9\u7ba1\u7406\u30fb\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30fbReact useId\u30fbjest-axe\u81ea\u52d5\u30c6\u30b9\u30c8\u307e\u3067\u3001\u30a2\u30af\u30bb\u30b7\u30d6\u30eb\u306aUI\u5b9f\u88c5\u306e\u5168\u624b\u6cd5\u3092\u7db2\u7f85\u3057\u305f\u5b8c\u5168\u30ac\u30a4\u30c9\u3067\u3059\u3002<\/p>\n","protected":false},"author":2,"featured_media":14327,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"swell_btn_cv_data":"","footnotes":"","vk-ltc-link":"","vk-ltc-target":"0"},"categories":[34,358],"tags":[],"class_list":["post-13205","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming","category-html"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/posts\/13205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/comments?post=13205"}],"version-history":[{"count":11,"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/posts\/13205\/revisions"}],"predecessor-version":[{"id":16204,"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/posts\/13205\/revisions\/16204"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/media\/14327"}],"wp:attachment":[{"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/media?parent=13205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/categories?post=13205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/withcode.tech\/media\/wp-json\/wp\/v2\/tags?post=13205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}