CodeConnect Design System

アクセシビリティ

CodeConnect Design Systemは、すべてのユーザーがアクセスできる包括的なデジタル体験を提供することを目指しています。WCAG 2.1 レベルAAに準拠し、アクセシブルなコンポーネントとパターンを提供します。

WCAG準拠

WCAG 2.1 レベルAA準拠

知覚可能: 情報とUIコンポーネントをユーザーが認識できる
操作可能: UIコンポーネントとナビゲーションが操作可能
理解可能: 情報とUIの操作が理解可能
堅牢: 支援技術を含む様々な方法で解釈可能

カラーコントラスト

すべてのテキストとUIコンポーネントは、適切なカラーコントラストを確保しています。

通常テキスト

コントラスト比 4.5:1 以上

プライマリテキスト7.2:1
セカンダリテキスト4.8:1

大きなテキスト

18pt以上: 3:1 以上

見出し7.2:1
ブランドテキスト5.1:1

キーボードナビゲーション

すべてのインタラクティブ要素はキーボードでアクセス可能です。

キーボード操作のサポート

Tab次の要素にフォーカス移動
Shift + Tab前の要素にフォーカス移動
Enterボタンやリンクを実行
Spaceチェックボックス・スイッチのトグル
Escモーダルやメニューを閉じる
↑ ↓ ← →メニューやラジオボタン内の移動

フォーカス管理

明確で視認性の高いフォーカスインジケーターを提供します。

フォーカスインジケーター

デフォルトのフォーカススタイル(ブランドカラー、2pxアウトライン):

リンク

実装: すべてのインタラクティブ要素に focus:ring-2 focus:ring-brand を適用

フォーカストラップ

モーダルやドロワーなど、フォーカスを閉じ込める必要がある場合は、Radix UIのフォーカストラップ機能を使用しています。ユーザーが誤ってモーダルの外にフォーカスを移動することを防ぎます。

ARIA属性とセマンティックHTML

適切なARIA属性とセマンティックHTMLを使用して、スクリーンリーダーのサポートを提供します。

セマンティックHTML優先

✅ 正しい例

<button onClick={handleClick}>クリック</button>
<a href="/about">会社情報</a>
<nav aria-label="メインナビゲーション">...</nav>
<main>...</main>
<article>...</article>

❌ 避けるべき例

<div onClick={handleClick}>クリック</div>
<div className="link">会社情報</div>
<div className="nav">...</div>
<div className="main">...</div>

ARIA属性の使用例

aria-label

視覚的にラベルがない要素に、スクリーンリーダー用のラベルを提供します。

<button aria-label="メニューを開く">
<Icon name="menu" />
</button>

aria-labelledby / aria-describedby

既存の要素を参照してラベルや説明を提供します。

<div role="dialog" aria-labelledby="dialog-title" aria-describedby="dialog-desc">
<h2 id="dialog-title">確認</h2>
<p id="dialog-desc">本当に削除しますか?</p>
</div>

aria-live

動的に更新されるコンテンツをスクリーンリーダーに通知します。

<div aria-live="polite" aria-atomic="true">
{statusMessage}
</div>

{/* 緊急度の高い通知 */}
<div aria-live="assertive" role="alert">
{errorMessage}
</div>

aria-hidden

装飾的な要素をスクリーンリーダーから隠します。

<button>
<Icon name="check" aria-hidden="true" />
<span>保存</span>
</button>

コンポーネント別のアクセシビリティ

各コンポーネントは、Radix UIまたは独自実装により、アクセシビリティがビルトインされています。

Button

  • • キーボードアクセス(Enter, Space)
  • • 明確なフォーカスインジケーター
  • • disabled時のaria-disabled

Input / Textarea

  • • label要素との適切な関連付け
  • • エラー時のaria-invalid
  • • 説明文のaria-describedby

Dialog (Radix UI)

  • • フォーカストラップ
  • • Escでクローズ
  • • aria-modal, role=“dialog”

Select (Radix UI)

  • • 矢印キーでオプション選択
  • • Enter/Spaceで開閉
  • • aria-expanded, aria-controls

Checkbox (Radix UI)

  • • Spaceでトグル
  • • aria-checked状態
  • • label要素との関連付け

Toast (Radix UI)

  • • aria-live=“polite/assertive”
  • • role=“status/alert”
  • • 自動消滅タイマー

テストツール

アクセシビリティを確保するために、以下のツールを使用してテストを行います。

自動テストツール

  • axe DevTools - ブラウザ拡張機能
  • Lighthouse - Chrome DevTools統合
  • WAVE - ブラウザ拡張機能

手動テスト

  • キーボードナビゲーション - Tab, Enter, Escのみで操作
  • スクリーンリーダー - NVDA, JAWS, VoiceOverでテスト
  • カラーコントラスト - WebAIM Contrast Checkerで確認

アクセシビリティチェックリスト

新しいコンポーネントやページを実装する際の確認項目:

参考リソース

次のステップ

次のステップ