Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
ウェブコンポーネントは、一連のさまざまな技術です。これにより、再利用可能なカスタム要素を作成し、その機能を他のコードから分離してウェブアプリケーションで利用できるようにします。
開発者ならご存知でしょうが、可能な限りコードを再利用することは良い考えです。しかしこれは、以前から、カスタムのマークアップ構造にとって、それほど簡単なことではありませんでした。複雑な HTML (と一連のスタイルやスクリプト)を考えてみて下さい。ときに、カスタム UI の制御をレンダリングするために、コードを書かなければなりません。それに、注意していないと、それらの制御をどう使い回すかで、ページが複雑なものになってしまいます。
ウェブコンポーネントは、上記の問題の解決を目指しています。 ウェブコンポーネントは、3 つの主要な技術からなり、それらを組み合わせて、多目的なカスタム要素を作成します。カプセル化された機能を使うことで、コードの重複を恐れることなく、どこでも再利用することができます。
カスタム要素カスタム要素とその動作を定義するための、一連の JavaScript API です。以降、ユーザーインターフェイスの中で好きなだけ使用することができます。
シャドウ DOMカプセル化された「シャドウ」 DOM ツリーを要素に紐付け、関連する機能を制御するための、一連の JavaScript API です。シャドウ DOM ツリーは、メイン文書の DOM とは別にレンダリングされます。こうして、要素の機能を公開せずに済み、文書の他の部分との重複を恐れることなく、スクリプト化やスタイル化できます。
HTML テンプレート<template> と <slot> 要素によって、レンダリングされたページ内に表示されないマークアップのテンプレートを書くことができます。カスタム要素の構造体の基礎として、それらを何度も再利用できます。
ウェブコンポーネントを実装する基本的な流れは、以下に挙げてある通りです。
簡単なウェブコンポーネントを作成するために、カスタム要素の機能の使い方を紹介したガイドです。それ以外にも、ライフサイクルコールバックやその他の高度な機能の中を覗いていきます。
シャドウ DOM の使用シャドウ DOM の基礎を眺めるガイドです。シャドウ DOM を要素にどう紐付けるか、シャドウ DOM ツリーにどう追加するか、どうスタイル付けするかなどを紹介しています。
テンプレートとスロットの使用<template> と <slot> 要素を使って、再利用可能な HTML 構造体の定義と使用方法を紹介したガイドです。
カスタム要素に関わる機能が含まれています。中でも注目すべきは、 CustomElementRegistry.define() メソッドで、新しいカスタム要素を登録するために用います。それにより、カスタム要素を文書内で使用できるようになります。
Window.customElementsCustomElementRegistry オブジェクトへの参照を返します。
ライフサイクルコールバックカスタム要素のクラス定義の中で定義された特別なコールバック関数で、挙動に影響を与えます。
connectedCallback()カスタム要素が文書の DOM に初めて接続したときに呼び出されます。
disconnectedCallback()カスタム要素が文書の DOM から切断されたときに呼び出されます。
adoptedCallback()カスタム要素が新しい文書に移動したときに呼び出されます。
attributeChangedCallback()カスタム要素の属性のひとつが追加、削除、もしくは変更されたときに呼び出されます。
カスタマイズされた組み込み要素を作成するための拡張機能以下の拡張機能が定義されています。
is グローバル HTML 属性標準の HTML 要素が、カスタマイズされた組み込み要素のように振る舞うべきかを指定できます。
Document.createElement() メソッドの "is" オプションカスタマイズされた組み込み要素のように振る舞う標準の HTML 要素のインスタンスを作成できます。
CSS の擬似クラスカスタム要素に関連する擬似クラスです。
:defined組み込み要素と CustomElementRegistry.define() で定義されるカスタム要素を含む、あらゆる定義済みの要素に一致します。
:host使われている CSS を含む、シャドウ DOM のシャドウホストを選択します。
:host()使われている CSS を含む、シャドウ DOM のシャドウホストを選択します。(シャドウ DOM の内側からカスタム要素を選択することができます。)ただし、関数の引数として渡されるセレクターがシャドウホストに一致している場合に限ります。
:host-context()使われている CSS を含む、シャドウ DOM のシャドウホストを選択します。(シャドウ DOM の内側からカスタム要素を選択することができます。)ただし、関数の引数として渡されるセレクターが DOM 階層内のシャドウホストの先祖要素に一致している場合に限ります。
:state()指定したカスタム状態にあるカスタム要素と一致します。 より正確に言えば、指定した状態が要素の CustomStateSet に存在する無名カスタム要素と一致します。
CSS 擬似要素カスタム要素に関連する擬似要素です。
::partシャドウツリー内にある要素で、一致する part 属性を持つものを表します。
シャドウ DOM サブツリーのルートノードを表します。
Element の拡張シャドウ DOM に関する Element インターフェイスの拡張です。
シャドウ DOM に関する Node インターフェイスへの追加事項です。
シャドウ DOM に関する Event インターフェイスの拡張です。
Event.composedこのイベントがシャドウ DOM 境界を超えて標準 DOM にまで伝播する場合は true、そうでなければ false を返します。
Event.composedPathイベントのパス(リスナーが呼び出されたオブジェクト)を返します。 ShadowRoot.mode が closed でシャドウルートが生成された場合、シャドウツリー内のノードは含まれません。
HTML の断片を含みますが、最初に文書を読み込んだときにはレンダリングされず、実行時に JavaScript を使って表示することができます。関連する DOM インターフェイスは HTMLTemplateElement です。
<slot>ウェブコンポーネント内のプレースホルダーで、独自のマークアップで埋めることができます。これにより、別の DOM ツリーを生成し、それらを一緒に表示することができます。関連する DOM インターフェイスは HTMLSlotElement です。
slot グローバル HTML 属性シャドウ DOM のシャドウツリーにあるスロットを要素に割り当てます。
Element.assignedSlot読み取り専用の属性で、この要素が挿入される <slot> の参照を返します。
Text.assignedSlot読み取り専用の属性で、このテキストノードが挿入される <slot> の参照を返します。
Element の拡張スロットに関する Element インターフェイスの拡張です。
Element.slotこの要素に取り付けられたシャドウ DOM スロットの名前を返します。
CSS 擬似要素スロットに特化した擬似要素です。
::slottedスロットに挿入されたコンテンツに一致します。
slotchange イベントHTMLSlotElement のインスタンス (<slot> 要素) において、そのスロットに含まれるノードが変化したときに発行されます。
web-components-examples の GitHub リポジトリーに、いくつかの例を用意してあります。時間とともに、より多くの例が追加されることでしょう。
| HTML # the-template-element |
| DOM # interface-shadowroot |
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年9月17日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.