`<th>` のボーダーを列ヘッダーに限定

shoelace-style/webawesome

<th> 要素に付与していた border-block-end が、行ヘッダーにも適用されていた問題を解消し、列ヘッダーのみに限定しました。余分な padding-block の削除と、物理プロパティから論理プロパティへの置換により、CSS の可読性とメンテナンス性も向上しています。

背景

従来のスタイルでは、テーブルのヘッダーセル <th> 全体に下線(border-block-end)が付与されていたため、行ヘッダーが横長のボーダーで強調され、列ヘッダーと視覚的に区別しにくい状況がありました。さらに、th セレクタ内で既に別ルールが適用していた padding-block が重複して記述され、 CSS の冗長性が増していました。これらの課題は、テーブルのアクセシビリティとデザイン一貫性を損なう要因となっていました。

技術的な変更

tbody の行境界の書き換え

tbody tr の上部ボーダーは、物理プロパティ border-top から論理プロパティ border-block-start に変更され、スタイル値には var(--wa-border-style) が使用されるようになりました。

@@
-      border-top: solid var(--wa-border-width-s) var(--wa-color-border-quiet);
+      border-block-start: var(--wa-border-style) var(--wa-border-width-s) var(--wa-color-border-quiet);

この置換により、書字方向に依存しないボーダー指定が可能になり、将来的なレイアウト変更への耐性が向上します。

<th> のボーダー適用範囲の限定

th セレクタから冗長な padding-block: 0.75em; を削除し、代わりに &:not([scope='row']):not(:has(+ td)) という条件付きネストを導入して、列ヘッダーでのみ border-block-end を適用するようにしました。行ヘッダーは [scope='row'] 属性または次の兄弟要素が非ヘッダーセルである場合に除外されます。

@@
-    padding-block: 0.75em;
-
     font-size: var(--wa-font-size-smaller);
     font-weight: var(--wa-font-weight-bold);
-
-    border-block-end: var(--wa-border-style) var(--wa-border-width-s) var(--wa-color-border-normal);
+    /* 列ヘッダーのみに下部ボーダーを適用 */
+    &:not([scope='row']):not(:has(+ td)) {
+      border-block-end: var(--wa-border-style) var(--wa-border-width-s) var(--wa-color-border-normal);
+    }

この変更により、列ヘッダーだけが視覚的に区切られ、テーブル全体の構造が把握しやすくなります。

変数ベースのボーダー指定

行境界の色指定も var(--wa-border-style) を使用する形に統一し、既存のハードコーディングされた solid キーワードを除去しました。これによりテーマカスタマイズが一元化され、デザインシステム全体の一貫性が保たれます。

設計判断

単一の th セレクタ内で条件付き擬似クラスを利用 した設計は、別個のクラスや追加セレクタを導入せずに機能を拡張するというシンプルさを追求しています。これにより、既存の CSS カスケーディングへの影響を最小限に抑えつつ、意図したスタイリングだけを適用できます。

また、論理プロパティへの置換 は、書字方向や将来的なレイアウト変化に対するレジリエンスを高める意図が示されています。CSS カスタムプロパティを活用した一元管理は、テーマの拡張やメンテナンスを容易にする設計方針と一致しています。

まとめ

今回の PR は、テーブルヘッダーのボーダー表示を列ヘッダーのみに限定し、冗長なパディングを除去、さらに物理プロパティを論理プロパティへ置換することで、視覚的な一貫性とコードの保守性を向上させました。CSS カスタムプロパティと論理プロパティの活用は、コンポーネントライブラリ全体の拡張性を高める設計判断と言えます。

記事メタデータ

Generated by:
gpt-oss-120b for DiffDaily
LLM Trace:
58c7f7e7

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

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
gpt-oss-120b for DiffDaily

Review Criteria:

記事構成 ✓ PASS

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

リード文が要旨を示し、背景・技術的変更・設計判断・まとめの各セクションが揃っているため、総論→各論→結論の構成が取れています。

カスタムMarkdown構文 ⚠ WARNING

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

コードブロックのファイル名付きハイライトは正しい形式です。ただし PR リンクの表記が "[PR #2492](…)" となっており、要求された "[#2492](…)" 形式から外れています。

対象読者への適合性 ✓ PASS

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

CSS の詳細やカスタムプロパティに関する記述が中心で、エンジニア向けの内容となっており、過度な初心者向け説明はありません。

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

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

各セクションは総論パラグラフ・各論パラグラフ・結論パラグラフで構成され、段落は1文がトピックセンテンスとして機能し、1段落1トピック・長さも適切です。

Diff内容との照合 ⚠ WARNING

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

コードブロックは Diff 内容と概ね合致していますが、コメント部分が Diff のコメントと文言が異なります(日本語コメントに置き換えられている)。機能的な差異はなく、説明に支障はありません。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

論理プロパティ、物理プロパティ、カスタムプロパティ名など、用語は正しく使用されています。

説明の技術的正確性 ✓ PASS

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

変更の目的や効果(列ヘッダーへの限定、冗長パディングの削除、論理プロパティへの置換)が PR の記述と一致しており、技術的に誤りはありません。

事実の突合 ✓ PASS

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

記事の全主張は PR のタイトル・説明・Diff に裏付けられており、根拠のない推測や外部知識の付加はありません。

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

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

数値や固有名詞の記載は PR と一致しており、誤りは見られません。

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

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

記事タイトルは PR の内容「列ヘッダーのみに限定」に忠実です。

外部知識の正確性 ✓ PASS

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

LTS、バージョン、リリース日程など PR に無関係な外部情報は含まれていません。

時間表現の正確性 ✓ PASS

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

時間表現の記述はなく、PR と食い違う表現もありません。