Tagコンポーネントの削除ボタンアイコン色を修正

shoelace-style/webawesome

Web Awesomeの<wa-tag>コンポーネントで、appearance="accent"使用時に削除ボタンのアイコン色がテキスト色と一致せず視認性が低下していた問題が修正されました。アイコンがcurrentColorを継承することで、どのvariantとの組み合わせでも適切なコントラストが確保されるようになります。

背景

#1814で報告された問題では、appearance="accent"variant="brand"を組み合わせた場合に削除ボタンのアイコンが極めて見づらくなっていました。この問題は、アイコンの色指定方法に起因していました。削除ボタン自体にはcolor: inheritが設定されていましたが、その内部のbaseパートには色が明示的に指定されていなかったため、期待通りの色継承が行われていませんでした。

appearance="accent"は背景色とテキスト色のコントラストを最適化する設定ですが、削除ボタンのアイコンがこの色体系に追従できていなかったことで、アクセシビリティ上の問題が生じていました。

技術的な変更

packages/webawesome/src/components/tag/tag.styles.tsで、削除ボタンのスタイル定義が3箇所変更されました。

変更前:

[part='remove-button'] {
  color: inherit;
  line-height: 1;
}

[part='remove-button']::part(base) {
  padding: 0;
  height: 1em;
  width: 1em;
}

@media (hover: hover) {
  :host(:hover) > [part='remove-button']::part(base) {
    color: color-mix(in oklab, currentColor, var(--wa-color-mix-hover));
  }
}

:host(:active) > [part='remove-button']::part(base) {
  color: color-mix(in oklab, currentColor, var(--wa-color-mix-active));
}

変更後:

[part='remove-button'] {
  line-height: 1;
}

[part='remove-button']::part(base) {
  padding: 0;
  height: 1em;
  width: 1em;
  color: currentColor;
}

@media (hover: hover) {
  :host(:hover) > [part='remove-button']::part(base) {
    background-color: transparent;
    color: color-mix(in oklab, currentColor, var(--wa-color-mix-hover));
  }
}

:host(:active) > [part='remove-button']::part(base) {
  background-color: transparent;
  color: color-mix(in oklab, currentColor, var(--wa-color-mix-active));
}

主な変更点は以下の3つです:

  • [part='remove-button']からcolor: inheritを削除
  • [part='remove-button']::part(base)color: currentColorを追加
  • hover状態とactive状態にbackground-color: transparentを追加

color: currentColorbaseパートに直接設定することで、親要素(tag本体)のテキスト色が確実に継承されます。また、hover/active状態にbackground-color: transparentを明示することで、意図しない背景色の表示を防いでいます。

設計判断

color: inheritからcolor: currentColorへの変更が採用されました。

inheritはプロパティを直接の親要素から継承しますが、currentColorはCSSの色計算時点でのcolorプロパティの値を参照します。Shadow DOMを使用したコンポーネント構造では、::part(base)のような深い階層でのスタイル適用において、currentColorの方が確実に意図した色を参照できます。

また、hover/active状態にbackground-color: transparentを追加した判断は、ボタンコンポーネントのデフォルトスタイルが背景色を持つ可能性を考慮したものです。削除ボタンはアイコンのみで構成されるべきであり、背景色を持たないことを明示的に宣言しています。

この修正により、appearance="accent"とすべてのvariantの組み合わせで一貫した視覚的なコントラストが保証されるようになりました。

まとめ

本PRは、Shadow DOMコンポーネントにおける色継承の仕組みを正確に理解し、currentColorによる確実な色参照を実現した修正です。color: inheritからcolor: currentColorへの変更と、背景色の明示的な透明化により、アクセシビリティ要件を満たすコントラスト比が、どのスタイルバリエーションでも維持されるようになりました。

記事メタデータ

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の存在と明確さ

リード文(総論)→背景・技術詳細・設計判断(各論)→まとめ(結論)という「総論→各論→結論」の構成が明確に適用されており、非常に分かりやすいです。

カスタムMarkdown構文 ✓ PASS

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

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

対象読者への適合性 ✓ PASS

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

Shadow DOM、CSSカスタムプロパティ、`::part`セレクタなど、専門的なフロントエンド技術に関する知識を前提としており、対象読者であるエンジニアに適した内容です。

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

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

各セクションが総論→各論の構成で書かれ、各段落がトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が徹底されており、可読性が非常に高いです。

Diff内容との照合 ✓ PASS

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

記事内のコードブロックは、提供されたDiff情報を正確に反映しています。`color: inherit`の削除、`color: currentColor`と`background-color: transparent`の追加が正しく記載されています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`currentColor`と`inherit`の違い、`::part`擬似要素など、CSSに関連する技術用語が正確かつ適切な文脈で使用されています。

説明の技術的正確性 ✓ PASS

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

アイコンの色が不適切だった原因と、`currentColor`を用いることでそれが解決される仕組みについての説明は、技術的に正確で論理的です。

事実の突合 ⚠ WARNING

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

「設計判断」セクションの内容はPRのDescriptionには明記されていません。コード変更から読み取れる技術的に妥当な解説ですが、厳密にはPR情報に基づかない推測を含みます。

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

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

PR番号(#2016)と関連Issue番号(#1814)が正確に記載されています。

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

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

記事のタイトル「Tagコンポーネントの削除ボタンアイコン色を修正」は、PRの趣旨を正確に要約しており、PR Title「updated tag styles」よりも具体的で分かりやすいです。

外部知識の正確性 ✓ PASS

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

PR情報に記載のない、バージョンのサポート状況やリリース日程などの外部知識の捏造は見られませんでした。

時間表現の正確性 ✓ PASS

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

「修正されました」「問題が生じていました」など、完了した変更に対する過去形の時間表現が正しく使われています。