ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
template要素とは
<template> は HTML5 で追加された要素で、「ページには描画したくないが、JS から取り出して使いたい HTML 断片」を埋め込むためのものです。中身はパース時に DOM ツリー化されますが、レンダリングされず、スクリプトも実行されず、画像も読み込まれません。一覧表示の繰り返しブロックや、Web Components の Shadow DOM のテンプレートとして使われます。
基本構文
<template id="card-template">
<div class="card">
<h3 class="title"></h3>
<p class="body"></p>
<button class="more">詳しく</button>
</div>
</template>
<div id="list"></div>
<script>
const tpl = document.getElementById('card-template');
const list = document.getElementById('list');
const data = [
{ title: '記事A', body: '本文A' },
{ title: '記事B', body: '本文B' },
];
for (const item of data) {
const node = tpl.content.cloneNode(true); // 深いコピー
node.querySelector('.title').textContent = item.title;
node.querySelector('.body').textContent = item.body;
list.appendChild(node);
}
</script>
特徴
- 中身は document fragment として保持される(
template.content) - 描画されない(display:none を書く必要すらない)
- 中の
<img>や<script>は読み込まれない・実行されない - HTML として不正な入れ子も書ける(
<tr>単体など) - JS で複製してから DOM に挿入するのが基本パターン
innerHTML との比較
| 項目 | innerHTML で連結 | <template> + cloneNode |
|---|---|---|
| パース | 毎回 HTML 文字列をパース | 初回 1 回だけ |
| 速度 | 遅い | 速い |
| XSS | 注意必要(文字列連結で混入しやすい) | safer(textContent で代入できる) |
| イベント | 後から再付与 | テンプレート側に書ける(複製後付与) |
| 可読性 | JS 内の文字列が肥大 | HTML と JS が分離 |
tr / td など不正な入れ子も書ける
通常の HTML では <table> の外に <tr> を書くと自動的に取り除かれてしまいますが、<template> の中であればテーブル断片だけを保持できます。
<template id="row-template">
<tr>
<td class="name"></td>
<td class="email"></td>
</tr>
</template>
<table>
<tbody id="tbody"></tbody>
</table>
Web Components との組み合わせ
Custom Elements の Shadow DOM を初期化するときに <template> がよく使われます。
const tpl = document.createElement('template');
tpl.innerHTML = `
<style>
.greet { color: tomato; font-weight: bold; }
</style>
<p class="greet">Hello, <slot name="name">World</slot>!</p>
`;
class HelloElement extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' })
.appendChild(tpl.content.cloneNode(true));
}
}
customElements.define('x-hello', HelloElement);
<template> と <slot> の違い
- <template>: ページに描画されないテンプレート定義。JS から取り出して使う
- <slot>: Shadow DOM 内で外部から挿入される箇所を示す。Web Components の差し込み穴
よくある落とし穴
tpl.cloneNode(true)をすると<template> ごとコピーされる — 使いたいのは中身なのでtpl.content.cloneNode(true)を使う- 同じ要素を直接 appendChild すると、最後の 1 つだけ DOM に移動してしまう(複製しないと使い回せない)
- 中身は描画されないので CSS のセレクタも当たらない(複製後に当たる)
- IE11 は未対応(モダンブラウザは全対応)
関連
- その他の要素 — 親カテゴリ
- 要素一覧
- figure要素
- canvas要素
- script要素
- slot要素 — 差し込み穴
- Web Components / Custom Elements / Shadow DOM
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- figure要素
- template要素
- figcaption要素で図に説明を付ける
- canvas要素
- iframe要素
- script要素
- noscript要素
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?