検索

現代の Web 開発では、フレームワークが大流行しています。ほとんどすべての最新のフレームワークにはコンポーネントの概念があります。 コンポーネントの背後にある考え方は、フロントエンド ロジックを、ページまたはプロジェクト間で共有できる、再利用可能な小さなチャンクに分割することです。 一般に、これらのコンポーネントは他のフレームワークでは再利用できず、ブラウザで実行できる JavaScript にコンパイルするためのビルド プロセスが必要になります。

バニラ JavaScript と、フレームワーク間で共有できる広く利用可能なブラウザ API を使用してコンポーネントを構築する方法があると言ったらどうなるでしょうか? これが Web コンポーネントで現実になります。ここでは、さまざまな種類の Web コンポーネントと、それらを使用して活用できる機能の一部を簡単に見ていきます。

Web コンポーネントの基本

Web コンポーネントは、カスタム要素レジストリを使用して定義されます。これは、最新のブラウザーのほとんどが提供する API です。 Web コンポーネントを作成するには、コードで定義し、カスタム要素レジストリに登録するだけです。正しい命名規則を使用してコンポーネントを登録および定義すると、そのコンポーネントをページ内で使用できるようになります。

customElements.define("my-component", MyComponentClass);

Web コンポーネントの種類

Web コンポーネントは 2 つの異なるカテゴリに分類できます。これらは、自律 Web コンポーネントカスタム組み込み要素 です。

Autonomous Web Components は、汎用 HTMLElement クラスの拡張です。これらのコンポーネントは、基本的にすべての動作をゼロからカスタマイズできる独自の HTML 要素を構築するため、一般に柔軟性が高くなります。これには、コンポーネントのレンダリングに使用されるルート要素が含まれます。 Autonomous Web コンポーネントを定義したら、他の HTML 要素と同じように使用します。

<my-button>



<p><strong>Custom Built-In Elements</strong> extend specific HTML elements.  For example, you may extend the HTMLButtonElement class or the HTMLAnchorElement.  These are meant to augment the functionality of existing HTML elements. To use a Custom Built-In element, you use the "is" attribute on the HTML element you are augmenting to tell it that it is an instance of the Web Component.<br>
</p>

<pre class="brush:php;toolbar:false"><button is="my-button">



<h3>
  
  
  Naming Web Components
</h3>

<p>When defining a Web Component, there are certain conventions that must be followed.  </p>

<p>Generally you will name your components similar to HTML elements with your own prefix attached to keep things simple (i.e. <my-button>).  The basic rules require that the element name start with a lowercase letter, and it must include a hyphen.  These guidelines will get you by for most cases, but I would recommend looking at the HTML spec if you're curious about all rules.<br>
</my-button></p>

<pre class="brush:php;toolbar:false"><!--Valid-->
<my-button></my-button>
<your-button></your-button>

<!--Invalid-->
<my-button></my-button>

<mybutton></mybutton>

ライフサイクルフック

Web コンポーネントには、コンポーネントが通過するさまざまなフェーズに反応するために使用される特定のライフサイクル フックがあります。 フックは次のとおりです:

  • connectedCallback ->コンポーネントが DOM にアタッチされるときに実行されます。
  • 切断されたコールバック ->コンポーネントが DOM から切り離されたときに実行されます。
  • 採用コールバック ->コンポーネントが新しい DOM にアタッチされるたびに実行されます。
  • attributeChangedCallback -> 「observedAttributes」のリストの属性が更新されたときに実行されます。
class MyComponent extends HTMLElement {
    static observedAttributes = ["btntype"]
    connectedCallback() {
        // Handle when the component is attached to the DOM
    }
    disconnectedCallback() {
        // Handle when the component is removed from the DOM
    }
    adoptedCallback() {
        // Handle when the component is attached to a new DOM
    }
    attributeChangedCallback(name, oldValue, newValue) {
        // Trigged when the "btntype" attribute is changed since it is in the list of observedAttributes.
        // "name" will be the name of the attribute that changed.
        // "oldValue" is the value before the change.
        // "newValue" is the new value after the change.
    }
}

これらのライフサイクル フックは、コンポーネント インスタンスの作成/破棄時に必要な初期化またはクリーンアップ作業を実行するために使用されます。 attributeChangedCallback は、属性値の更新に反応できるため、特に便利です。 Web コンポーネントには、「observedAttributes」と呼ばれる特別な静的属性があります。これは、attributeChangedCallback をトリガーする属性名 (文字列) の配列であることを意味します。

アクセシビリティ

アクセシビリティは、今日行われているあらゆる Web 開発において重要な考慮事項です。 Web コンポーネントに関しては、通常の HTML やフレームワークと同じように ARIA 属性を使用しますが、一般的には、使用している HTML 要素の組み込みロールとアクセシビリティ機能を継承します。

ここでも、他の場所と同じガイドラインがすべて適用されます。たとえば、コンポーネントを構築するときにセマンティック HTML を使用していることを確認し、必要なキーボード処理を追加し、フォーカスや色のコントラストなどが適切に管理されていることを確認してください。

シャドウ DOM

Shadow DOM は、おそらく Web コンポーネントの中で最も混乱し、物議を醸す部分です。 Shadow DOM は基本的に、Web コンポーネント

内に存在する DOM のスコープが個別に設定された部分です。

カスタム組み込み要素は既存の HTML 要素に追加されるだけであるため、Shadow DOM は主に Autonomous Web コンポーネントにとって懸念事項です。 Autonomous Web コンポーネントの場合、要素を表すカスタム タグ (つまり、) は「host」要素とみなされます。ホスト要素内には「シャドウ ルート」があります。シャドウ ルート内では、コンポーネントのマークアップがレンダリングされます。

これは、ホストとして「my-button」要素が表示され、内部に Shadow DOM が含まれる例です。

Web Components: An Introduction

Web コンポーネントを構築する場合、Shadow DOM を設定できるモードが 2 つあります。これらのモードには「オープン」と「クローズ」があります。開いている Shadow DOM には、Light DOM の Shadow Root の外側で JavaScript を使用してアクセスできますが、閉じた Shadow DOM にはアクセスできません。

customElements.define("my-component", MyComponentClass);

Shadow DOM 内で定義したスタイルはすべて Shadow DOM 内にスコープされ、ドキュメントの残りの部分を汚染しません。 「Light DOM」(ドキュメントの残りの部分) で定義されたスタイルは、Shadow DOM には浸透しません (CSS 変数は例外ですが、ここでは触れません)。 最新のブラウザでは、パーツを使用した CSS を使用して Light DOM から直接 Shadow DOM をターゲットにする方法が提供されています。 マークアップにパーツ属性を追加することで、コンポーネントの Shadow DOM にパーツを追加できます。 これらのパーツは、::part 疑似セレクターを使用して CSS でターゲットにすることができます。 これは非常に便利ですが、性質上かなり制限があります。 ::part セレクターから子セレクターをチェーンすることはできません。 Shadow DOM 内の「part」属性を持つ特定の要素のみをターゲットにできます。

Shadow DOM を使用する場合、アクセシビリティも重要な考慮事項です。 ARIA 属性を使用したことがある場合は、「aria-describeby」と「aria-labelledby」に精通しているでしょう。これらには通常、スクリーン リーダー用のコンテンツのラベルまたは説明を含む別の要素を参照する ID が与えられます。 Shadow DOM は、スタイルと同様に ID のスコープを個別に保持するため、Shadow DOM 内に存在する ID を Light DOM から参照したり、その逆を行うことはできません。 これは、動的に提供する必要がある詳細な説明を提供しようとするときに課題となる可能性がありますが、回避策は存在しますが、この紹介では詳しく説明しません。

テンプレートとスロット

テンプレートとスロットは、Shadow DOM と組み合わせて使用​​して Web コンポーネントを強化できるツールです。テンプレートは Web コンポーネント内で再利用可能なスニペットを作成するために使用され、スロットは Light DOM のコンテンツを渡すことができる「ホール」を公開するために使用されます。

Web コンポーネント内で何度もレンダリングする必要がある HTML のスニペットがある場合、テンプレートは便利です。これらは Web コンポーネントの外部でも使用できますが、使用例はより限定されます。これらは「template」タグを使用して実装されます。

スロットは、Light DOM から Web コンポーネントにコンテンツを渡すために使用され、「slot」タグを使用して実装されます。これは、動的コンテンツを渡す必要がある汎用コンポーネントがある場合に便利です。良い例としては、カードの本体にマークアップを渡すためにスロットを公開できる汎用カード コンポーネントが挙げられます。 スロットには、スロットを一意に識別するために指定できる「name」属性があります。これは、Web コンポーネントに複数のスロットを配置する必要がある場合に便利です。コンテンツを渡すとき、slot="your-slot-name" の値を持つ属性を渡すだけで、コンテンツは一致する名前のスロットに渡されます。

スロットと Shadow DOM には、注目に値する独特の相互作用があります。 スロットには、何も渡されない場合にレンダリングされるデフォルトのコンテンツを含めることができます。スロットに渡されたコンテンツは Light DOM 内に存在し、Shadow DOM に「浅くコピー」されます。 これはブラウザのインス​​ペクタで視覚的に確認できます。スロットのコンテンツは Web コンポーネント内でレンダリングされますが、DOM では、コンテンツは技術的には Web コンポーネントの外に存在し、スロットへのリンクを提供します。

Web Components: An Introduction

これは、すべてのスロット コンテンツが Light DOM 内の他のコンテンツと同様にスタイル設定され、参照されることを意味します。 Light DOM 内のスタイルはスロットの内容に影響しますが、Shadow DOM スタイルは影響しません。 Web コンポーネント内からスロット コンテンツを操作するために使用できる API があります。

Web コンポーネントのサポート

Web コンポーネントは、最新のブラウザーでかなりよくサポートされています。主な例外は Safari で、カスタム組み込み要素はサポートされていません。 Internet Explorer 11 などの古いブラウザをサポートする必要がある場合は、いくつかの要素をポリフィルする必要があります。

基本的な例

すべての基本概念を簡単に紹介したので、いくつかの例を見てみましょう。

自律的なカスタム要素

これは、「my-button」と呼ばれる自律カスタム要素の例です。

customElements.define("my-component", MyComponentClass);

最初に気づくのは、コードがほとんど同じであるということです。最大の違いは、HTMLButtonElement を直接拡張し、カスタム要素を定義するときにボタンを拡張することも宣言していることです。

要素をレンダリングするためのコードを書き出す時間も大幅に短縮されます。 HTMLButtonElement を拡張しているため、コンポーネントは追加の機能を備えた単なる HTML ボタンです。 HTML の「is」属性を使用して、HTML ボタンにそれが「my-button」であることを伝えます。

ライブの例は次のとおりです:

ここでも、「is」属性を使用して既存の HTML ボタン要素を拡張していることに気づくでしょう。 また、Autonomous カスタム要素と同様に、他の HTML 要素と同じようにイベント リスナーをアタッチしてボタンを操作できることにも気づくでしょう。文字通り、拡張された HTML ボタンであるため、ここではどちらにしてもこれが理にかなっています。

まとめ

Web コンポーネントは、さまざまなページやプロジェクト間で再利用できる共有可能なコンポーネントを作成するという問題を解決する標準的な方法です。これらは通常の HTML 要素と同じように機能するため、混乱が生じる可能性がありますが、最終的には非常に便利で、最新のフレームワークが対象としているのと同じ問題の多くを解決するのに役立ちます。

ここでは、Web コンポーネント、その周囲のさまざまな概念、およびその基本機能を示すいくつかの簡単な例について非常に入門的に説明しました。 ここから、それらの構築と使用を簡単にする方法をさらに深く掘り下げて、いくつかの問題点に対処する方法を検討していきます。

ご興味がございましたら、GitHub でサンプルをご覧ください。また、コード ペンで試してみることもできます。

  • 自律カスタム要素の例
  • カスタム組み込み要素の例
  • ボーナスの基本テンプレートの例!

次の記事では、テンプレートとスロットの使用を拡張する方法と、レンダリングを簡単にする方法を見ていきます。 乞うご期待!

以上がWeb コンポーネント: 概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい