<template>:スクリプトによって文書に挿入できるHTMLの断片を定義する要素・HTMLタグの解説

取り扱い 標準仕様
カテゴリー メタデータ・コンテンツ
フロー・コンテンツ
フレージング・コンテンツ
親にできる要素 メタデータ・コンテンツ、フレージング・コンテンツ、スクリプト対応要素を受け入れる要素。span属性を持たない<colgroup>
子にできる要素 全ての要素
対応ブラウザ caniuseで確認

<template>タグの解説

<template>は、スクリプトによって文書に挿入できるHTMLの断片を定義します。ページの読み込み時には描画されないコンテンツの断片を定義し、後にJavaScriptを通じてアクティベート可能な状態でマークアップすることができます。

使用用途としては、重複する内容の一部をテンプレートとして保持したり、ユーザーの操作でDOMの内容が変化するようなコンテンツに向いています。

<template>タグの特徴

  • この要素に囲まれた部分は、ページ読み込み時に自律動作しません。つまり、この範囲内にマークアップされたは箇所は、隠れたDOMとして保存され、呼び出されるまで表示されません。
  • テンプレート内のコンテンツは、アクティベートされるまでドキュメント内に存在しないものとして扱われます。よって、画像や動画、音声はロードされませんし、スクリプトは実行されません。
  • <template><head><body>の中であれば、どこにでも置くことができます(コンテンツモデルの子要素以外)。そして、その中に置けるコンテンツであれば、何を置いても構いません。
  • テンプレートを使うには、JavaScriptでアクティベート(有効化)する必要があります。

<template>要素に指定できる属性

shadowrootmode
親要素のシャドウルートを生成します。Element.attachShadow()メソッドを宣言するもので、enumerated値を受け入れます。
  • open:内部シャドウルートDOMをJavaScriptに公開します。
  • closed:内部シャドウルートDOMをJavaScriptから隠します。
shadowrootclonable
この要素を使って作成したシャドウルートのclonableプロパティの値をtrueに設定します。この場合、Node.cloneNode()またはDocument.importNode()でシャドウホスト(<template>の親要素)の複製を作成すると、コピーにシャドウルートが含まれます。
shadowrootdelegatesfocus
この要素を使って作成したシャドウルートのdelegatesFocusプロパティの値をtrueに設定します。この場合、シャドウツリー内のフォーカスできない要素が選択された場合、フォーカスはツリー内の最初のフォーカス可能な要素に移ります。既定値はfalseです。
グローバル属性
全てのHTML要素に指定できる共通の属性です。詳細は一覧表で解説します。
イベントハンドラ
全てのHTML要素に指定できるコンテンツ属性です。

<template>要素の使い方とサンプルコード

この要素の最も基本的な書き方は以下の通りです。既定では画面に表示されず、存在しない要素として扱われます。内部にJavascriptで扱われる内容を書き込みます。


<template id="template">
	// 任意の内容
</template>

このタグを使ったマークアップのサンプルです。


<template id="myTemplate">
	<img src="" alt="image">
	<div class="comment"></div>
</template>

<script>
	const t = document.querySelector('#myTemplate');
	t.content.querySelector('img').src = 'file.png';
	const clone = document.importNode(t.content, true);
	document.body.appendChild(clone);
</script>

<template>に関連するHTMLタグ

オブジェクトやスクリプトを埋め込む要素
<img> 画像ファイルを読み込む
<picture> 画像に対して複数のリソースを提供可能なコンテナを配置する
<figure> 写真や図表などの自己完結した要素を表す
<figcaption> 参照される写真や図表にキャプションを追加する
<canvas> スクリプトで描かれたグラフィックやアニメーションを表示する
<audio> ページに音声コンテンツを埋め込む
<video> ページに動画コンテンツを埋め込む
<source> 再生候補となる動画や音源などのメディアソースを指定する
<track> 音声や動画コンテンツにテキストトラックを提供する
<embed> 外部コンテンツを埋め込む
<object> 外部リソースのオブジェクトを埋め込む
<param> パラメーターを指定する
<script> HTMLで実行可能なスクリプトを埋め込む
<noscript> スクリプトが動作しない環境での表示内容を指定する
<meter> 規定範囲内の数量や測定値を表す
<progress> 作業の進捗状況を示すプログレスバーを表示する
<output> 計算結果やユーザーアクションの出力欄を作成する
<dialog> 任意のタイミングで開くダイアログボックスを作成する
<template> ページ読み込み後にスクリプトの実行によって挿入可能な要素を定義する
<slot> ウェブコンポーネントで独自に扱える枠を提供する