--- title: Web Components slug: Web/Web_Components tags: - Landing - NeedsTranslation - TopicStub - Web Components translation_of: Web/Web_Components ---

{{DefaultAPISidebar("Web Components")}}

Web Components は、再利用可能なカスタム要素を作成し、ウェブアプリの中で利用するための、一連のテクノロジーです。コードの他の部分から独立した、カプセル化された機能を使って実現します。 

概念と使用法

開発者ならご存知でしょうが、可能な限りコードを再利用することは良い考えです。しかしこれは、以前から、カスタムのマークアップ構造にとって、それほど簡単なことではありませんでした。複雑な HTML (と一連のスタイルやスクリプト) を考えてみて下さい。ときに、カスタム UI の制御をレンダリングするために、コードを書かなければなりません。それに、注意していないと、それらの制御をどう使い回すかで、ページが複雑なものになってしまいます。

Web Components は、上記の問題の解決を目指しています。 Web Components は、3 つの主要な技術からなり、それらを組み合わせて、多目的なカスタム要素を作成します。カプセル化された機能を使うことで、コードの重複を恐れることなく、どこでも再利用することができます。

Web Component を実装する基本的な流れは、以下に挙げてある通りです。

  1. Web Component の機能を明示したクラスもしくは関数を作成します。クラスを使用するなら、ECMAScript 2015 のクラスの文法に従って下さい。 (詳細はクラスを参照して下さい。)
  2. 新しく作成したカスタム要素を登録します。{{domxref("CustomElementRegistry.define()")}} メソッドに、要素の名前、機能が明示されているクラスもしくは関数、またオプションでどの要素を継承するかを渡して下さい。
  3. 必要なら、{{domxref("Element.attachShadow()")}} メソッドを使って、Shadow DOM をカスタム要素に紐付けます。通常の DOM メソッドを使って、子要素やイベントリスナーなどをShadow DOM に追加して下さい。
  4. 必要なら、{{htmlelement("template")}} と {{htmlelement("slot")}} を使って、HTML テンプレートを定義します。通常の DOM メソッドを再度使って、テンプレートをクローンし、Shadow DOM に紐付けてください。
  5. ページ内のお好きな場所で、通常の HTML 要素のように、カスタム要素を使って下さい。

チュートリアル

カスタム要素を使ってみよう
単純な Web Component を作成するために、カスタム要素の機能の使い方を紹介したガイドラインです。それ以外にも、ライフサイクルコールバックやその他の高度な機能の中を覗いていきます。
Shadow DOM を使ってみよう
Shadow DOM の基礎を眺めるガイドラインです。 Shadow DOM を要素にどう紐付けるか、Shadow DOM ツリーにどう追加するか、どうスタイルするかなどを紹介しています。
テンプレートとスロットを使ってみよう
{{htmlelement("template")}} と {{htmlelement("slot")}} 要素を使って、再利用可能な HTML 構造体の定義と使用方法を紹介したガイドラインです。 

リファレンス

カスタム要素

{{domxref("CustomElementRegistry")}}
カスタム要素に関わる機能が含まれています。中でも注目すべきは、 {{domxref("CustomElementRegistry.define()")}} メソッドで、新しいカスタム要素を登録するために用います。それにより、カスタム要素をドキュメント内で使用できるようになります。
{{domxref("Window.customElements")}}
CustomElementRegistry オブジェクトへの参照を返します。
Life cycle callbacks
カスタム要素のクラス定義の中で定義された特別なコールバック関数で、挙動に影響を与えます。
カスタムビルトイン要素を作成するための拡張機能
CSS の擬似クラス
カスタム要素に関連する擬似クラス:

Shadow DOM

{{domxref("ShadowRoot")}}
Represents the root node of a shadow DOM subtree.
{{domxref("DocumentOrShadowRoot")}}
A mixin defining features that are available across document and shadow roots.
{{domxref("Element")}} extensions
Extensions to the Element interface related to shadow DOM:
Relevant {{domxref("Node")}} additions
Additions to the Node interface relevant to shadow DOM:
{{domxref("Event")}} extensions
Extensions to the Event interface related to shadow DOM:

HTML templates

{{htmlelement("template")}}
Contains an HTML fragment that is not rendered when a containing document is initially loaded, but can be displayed at runtime using JavaScript, mainly used as the basis of custom element structures. The associated DOM interface is {{domxref("HTMLTemplateElement")}}.
{{htmlelement("slot")}}
A placeholder inside a web component that you can fill with your own markup, which lets you create separate DOM trees and present them together. The associated DOM interface is {{domxref("HTMLSlotElement")}}.
The slot global HTML attribute
Assigns a slot in a shadow DOM shadow tree to an element.
{{domxref("Slotable")}}
A mixin implemented by both {{domxref("Element")}} and {{domxref("Text")}} nodes, defining features that allow them to become the contents of an {{htmlelement("slot")}} element. The mixin defines one attribute, {{domxref("Slotable.assignedSlot")}}, which returns a reference to the slot the node is inserted in.
{{domxref("Element")}} extensions
Extensions to the Element interface related to slots:
CSS pseudo-elements
Pseudo-elements relating specifically to slots:
The {{event("slotchange")}} event
Fired on an {{domxref("HTMLSlotElement")}} instance ({{htmlelement("slot")}} element) when the node(s) contained in that slot change.

web-components-examples の GitHub レポジトリに、いくつかの例を用意してあります。時間とともに、より多くの例が追加されることでしょう。

仕様

仕様 ステータス コメント
{{SpecName("HTML WHATWG","scripting.html#the-template-element","<template> element")}} {{Spec2('HTML WHATWG')}} {{HTMLElement("template")}} の定義です。
{{SpecName("HTML WHATWG","custom-elements.html#custom-elements","custom elements")}} {{Spec2('HTML WHATWG')}} HTML Custom Elements の定義です。
{{SpecName("DOM WHATWG","#shadow-trees","shadow trees")}} {{Spec2('DOM WHATWG')}} Shadow DOM の定義です。
{{SpecName("HTML Imports", "", "")}} {{Spec2("HTML Imports")}} HTML Imports の最初の定義です。
{{SpecName("Shadow DOM", "", "")}} {{Spec2("Shadow DOM")}} Shadow DOM の最初の定義です。

ブラウザのサポート

一般に、

特定の機能のブラウザでの実装状況は、上記のページを調べるようにして下さい。

参考