メインコンテンツまでスキップ

12. Accessibility

アクセシビリティは、全てのユーザーがアプリケーションを利用できるようにするために重要な要素です。特に、障害を持つユーザーがサイトを利用できるようにすることは、法的要件や道徳的義務であると同時に、ユーザー体験を向上させるためにも重要です。

アクセシビリティの基本

アクセシビリティ(Accessibility)は、略して「a11y」とも呼ばれ、以下のようなガイドラインとベストプラクティスに従って実現します:

  • WCAG(Web Content Accessibility Guidelines): W3Cが提供するウェブコンテンツのアクセシビリティガイドライン。
  • ARIA(Accessible Rich Internet Applications): インタラクティブなウェブコンテンツをアクセシブルにするための仕様。

ARIA

ARIA(Accessible Rich Internet Applications)は、ウェブアプリケーションのアクセシビリティを向上させるための属性を提供します。これにより、スクリーンリーダーや他の支援技術がコンテンツをより適切に解釈できます。

ARIA属性の例

  • aria-label: 要素のラベルを提供します。
  • aria-hidden: 要素を支援技術から隠します。
  • aria-live: 動的コンテンツの更新を通知します。

使用例

以下は、aria-label属性を使用してボタンの目的を説明する例です:

<button aria-label="Close modal">X</button>

色とコントラスト

色とコントラストは、テキストやインターフェースの要素が視覚的に識別しやすくなるようにするために重要です。十分なコントラストを確保することで、視覚障害を持つユーザーがコンテンツを読みやすくなります。

コントラスト比の基準

WCAGでは、以下のコントラスト比が推奨されています:

  • 通常テキスト: 最低 4.5:1
  • 大きなテキスト: 最低 3:1

コントラスト比のチェックツール

コントラスト比をチェックするためのツールを使用して、デザインのアクセシビリティを確認します。代表的なツールには、以下があります:

使用例

以下は、十分なコントラストを持つ色の例です:

/* 高コントラストのテキスト */
.high-contrast-text {
color: #000000; /* 黒 */
background-color: #FFFFFF; /* 白 */
}

フォーカス管理

フォーカス管理は、キーボードのみを使用するユーザーがアプリケーションをナビゲートできるようにするために重要です。フォーカスリングやフォーカストラップの実装を行います。

フォーカスリング

フォーカス可能な要素には、フォーカスリング(focus ring)を表示して、ユーザーが現在どの要素にフォーカスしているかを視覚的に示します。

使用例

button:focus {
outline: 2px solid #0000FF; /* 青色のアウトライン */
}

フォーカストラップ

モーダルダイアログなどでフォーカスが閉じ込められないようにするために、フォーカストラップを実装します。

使用例

以下は、簡単なフォーカストラップの実装例です:

import React, { useEffect, useRef } from 'react';

function Modal({ isOpen, onClose }) {
const firstFocusableElement = useRef(null);
const lastFocusableElement = useRef(null);

useEffect(() => {
if (isOpen) {
firstFocusableElement.current.focus();
}
}, [isOpen]);

const handleKeyDown = (e) => {
if (e.key === 'Tab') {
if (e.shiftKey) {
if (document.activeElement === firstFocusableElement.current) {
e.preventDefault();
lastFocusableElement.current.focus();
}
} else {
if (document.activeElement === lastFocusableElement.current) {
e.preventDefault();
firstFocusableElement.current.focus();
}
}
}
};

return (
isOpen && (
<div role="dialog" aria-modal="true" onKeyDown={handleKeyDown}>
<button ref={firstFocusableElement}>Close</button>
<p>Modal content...</p>
<button ref={lastFocusableElement}>Close</button>
</div>
)
);
}

export default Modal;

このように進めていきます。他に追加や修正の希望があればお知らせください。