Skip to content

Instantly share code, notes, and snippets.

@guilherme-teodoro
Created January 17, 2020 14:45
Show Gist options
  • Select an option

  • Save guilherme-teodoro/53f7956ee68000adad9c35ac27aab66b to your computer and use it in GitHub Desktop.

Select an option

Save guilherme-teodoro/53f7956ee68000adad9c35ac27aab66b to your computer and use it in GitHub Desktop.

Shadow DOM e Web components

Web Components é uma forma nativa que criar elementos reutilizáveis em aplicações web

Elementos nativos

Estrutura HTML simples e com elementos nativos

<html lang="en">
  <head>
    <meta charset="UTF-8"/>
    <title>Document</title>
  </head>
  <body>
    <h1>A great document</h1>
    <p>
      With a great text
    </p>
  </body>
</html>

light tree

- html
  - head
    - meta 
    - title
  - body
    - h1
    - p
  

Elementos customizados

Estrutura HTML simples e com elementos nativos e um customizado

<html lang="en">
  <head>
    <meta charset="UTF-8"/>
    <title>Document</title>
  </head>
  <body>
    <h1>A great document</h1>
    <p>
      With a great text
    </p>
    <ted-component>Olar</ted-component>
  </body>
</html>

light tree

- html
  - head
    - meta 
    - title
  - body
    - h1
    - p
    - ted-component

O que é Shadow DOM

É uma arquivo como qualquer outra, mas ela é anexada a um elemento específico da light tree e não documento em si. Criando um novo contexto que não interage diretamente com os outros nós do documento.

Criando seu próprio elemento html

Estrutura básica

class PopUpInfo extends HTMLElement {
  constructor() {
    // Sempre é necessário chamar o "super" no construtor
    super();

    // Aqui vc escreve seu componente
  }
}

Criando o "shadow root"

const shadow = this.attachShadow({mode: 'open'});
Mode open vs close

Elementos que usam o modo close não podem ter o shadow DOM acessados por fora. Por exemplo:

closedCustomElement.shadowRoot; // returna `null`

Por boa prática sempre use {mode: 'open'} para ajudar os amiguinhos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment