<template>: The TEMPLATE Element
Last updated: 2026-10-13
<template>The TEMPLATE Element
Declares a reusable HTML fragment that is not rendered and whose scripts do not run, until JavaScript clones and inserts it.
| Category | Scripts & Embedding |
|---|---|
| Content Model | Flow content |
| Allowed Parents | Any element that accepts flow content |
| Content Tag | Yes — requires closing </template> tag |
| Status | Standard |
📝 Syntax
<template id="row">
<tr><td></td></tr>
</template>
▶ Example
Edit the code below and see the live result in the playground:
🌐 Browser Support
| Browser | |||||
|---|---|---|---|---|---|
| <template> | ✓ v1 | ✓ v12 | ✓ v1 | ✓ v1 | ✓ v1 |
| Supported in all major browsers | |||||
Tip: template content exists in the DOM but is invisible and inert; access via .content then cloneNode.
❓ FAQ
QDoes template content get rendered?
ANo.
<template> content is parsed at load time but not rendered, scripts do not run, images do not load — it sits in an inert document fragment. Clone it (content.cloneNode(true)) and insert into the DOM to activate; this is the standard client-side templating approach.QHow does template differ from a display:none div?
AFundamentally: display:none content is still live DOM — scripts run, images load, selectors match it.
<template> content is fully inert, side-effect free, and invisible to normal selectors. Pending markup must go in template.QCan template be nested?
AYes — a template may contain another template; while the outer one is inert, the inner stays inert too. Nested templates suit multi-layer list structures (list within list), cloned and filled level by level.
🏷️ Related Tags
💡 Related Cases
More case studies coming soon — check back later.