<h1 id="mi-id">Externo</h1>

<template>
  <style>
    :host {
      display: block;
      border: 1px solid green;
      margin-bottom: 2rem;
    }
    
    h1#mi-id {
      margin-left: 1rem;
      margin-right: 1rem;
      border: 1px solid green;
    }
  </style>
  <h1 id="mi-id">Hola, Jaime Cervantes</h1>
  <p>¿Cómo estas?</p>
</template>

<mi-saludo></mi-saludo>
h1#mi-id {
  margin-left: 20rem;
  border: 1px solid red;
}
class MiSaludo extends HTMLElement {
  constructor () {
    // Obtengo la única etiqueta 'template'
    const tpl = document.querySelector('template');
    // Clono su contenido y se crea una instancia del document fragment
    const tplInst = tpl.content.cloneNode(true);
    
    super(); // invoca el constructor de la clase padre
    // Se crea un shado dom para las instancias de mi-saludo
    this.attachShadow({ mode: 'open'});
    // Y se agrega el template dentro del shadow DOM usando el elemento raíz 'shadowRoot'
    this.shadowRoot.appendChild(tplInst);
  }
}

// Se registra el custom element para poder ser utilizado declarativamente en el HTML o imperativamente mediante JS
customElements.define('mi-saludo', MiSaludo);

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.