Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ハンバーガーメニューを開くボタンのaria-controlsの出力を調整 #423

Closed
wants to merge 3 commits into from

Conversation

yuw27b
Copy link
Contributor

@yuw27b yuw27b commented Dec 15, 2022

課題・背景

https://github.com/kufu/smarthr-design-system-issues/issues/1142

やったこと

SSR時(windowオブジェクトが存在しない場合)には、ハンバーガーメニューを開くボタンのaria-controls="panel-menu"を出力しないようにしました。

コントロール対象となるid="panel-menu"の要素は、smarthr-uiのDialogコンポーネントを利用していますが、このコンポーネントも(documentを利用するため)SSR時は出力しないようになっているので、ボタンのaria-controlsも同じ条件で出力しています。

動作確認

https://deploy-preview-423--smarthr-design-system.netlify.app/

HTMLのバリデーションエラーは出なくなりました。また、ブラウザでのレンダリング時にはaria-controlsが出力されています。
image

キャプチャ

見た目や動作に影響はありません。

@yuw27b yuw27b self-assigned this Dec 15, 2022
@netlify
Copy link

netlify bot commented Dec 15, 2022

Deploy Preview for smarthr-design-system ready!

Name Link
🔨 Latest commit 50cfe2b
🔍 Latest deploy log https://app.netlify.com/sites/smarthr-design-system/deploys/639ad56eacade200078112fa
😎 Deploy Preview https://deploy-preview-423--smarthr-design-system.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site settings.

@yuw27b yuw27b requested a review from tomof December 15, 2022 05:03
Copy link
Contributor

@tomof tomof left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@yuw27b 気になることがあったのでコメントしましたー。確認お願いします🙏

@@ -115,5 +115,5 @@ export const algoliaConfig = {
indexName: process.env.GATSBY_ALGOLIA_INDEX_NAME,
queries: [...mdxQueries, ...airtableQueries],
dryRun: process.env.BRANCH !== 'main',
continueOnFailure: false,
continueOnFailure: true,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

algoliaの設定のようですが、今回の問題に関係ありますか?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

すみません、別の問題なので一旦戻します。

@@ -68,17 +73,19 @@ export const Header: FC<Props> = ({ isIndex = false }) => {
</ul>
<MenuContainer>
<StyledOpenButton
// サーバー時は対象となるDialogコンポーネントをレンダリングできないため、aria-controlsは出力しない
{...(isClient && { 'aria-controls': 'panel-menu' })}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここはわざわざuseStateとuseEffect使わないと駄目なんだでしょうか?
{...(typeof window !== 'undefined' && { 'aria-controls': 'panel-menu' })} だと動作しないですかね?
出来るだけ、useStateやuseEffectは使わないほうが良いかなと思い。

Copy link
Contributor Author

@yuw27b yuw27b Dec 15, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tomof useEffectでないと、CSRでも出力されないようです。<Dialog>と同じように、<StyledOpenButton>要素ごとtypeof window...で制御するのはできるので、そのほうが良いでしょうか?

@yuw27b yuw27b force-pushed the fix/dialog-menu-aria branch from 18bbd81 to b1ab896 Compare December 15, 2022 06:40
@yuw27b
Copy link
Contributor Author

yuw27b commented Dec 15, 2022

ボタン側のaria-controlsはそのままで、SSR時に<div id="panel-menu" aria-hidden="true"></div>をプレースホルダーとして出力しておくようにしました。
useEffectは不要になり、HTMLのバリデーションエラーも出ないことを確認しました。

@yuw27b
Copy link
Contributor Author

yuw27b commented Dec 15, 2022

バリデーションエラーは出ないものの、SSR時と出力される要素が変わることから、コンソールにエラーが出る問題がありました。
https://reactjs.org/docs/error-decoder.html/?invariant=418

@tomof
Copy link
Contributor

tomof commented Dec 16, 2022

バリデーターのスコアを気にして、コードを複雑化するだけで本質的なアクセシビリティの問題が解決されない対応となってしまうため、このPRは一旦取り下げることにしました🙇‍♂️ w3cのissueや議論もまだ続いているように思います。

@tomof tomof closed this Dec 16, 2022
@yuw27b yuw27b deleted the fix/dialog-menu-aria branch August 2, 2023 04:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants