マルチプロダクトナビゲーションのレスポンシブ改善

shoelace-style/webawesome

Web Awesomeのドキュメントサイトにおいて、ナビゲーショントグルの表示制御をコンテナクエリから wa-pageview属性 に変更し、レスポンシブ動作を改善しました。これにより、サイドバーの表示状態とナビゲーショントグルの可視性が一貫して連動するようになります。

背景

#2057 でマルチプロダクトナビゲーションを実装した際、ナビゲーショントグルの表示制御にコンテナクエリを使用していました。しかし、コンテナクエリはヘッダー要素の幅に基づいて判定するため、wa-pageコンポーネントが管理するサイドバーの表示状態と直接連動しませんでした。

このPRでは、表示制御の基準をwa-pageview属性に変更することで、サイドバーが非表示の時に確実にトグルボタンが表示されるようにしています。併せて、#2057の実装過程で見つかったアクセシビリティとスタイリングの問題も修正しています。

技術的な変更

表示制御の変更

utils.cssにおいて、コンテナクエリによる制御からビュー属性による制御に変更されました。

変更前:

@container header (inline-size <= 80ch) {
  .header-logo-simple,
  .header-toggle-nav {
    display: block;
  }
}

@container header (inline-size > 80ch) {
  .header-logo-simple,
  .header-toggle-nav {
    display: none;
  }
}

変更後:

/* Nav toggle: show when sidebar is hidden (wa-page mobile view), hide when sidebar is shown */
wa-page[view='mobile'] > [slot='header'] .header-toggle-nav {
  display: block;
}
wa-page[view='desktop'] > [slot='header'] .header-toggle-nav {
  display: none;
}

.header-logo-simpleは引き続きコンテナクエリで制御されますが、.header-toggle-navのみがwa-pageview属性に基づいて表示・非表示が切り替わります。

アクセシビリティの改善

単体で使用されるアイコンにlabel属性が追加され、スクリーンリーダーでの読み上げが可能になりました。

<wa-icon name="microphone-lines" family="classic" variant="solid" label="Podcast Awesome"></wa-icon>
<wa-icon name="newspaper" family="classic" variant="solid" label="Blog Awesome"></wa-icon>
<wa-icon family="brands" name="github" label="View Project on GitHub" class="icon-embiggen"></wa-icon>
<wa-icon name="star" variant="regular" label="Star Project on GitHub" class="icon-embiggen"></wa-icon>

また、nav-docs.njkではアイコンをslot="start"に配置することで、ボタンテキストとの視覚的な関係が明確になりました。

<wa-icon slot="start" name="trowel-bricks" variant="regular" label="Components" class="icon-embiggen"></wa-icon>
Components

スタイリングの統一

ナビゲーション全体で間隔をwa-gap-2xsに統一しました。

-<div id="docs-toolbar" class="wa-cluster gap-s">
+<div id="docs-toolbar" class="wa-cluster wa-gap-2xs">
-<div class="header-nav wa-cluster wa-gap-s">
+<div class="header-nav wa-cluster wa-gap-2xs">

この変更により、ヘッダー内の要素間の視覚的なリズムが統一されています。

HTMLセマンティクスの改善

インライン要素には<span>タグを使用するよう修正されました。

-<p class="wa-caption-xs wa-cluster wa-gap-xs">
+<span class="wa-caption-xs wa-cluster wa-gap-xs">
  Version {{ package.version }}
-</p>
-<p class="wa-caption-xs">&copy; Fonticons, Inc.</p>
+</span>
+<span class="wa-caption-xs">&copy; Fonticons, Inc.</span>

これらのコンテンツは段落ではなく単なるインラインテキストであるため、<span>の使用がHTMLの意味構造により適合します。

テンプレートファイルの統合

個別のロゴSVGテンプレートファイル(logo-eleventy.njklogo-font-awesome.njk)が削除されました。ロゴの表示にはwa-iconコンポーネントが使用されるようになり、テンプレートの管理が簡素化されています。

設計判断

コンテナクエリではなくview属性を使用する方式が採用されました。

コンテナクエリはヘッダーの幅に基づいて判定するため、実際のサイドバーの表示状態と乖離する可能性がありました。wa-pageview属性は、サイドバーの表示・非表示を直接管理する状態であるため、ナビゲーショントグルの制御に適しています。

この判断により、画面幅に関わらずサイドバーが非表示の時は必ずトグルボタンが表示され、表示中は必ず非表示になるという一貫した動作が保証されます。

本PRは、#2057で実装されたマルチプロダクトナビゲーションの実運用での検証を通じて見つかった問題点を修正したものです。コンポーネントの状態管理と表示制御の一貫性を高めることで、より予測可能なUIを実現しています。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

「総論→各論→結論」の構成が明確です。リード文で要旨を述べ、背景、技術詳細、設計判断と論理的に展開し、最後にPRの意義をまとめており、非常に分かりやすい構成です。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```言語:ファイルパス)やGitHubのPR番号リンク([#123](URL))など、カスタムMarkdown構文がすべて正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

コンテナクエリやHTMLセマンティクスなどの専門用語を適切に使用しており、専門知識を持つエンジニアという対象読者に適合した内容になっています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論→各論の構成になっており、各段落がトピックセンテンスで始まるため、非常に読みやすいです。1段落1トピックの原則も守られています。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内で引用されているCSS、Nunjucksテンプレート、diffのコードブロックは、提供されたDiff情報と完全に一致しており、変更点が正確に反映されています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「コンテナクエリ」「view属性」「HTMLセマンティクス」などの技術用語が、PR Descriptionの内容と一致しており、文脈上も正確に使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

コンテナクエリから`view`属性へ変更した理由(サイドバーの状態との連動)など、技術的な変更点に関する説明は論理的かつ正確です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張(レスポンシブ改善、アクセシビリティ向上、スタイリング統一など)は、PRのDescriptionで完全に裏付けられており、ハルシネーションは検出されませんでした。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#2087, #2057)やCSSクラス名(wa-gap-2xs)などの固有名詞はすべて正確に記載されています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトル「マルチプロダクトナビゲーションのレスポンシブ改善」は、PRの主題(Multi-Product Navigation Follow-Ups)をより具体的に、かつ正確に表現しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

記事の内容は提供されたPR情報に限定されており、サポート状況やリリース日程といったPRに記載のない外部知識の追記(捏造)はありません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

PR内の「will now show」といった表現を「〜ようになります」と正確に反映しており、時間表現の歪曲はありません。