12. Custom elements

Versión para imprimir.

En esta lección se presentan los custom elements.

A. Custom element

Ejemplo

Salida

Ábrelo en otra pestaña.

Revísalo en gilpgedit.

<!DOCTYPE html>
<html lang="es">

<head>
 <meta charset="UTF-8">
 <meta name="viewport"
   content="width=device-width">
 <title>Custom elements</title>
 <style>
  elemento-1 {
   color: blue;
  }

  elemento-2 {
   display: block;
   background-color: aqua;
  }
 </style>
</head>

<body>
 <h1>Custom elements</h1>
 <elemento-1>Hola</elemento-1>
 <elemento-1>
  <em>Saludos</em>
 </elemento-1>
 <elemento-2>
  Estoy de buenas 😁
 </elemento-2>
</body>

</html>

B. Los custom element en acción

Ejemplo

Salida

Ábrelo en otra pestaña.

Revísalo en gilpgedit.

<!DOCTYPE html>
<html lang="es">

<head>
 <meta charset="UTF-8">
 <meta name="viewport"
   content="width=device-width">
 <title>Acción</title>
 <script>
  class Elemento3
   extends HTMLElement {
   connectedCallback() {
    this.innerHTML = /* html */
     `Estoy volando🚁
      <strong>
       alto
      </strong>.`
    this.addEventListener("click",
     () => this.clic())
   }
   clic() {
    alert("ouch")
   }
  }
  customElements.define(
   "elemento-3", Elemento3)
 </script>
 <style>
  elemento-3 {
   cursor: pointer;
  }
 </style>
</head>

<body>
 <h1>Acción</h1>
 <elemento-3></elemento-3>
 <p>Saludos desde la tierra.</p>
 <elemento-3></elemento-3>
</body>

</html>

C. Uso de atributos

Ejemplo

Salida

Ábrelo en otra pestaña.

Revísalo en gilpgedit.

<!DOCTYPE html>
<html lang="es">

<head>
 <meta charset="UTF-8">
 <meta name="viewport"
   content="width=device-width">
 <title>Atributos</title>
 <script>
  class MiSaludo
   extends HTMLElement {
   connectedCallback() {
    const nombre =
     this.getAttribute("nombre")
    const alegre =
     this.hasAttribute("alegre")
    const icono =
     alegre ? "😄" : "🖐"
    this.innerHTML = /* html */
     `${icono}
      hola
      <strong>${nombre}</strong>.`
   }
  }
  customElements.define(
   "mi-saludo", MiSaludo)
 </script>
</head>

<body>
 <h1>Atributos</h1>
 <p>
  <mi-saludo nombre="pp">
  </mi-saludo>
 </p>
 <p>
  <mi-saludo nombre="tt" alegre>
  </mi-saludo>
 </p>
</body>

</html>

D. Resumen