0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ShadowDOMのカプセル化を破る「継承プロパティ」

Last updated at Posted at 2025-10-26

対象読者 👤

  • ShadowDomでstyleをカプセル化したい方
  • ShadowDomでstyleをカプセル化する際の注意点を知りたい方

まとめ 💡

  • ShadowDOMは基本的にページのJavaScriptやCSSの影響を受けない
  • ShadowDOMはShadowHostに指定された継承プロパティの値の影響を受ける

背景

ページの上にShadowDomで表示していたモーダルのテキストがデフォルトの左寄せではなく、中央揃えになっていました。
調べていたところ、ShadowHostのcssを継承していたことが原因だとわかりました。

ShadowDomとは

カスタム要素をページで実行されるJavaScriptやCSSの影響を受けないようにする(カプセル化する)為に使われる技術です。

ページ上に表示するモーダルでこの技術を使ったりします。
それ以外だと例えばinput要素の日付を入力する要素の内部構造に使われたりします。

image.png

image.png

ShadowHostとは

ShadowDomのDomツリーと紐ついている通常のDomです。

image.png

ShadowHostに指定された継承プロパティの値を継承していた

背景で説明した以下について説明します

ページの上にShadowDomで表示していたモーダルのテキストがデフォルトの左寄せではなく、中央揃えになっていました。
調べていたところ、ShadowHostのcssを継承していたことが原因だとわかりました。

See the Pen Untitled by 山根大生 (@uuylkesg-the-styleful) on CodePen.

body要素がShadowHostである場合に以下のCSSがbody要素にあたっていました。

body {
  text-align: center;
}

これがShadowDom内のp要素にあたってしまっていました。

CSSにおける継承
ある要素のあるプロパティに値が指定されなかった場合に親要素の値を継承します。
全てのプロパティに継承があるというわけではなく、継承可能なプロパティとして定義されています。

text-alignは継承可能なプロパティです

継承可能なプロパティであることの確認の仕方
MDNの公式定義の「継承」が「あり」になっていれば継承可能なプロパティです。

ShadowHostである要素にこの継承プロパティのCSSが当たっているある場合、ShadowDom内の要素はCSSを継承することが以下の記事でもわかりました。

Shadow DOM は body セレクタに指定された、継承プロパティの値のみ反映されているのがわかります

引用記事

よって今回のケースだとShadowDom内の要素がbodyに当たっているCSSのうち継承可能なプロパティを継承していたことが分かりました。

body要素に限らずdiv要素だったりShadowHostになりうる要素でも今回のようなCSSの継承は起こります。
例えば<article>,<aside>,<blockquote>,<div>,<footer>,h1などです。
参考

対応

:hostを使って、styleを当てることにしました。

:host {
  text-align: left;
}

これにより、ShadowDom要素全体にこのCSSを当てることができます。

そもそもの話ですが、ShadowHostをbodyのようなCSSが当たりやすいものではない別の要素にすることも考えるべきだと思いました。

まとめ

  • ShadowDOMは基本的にページのJavaScriptやCSSの影響を受けない
  • ShadowDOMはShadowHostに指定された継承プロパティの値の影響を受ける

最後に

  • ShadowDomが使われるケースを改めて理解しました
  • ShadowHostのCSSは継承してしまうので注意だなと思いました
  • ShadowDomとつながっているWebComponetという概念についても改めて整理したいです

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?