ドキュメントサイトのメインコンテンツ余白を `.content-container` で統一

shoelace-style/webawesome

ページごとにバラバラだったメインコンテンツの上下余白と最大幅設定を、.content-container クラスを正規の基底プリミティブとして定義し直すことで一元管理できるようになりました。

背景

これまでドキュメントサイトでは、メインコンテンツの上下余白(padding-block)と中央寄せ・最大幅の指定が統一されていませんでした。ページによってインライン <style> で指定するもの、カスタムパネル経由で設定するもの、そもそも設定されていないものが混在し、バナー・サブヘッダー・ナビゲーションなどのラッパーコンポーネントもそれぞれ独自に最大幅と中央寄せを手書きしていました。

この状況はスタイルの管理コストを高めるだけでなく、ページ間でのレイアウト一貫性も損なっていました。本PRはこれを解消するため、.content-container を「コンテンツを包む唯一の正規クラス」として位置づけ直しています。

技術的な変更

.content-container の定義が utils.css で刷新され、max-width から論理プロパティ max-inline-size への移行と、カスタムプロパティの改名(--max-width--max-inline-size)が行われました。これにより、書字方向に依存しないレイアウトが実現します。

変更前:

.content-container {
  margin-inline: auto;
  max-width: var(--max-width, var(--content-width-l));
  padding-inline: var(--content-padding-inline);
}

変更後:

.content-container {
  margin-inline: auto;
  max-inline-size: var(--max-inline-size, var(--content-width-l));
  padding-inline: var(--content-padding-inline);
}

あわせて、wa-page コンポーネントのスロットとして配置される <main> に対し、2つの新しいルールが追加されました。.content-container クラスを持つ <main> には padding-block: var(--wa-space-4xl)(約64px)の上下余白が付与されます。一方、クラスを持たない <main> には padding: 0 を明示することで、wa-page のシャドウDOM内の ::slotted(main) { padding: var(--wa-space-3xl) } によるデフォルトパディングを打ち消し、フルブリードページが完全にフラッシュな状態を保てます。

wa-page > main.content-container {
  padding-block: var(--wa-space-4xl);
}

wa-page > main:not(.content-container) {
  padding: 0;
}

テンプレート側では、base.njk<main> タグがフロントマターの hasFlushMain フラグで出し分けされるようになりました。hasFlushMain: true が設定されたページでは class="content-container" が付与されないため、フルブリードなマーケティングページなどが自身のレイアウトを完全に制御できます。

<main id="content"{% if not hasFlushMain %} class="content-container"{% endif %}>

バナー(slot-banner-ba-kickstarter.njk)、サブヘッダー(slot-subheader.njk)、製品ナビゲーション(nav-products.njk)の各ラッパーコンポーネントも、独自の最大幅・中央寄せ指定を削除し、content-container クラスを追加する形で統一されました。

設計判断

「クラスの有無でオプトアウトする」方式 が採用されました。オプトインではなくオプトアウトにすることで、新規ページはデフォルトで一貫した余白を得られ、例外的なフルブリードページだけが hasFlushMain: true を宣言する設計になっています。

utils.css のコメントには「このクラスを別のファイルで再定義しないこと(プロサイトの site.css やアプリの app.css での基底クラス再定義を禁止する)」と明記されており、複数リポジトリ(webawesome-prowebawesome-app)にまたがるエコシステム全体での一貫性を守るための規約が埋め込まれています。スコープ付きオーバーライド(.page-footer .content-container { ... } 等)は許可されており、柔軟性と統一性のバランスが取られています。

また、--max-inline-size カスタムプロパティをインスタンスごとに上書きする手段も残されており、特定コンテキストで幅を変えたい場合は main { --max-inline-size: var(--content-width-xs); } のように対応できます。

まとめ

本PRは、バラバラだった余白・最大幅の定義を .content-container という単一の正規プリミティブに集約し、テンプレートレベルの hasFlushMain フラグによるオプトアウト機構を組み合わせることで、例外ページの自由度を損なわずにサイト全体のレイアウト一貫性を実現しています。コメントによるリポジトリ間の規約の明文化も、マルチリポジトリ構成での長期的なスタイル管理に寄与しています。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
ea4cbd4f

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

品質レビュー結果

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

Review Criteria:

記事構成 ✓ PASS

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

リード文(総論)→各セクション(各論)→まとめ(結論)の3部構成が明確に適用されています。背景、技術詳細、設計判断といった要素も網羅されており、理想的な構成です。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きシンタックスハイライト(```css:path/to/file.css```)およびGitHubのPRリンク記法([#2350](URL))が正しく使用されています。

対象読者への適合性 ✓ PASS

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

論理プロパティやカスタムプロパティ、コンポーネント設計といったトピックを扱っており、専門知識を持つエンジニアという対象読者に完全に適合しています。

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

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

各セクション、各パラグラフが「総論→各論」の構造で書かれており、トピックセンテンスが明確です。1段落1トピックの原則も守られており、非常に読みやすいです。

Diff内容との照合 ✓ PASS

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

記事内で引用されているコードはすべて提供されたDiff情報と一致しており、改変や省略も説明の範囲内で適切です。ファイルパスも正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「論理プロパティ」「max-inline-size」「フルブリード」「シャドウDOM」「::slotted」など、技術用語が文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

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

「max-inline-sizeへの移行で書字方向に依存しないレイアウトが実現する」といった説明や、`hasFlushMain`フラグの役割に関する解説は、技術的に正確かつ論理的です。

事実の突合 ✓ PASS

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

記事内のすべての主張は、PRのDescription、Diff、およびCompanion PRsの情報で裏付けられています。特に「設計判断」はDiffのコメントから意図を汲み取っており、ハルシネーションは見られません。

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

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

PR番号(#2350)やCSS変数名(--wa-space-4xl)などの数値・固有名詞はすべて正確に記載されています。

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

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

記事タイトル「ドキュメントサイトのメインコンテンツ余白を .content-container で統一」は、PRの主題である「メインコンテンツの垂直方向のスペーシングの一貫性確保」を的確に要約しています。

外部知識の正確性 ✓ PASS

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

記事で言及されているマルチリポジトリ構成(webawesome-pro, webawesome-app)は、PRの「Companion PRs」セクションで言及されており、PR情報に基づかない外部知識の追加はありません。

時間表現の正確性 ✓ PASS

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

記事内には「近い将来」や「まもなく」といった曖昧な時間表現はなく、PRで実装された事実を正確に記述しており、時間表現の歪曲はありません。