はじめに
前回の記事で紹介させていただいたサイトのアクセシビリティをチェックしたら71点でした。
本記事では、下記の記事を参考にさせていただき、react-axeを用いてアクセシビリティの向上を目指します。
本記事で記述しているのはこのWebサイトのトップページのみの修正箇所です。
やったこと
react-axeを導入
react-axeを参考記事と同様に導入します
- react-axeと@types/react-axeをインストール
npm i react-axe npm i @types/react-axe
- 開発環境で結果を確認したいので dynamic import でライブラリをインポート
if (process.env.NODE_ENV !== 'production') { import('react-axe').then((axe) => { axe.default(React, ReactDOM, 1000) ReactDOM.render(<App />, document.getElementById('root')) }) } else { ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, document.getElementById('root') ) }
こうする事でコンソールに New aXe issuesというのが出力されています。
さらにリンクをクリックすると詳しい詳細を確認する事ができました。(日本語に対応していました)
あとは New aXe issuesの通りに修正していきます。
New aXe issues
以下に実際に出力されたものを記します。
critical: Buttons must have discernible text
ボタンには認識可能なテキストが存在しなければなりません
ボタン要素にaria-label属性を追加しました。
<Button aria-label="キーワードで検索" size="large" variant="contained" color="default" className={classes.button} onClick={() => history.push('/search')} > キーワードで探す </Button>
serious: Elements must have sufficient color contrast
テキスト要素は背景に対して十分な色のコントラストがなければなりません
ヘッダーの背景色と文字の色のコントラストをつけました。
moderate: Document must have one main landmark
ドキュメントにはmainランドマークが1つ含まれていなければなりません
mainタグを記述していなかったのでmainタグを記述しました。
serious: Links must have discernible text
リンクには認識可能なテキストが存在しなければなりません
リンク要素にaria-label属性を追加しました。
moderate: Page must contain a level-one heading
ページにはレベル1の見出しが含まれていなければなりません
h2タグで記述していた部分をh1タグに修正しました。
moderate: All page content must be contained by landmarks
ページのすべてのコンテンツはlandmarkに含まれていなければなりません
メインとなる部分のコンテンツをmainタグで囲んでいなかったので、mainタグの中に記述しました。
おわりに
トップページ以外も全て同じようにreact-axeの New aXe issuesに従い修正を行いました。
その結果アクセシビリティのスコアも100点にする事ができました。
修正後のソースコードはこちらにあります。