From 2a582138437fbd611827ef8852c585732eb65c8c Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 16 Jan 2022 23:44:22 +0900 Subject: 2021/10/14 時点の英語版に同期 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/web_components/using_shadow_dom/index.md | 230 +++++++++++---------- .../web_components/using_shadow_dom/shadowdom.svg | 1 + 2 files changed, 125 insertions(+), 106 deletions(-) create mode 100644 files/ja/web/web_components/using_shadow_dom/shadowdom.svg (limited to 'files/ja/web/web_components/using_shadow_dom') diff --git a/files/ja/web/web_components/using_shadow_dom/index.md b/files/ja/web/web_components/using_shadow_dom/index.md index 78d1a05317..f4f3d912e6 100644 --- a/files/ja/web/web_components/using_shadow_dom/index.md +++ b/files/ja/web/web_components/using_shadow_dom/index.md @@ -1,142 +1,157 @@ --- -title: shadow DOM の使い方 +title: シャドウ DOM の使用 slug: Web/Web_Components/Using_shadow_DOM +tags: + - API + - DOM + - ガイド + - ウェブコンポーネント + - シャドウ DOM translation_of: Web/Web_Components/Using_shadow_DOM --- -
 {{DefaultAPISidebar("Web Components")}}
+{{DefaultAPISidebar("Web Components")}} -

Web コンポーネントにおいてカプセル化 (構造やスタイル、挙動を隠し、同じページの他のコードと分離すること) は重要です。これにより他の場所でのクラッシュを防ぎ、またコードが綺麗になります。Shadow DOM API はこの隠され分離された DOM を付加するための方法を提供しています。この記事では Shadow DOM を使う基本を記述しています。

+ウェブコンポーネントにおける重要な側面の一つが、カプセル化です。マークアップ構造、スタイル、動作を隠蔽し、コード上の他のコードから分離することで、他の部分でクラッシュすることを防ぎ、コードをきれいにしておくことができます。シャドウ DOM API はこの主要部分であり、隠蔽され分離された DOM を要素に取り付けるための方法を提供しています。この記事ではシャドウ DOM を使う基本を記述しています。 -
-

Note: Shadow DOM は Firefox (version 63以降)、Chrome、Opera、そして Safari でサポートされています。 Chromiumベースの新しいEdge(75以降)もサポートしています。旧Edgeはサポートしていません。

-
+> **Note:** シャドウ DOM は Firefox (バージョン 63 以降)、Chrome、Opera、 Safari が対応しています。 Chromium ベースの新しい Edge (75 以降)も対応しています。古い Edge は対応していません。 -

High-level view

+## 高水準のビュー -

この記事では DOM (Document Object Model) —ドキュメントにある要素やテキストを表現するノードによって構成された木構造 — に親しんでいる前提で説明します。例として以下の HTML フラグメントを考えます。 

+この記事は、すでにあなたが [DOM (Document Object Model)](/ja/docs/Web/API/Document_Object_Model/Introduction) の概念を理解していることを想定しています。これはツリー上の構造で、接続されたノードがマークアップ文書(ウェブ文書の場合は通常 HTML 文書)に現れるさまざまな要素や文字列を表します。例として、以下のような HTML の断片を考えてみましょう。 -
<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <title>Simple DOM example</title>
-  </head>
-  <body>
-      <section>
-        <img src="dinosaur.png" alt="A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.">
-        <p>Here we will add a link to the <a href="https://www.mozilla.org/">Mozilla homepage</a></p>
-      </section>
-  </body>
-</html>
+```html + + + + + Simple DOM example + + +
+ A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth. +

Here we will add a link to the Mozilla homepage

+
+ + +``` -

このフラグメントによって以下のような DOM 構造が構成されます。

+この断片によって以下のような DOM 構造が構成されます。 -

+![](dom-screenshot.png) -

Shadow DOM により、通常の DOM ツリーの要素の下に DOM ツリーを追加し隠すことができます。shadow DOM ツリーは shadow root を根とし、その下には普通の DOM ツリーと同様に任意の要素を追加できます。

+_シャドウ_ DOM により、通常の DOM ツリーの要素の下に隠れた DOM ツリーを取り付けることができます。このシャドウ DOM ツリーはシャドウルートから始まり、その下には普通の DOM ツリーと同様に任意の要素を追加することができます。 -

+![文書、シャドウルート、シャドウホストの相互作用を示す図の SVG 版。](shadowdom.svg) -

以下に shadow DOM における用語を定義します。

+以下にシャドウ DOM における用語を定義します。 - +- **シャドウホスト**: シャドウ DOM が取り付けられた、通常の DOM ノード +- **シャドウツリー**: シャドウ DOM の中にある DOM ツリー +- **シャドウ境界**: シャドウ DOM と通常の DOM の境界 +- **シャドウルート**: シャドウツリーの根ノード -

shadow DOM 内のノードは、子ノードを追加したり属性付けをしたり、個々のノードのスタイルを element.style.foo と定めたり shadow DOM ツリー全体のスタイルを {{htmlelement("style")}} 要素で定めたりなど、通常の DOM のノードと同様に制御できます。ただし、shadow DOM の内部コードによって外部を制御することは出来ません。 

+シャドウ DOM 内のノードには、シャドウでないノードと全く同じように影響を与えることができます。たとえば、子を追加したり、属性を設定したり、element.style.foo を使用して個々のノードのスタイルを設定したり、 {{htmlelement("style")}} 要素内でシャドウ DOM ツリー全体へのスタイルを追加したりすることができます。違いは、シャドウ DOM 内のどのコードもその外の何かに影響を与えることができず、便利なカプセル化ができることです。 -

shadow DOM は全く新しいものではなく、例えばブラウザにおいて要素の内部構造をカプセル化するために長年使用されていました。 {{htmlelement("video")}} 要素の例を考えます。DOM で見えるものは <video> 要素のみですが、その shadow DOM の内部ではたくさんのボタンや他の制御コードが含まれています。shadow DOM スペックができたことにより、この機能を実際に操作しカスタム要素で shadow DOM を作ることができるようになりました。 

+なお、シャドウ DOM は決して新しいものではありません。ブラウザーは長い間、要素の内部構造をカプセル化するためにこれを使用してきました。例えば、既定のブラウザーコントロールが公開されている {{htmlelement("video")}} 要素を思い浮かべてください。 DOM には `