ボタンから `line-height` を除去し、複雑なコンテンツの表示崩れを解消

shoelace-style/webawesome

ボタンの line-height に設定されていた計算式が、複雑なコンテンツを内包する場合にレイアウト崩れを引き起こしていました。wa-button とネイティブボタンの両方からこのプロパティを削除し、inline-flex コンテナ本来のセンタリング機能に委ねる形に整理されました。

背景

ボタンのスタイルには line-height: calc(var(--wa-form-control-height) - var(--wa-form-control-border-width) * 2) という計算式が設定されており、複雑なコンテンツをボタン内に配置した場合にこの line-height が意図しない高さの拡張を引き起こし、ビジュアルの崩れにつながっていました。

PR 添付のスクリーンショットを見ると、変更前はボタンの高さが余分に膨らんでいる様子が確認できます。ボタンはすでに inline-flex コンテナとして定義されており、子要素を縦横両方向でセンタリングする能力を持っています。PRでは「ボタンは inline-flex コンテナとして既に両方向でコンテンツをセンタリングしているため、line-height は必要ない」と説明されています。

技術的な変更

変更は2ファイルで各1行の削除のみで構成されており、追加行はありません。

button.styles.tswa-button コンポーネント)の変更:

     font-family: inherit;
     font-size: inherit;
     font-weight: var(--wa-font-weight-action);
-    line-height: calc(var(--wa-form-control-height) - var(--wa-form-control-border-width) * 2);
     height: var(--wa-form-control-height);
     width: 100%;

native.css(ネイティブボタン)の変更:

       font-family: inherit;
       font-size: var(--wa-form-control-value-font-size);
       font-weight: var(--wa-font-weight-action);
-      line-height: calc(var(--wa-form-control-height) - var(--border-width) * 2);
       text-decoration: none;
       vertical-align: middle;
       white-space: nowrap;

height: var(--wa-form-control-height) によるボタン高さの制御は維持されており、外形寸法は変わりません。line-height の削除によって、テキスト単独のシンプルなボタンでも inline-flex のセンタリングが引き続き機能します。

設計判断

wa-button コンポーネントとネイティブボタンの 両方を同時に修正 する方針が採られました。

button.styles.tsnative.css の2ファイルを同一PRで変更することで、カスタムコンポーネントとネイティブ要素間のスタイル一貫性が保たれています。変更内容はプロパティの削除のみであり、代替値への置き換えは行われていません。

まとめ

inline-flex によるセンタリングが既に機能している状況では、line-height の計算式は複雑なコンテンツで副作用を生む要因になっていました。今回の1行削除×2ファイルという最小限の変更は、wa-button とネイティブボタン双方の表示一貫性を同時に改善しています。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
292f74a1

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

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

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

「リード文(総論)→背景・技術詳細(各論)→まとめ(結論)」の構成が明確で、設計判断にも言及されており、ガイドラインに完全に準拠しています。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きシンタックスハイライト(diff言語指定も適切)、PR番号のリンク記法共に正しく使用されています。

対象読者への適合性 ✓ PASS

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

CSSプロパティに関する技術的な解説であり、専門知識を持つエンジニアという対象読者に適切です。冗長な説明もありません。

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

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

各セクション、各パラグラフが要点から始まる構成になっており、非常に読みやすいです。1段落1トピックの原則も守られています。

Diff内容との照合 ✓ PASS

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

記事内のコードブロックは、ファイル名を含め、提供されたDiffの内容を正確に反映しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「line-height」「inline-flex」などの技術用語が、PRの文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

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

line-heightの削除理由、inline-flexの役割、heightプロパティの維持といった説明は、すべて技術的に正確で論理的です。

事実の突合 ✓ PASS

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

記事内のすべての主張は、PRのDescriptionやDiffの内容によって裏付けられており、ハルシネーションは見られません。

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

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

PR番号(#2366)が正確に記載・リンクされています。

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

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

記事のタイトルはPRの主題「Remove `line-height` from buttons」を正確に反映し、変更の目的も補足しており秀逸です。

外部知識の正確性 ✓ PASS

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

記事内容は提供されたPR情報の範囲内に留まっており、根拠のない外部知識の追加はありません。

時間表現の正確性 ✓ PASS

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

完了した変更を報告する記事として、「〜でした」「〜されました」といった過去形の時間表現が適切に使用されています。