Skip to content

<template> - Content Template Element

Scripting HTML5

The <template> element holds HTML content that is not rendered when the page loads. It serves as a blueprint for content that can be cloned and inserted into the document via JavaScript. Template content is inert—scripts don’t run, images don’t load, and styles don’t apply until the template is activated.

Result
<template id="my-template">
<!-- Content here is inert -->
<div class="item">
<h2>Title</h2>
<p>Description</p>
</div>
</template>

Content inside <template> is completely inactive:

Result
Result
Result
Result

Templates provide a DocumentFragment when cloned:

Result

Templates are fundamental to Web Components:

Result

Templates offer significant performance advantages:

Result
Result

Excellent Modern Support

The <template> element is widely supported:

  • Chrome: 26+ (2013)
  • Firefox: 22+ (2013)
  • Safari: 8+ (2014)
  • Edge: All versions
  • Opera: 15+ (2013)
  • Mobile: Widely supported

Polyfill: For older browsers, use template element polyfill.

  • <slot> - Web Components content insertion
  • <script> - JavaScript execution
  • Custom Elements - Web Components API
  • Shadow DOM - Encapsulated DOM trees
  1. Use for repeated content: Perfect for lists, cards, etc.
  2. Clone, don’t reuse: Always clone template content
  3. Deep clone: Use cloneNode(true)
  4. Modify before insert: Change clones before adding to DOM
  5. Performance: Templates are faster than innerHTML for repeated use
  6. Web Components: Ideal for custom element definitions
  7. Keep simple: Templates are for structure, not logic
  8. Accessibility: Ensure cloned content is accessible
  9. Event listeners: Add after cloning, not in template
  10. Naming: Use descriptive template IDs

Learn More: