SlideShare uma empresa Scribd logo
   
 
WEB COMPONENTS
Workshop guia para o desenvolvimento de Web
Components
WEB COMPONENTS
O FUTURO DA WEB
O QUE GANHAMOS
COM ISSO
Encapsulamento de verdade
Reutilização e organização de código sem efeitos
colaterais
Baixo acoplamento nativo
PILARES
Custom Elements
Shadow DOM
Templates
HTML Imports
EM
DESENVOLVIMENTO
Chrome
1.  Abra a página
chrome://flags
2.  Habilite a flag de
funcionalidades
experimentais:
#enable‐
experimental‐web‐
platform‐features.
Firefox
1.  Abra a página
about:config
2.  Confirme o aviso de
atenção
3.  Procure pela preferência
dom.webcomponents.enabled
e altere seu valor para
true
CUSTOM ELEMENTS
Sopa de <div>s no Gmail.
CRIANDO
var XModalElement = document.registerElement('x­modal');
PRA QUÊ???
<batata></batata>
batata {
  background­color: #FF0;
  color: #DC8200;
  font­weight: bold;
}
var minhaBatata = document.getElementsByTagName('batata')[0];
minhaBatata.innerText = "frita";
frita
MAIS QUE SINTAXE
API PRÓPRIA
minhaBatata.fritar();
minhaBatata.assar();
minhaBatata.dourar();
HERANÇA
var SearchableSelectPrototype = Object.create(HTMLSelectElement.prototype);
SearchableSelectPrototype.filter = function(searchTerm) {
  // esconde os <option>s que não contém o termo
}
var SearchableSelectElement = document.registerElement('searchable­select'
  prototype: SearchableSelectPrototype
});
CICLO DE VIDA
createdCallback: Uma nova instância do elemento
foi criada
attachedCallback: Uma instância foi adicionada ao
documento
detachedCallback: Uma instância foi removida do
documento
attributteChangedCallback: Um atributo foi
adicionado, editado ou removido.
TEMPLATES
OS PROBLEMAS DE
HOJE
1 ­ MARCAÇÕES ESCONDIDAS
<div id="template" hidden>
  <img src="404.png" />
  <p></p>
</div>
2 ­ MARCAÇÕES NA TAG
SCRIPT
<script id="template" type="text/x­handlebars­template">
</script>
  <img src="404.png" />
  <p></p>
<template>
<template id="template">
  <img src="404.png" />
  <p></p>
</template>
ATIVANDO
var template = document.getElementById("template");
var content = template.content;
var target = document.getElementById("target");
target.appendChild(document.importNode(content, true));
SHADOW DOM
ENCAPSULAMENTO
SHADOW ROOT
Quando adicionado a um elemento, todo o seu
conteúdo se torna invisível
Totalmente separado do documento principal
Nenhum estilo entra ou sai
Não existe colisão de id com elementos do
documento
Quem o detém é chamado de Shadow Host
O host pode ser estilizado de dentro do shadow root
pelo seletor :host
CRIANDO UMA
SHADOW ROOT
<div id="target"></div>
var target = document.getElementById("target");
var shadowRoot = target.createShadowRoot();
var span = document.createElement("span");
span.id = "ninja";
span.textContent = "Sou um ninja!";
shadowRoot.appendChild(span);
document.getElementById("ninja");
//­> null
::shadow, /deep/
O pseudo­elemento ::shadow seleciona as shadow
roots de um elemento.
O combinador /deep/ simplesmente ignora as
blindagens que as shadow trees oferecem.
E O TAL DO
"ENCAPSULAMENTO?"
O objetivo do Shadow DOM é evitar mudanças
acidentais nos componentes, não tirar o controle da
mão dos desenvolvedores.
VOLTANDO...
document.querySelector("#target::shadow #ninja")
//­> <span id="ninja">Sou um ninja!</span>
document.querySelector("html /deep/ #ninja")
//­> <span id="ninja">Sou um ninja!</span>
<content>
<p id="loser">Vitor Belfort</p>
<template id="template">
  <strong>E o perdedor é:</strong>
  <p>
    <content></content>
  </p>
</template>
var loser = document.querySelector("#loser");
var templateContent = document.querySelector("#template").content;
var shadow = loser.createShadowRoot();
shadow.appendChild(document.importNode(templateContent, true));
<p id="loser">
  <strong>E o perdedor é:</strong>
  <p>
    Vitor Belfort
  </p>
</p>
<article id="target">
  <h1>Como Combater a Dengue</h1>
  <section>
    <p>Beba bastante água</p>
  </section>
</article>
<template id="template">
  <h1>Como Combater a Gripe</h1>
  <content select="section"></content>
</template>
var target = document.querySelector("#target");
var templateContent = document.querySelector("#template").content;
var shadow = target.createShadowRoot();
shadow.appendChild(document.importNode(templateContent, true));
<article id="target">
  <h1>Como Combater a Gripe</h1>
  <section>
    <p>Beba bastante água</p>
  </section>
</article>
"EM PRODUÇÃO"
<video src=".../BigBuckBunny.mp4" controls></video>
9:56
Shadow DOM do elemento <video> no Chrome
HTML IMPORTS
COMO?
1.  Importamos o documento
2.  Então usamos nosso elemento normalmente
<link rel="import" href="meu­elemento.html" />
<meu­elemento></meu­elemento>
DETALHES
No arquivo importado, o objeto document se refere ao
documento que o está requisitando.
Para ser capaz de selecionar elementos em seu
DOM, deve­se acessar o documento importado pela
propriedade
document.currentScript.ownerDocument.
QUERO USAR HOJE
 
 
 
Polymer
X­Tags
Bosonic
MANTENDO­SE
ATUALIZADO
 TWITTER
@Web_Components
@zenorocha
@rob_dodson
@polymer

Mais conteúdo relacionado

PDF
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPress
WordCamp Floripa
 
PDF
Desenvolvimento de Módulos Divi Builder
Daniel Paz
 
PPTX
Performance e otimização no wordpress
Daniel Paz
 
PPT
Apresentação blogs
luizaselis
 
PDF
O Básico para criar Sites Otimizados em Elementor
Daniel Paz
 
PDF
Ebook - Processo de Otimização de Sites WordPress
Daniel Paz
 
PPTX
Introdução ao DotNetNuke
Comunidade NetPonto
 
PDF
Ebook - Check-list otimização WordPress
Daniel Paz
 
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPress
WordCamp Floripa
 
Desenvolvimento de Módulos Divi Builder
Daniel Paz
 
Performance e otimização no wordpress
Daniel Paz
 
Apresentação blogs
luizaselis
 
O Básico para criar Sites Otimizados em Elementor
Daniel Paz
 
Ebook - Processo de Otimização de Sites WordPress
Daniel Paz
 
Introdução ao DotNetNuke
Comunidade NetPonto
 
Ebook - Check-list otimização WordPress
Daniel Paz
 

Mais procurados (20)

PDF
Mean Stack
Bruno Catão
 
PPS
SEO - Otimização de Sites
Ricardo Martins
 
PDF
Web Offline
Bruno Catão
 
PDF
Web components
Diego Melo
 
PDF
Mini curso: Ionic Framework
Loiane Groner
 
PDF
Top Plugins Wordpress
Leonardo de Souza
 
PPS
Site profissional em wordpress - emerson01@gmail
EmersonGonalves43
 
PPTX
Melhorando A Performance Da Sua Aplicação Web
Maurício Linhares
 
PDF
Aula de HTML5 - DevCampos - www.devcampos.com.br
DevCampos
 
PPTX
Vue.js - Framwork Progressivo
Bruno Santana
 
PDF
Desenvolvimento para a Web com CakePHP
Marcelo Andrade
 
PDF
Desbravando o HTML5
Mayron Cachina
 
PDF
Desenvolvimento para a web usando html e css
Eduardo Bonfandini
 
PDF
HTML - HyperText Markup Language - 2
Israel Messias
 
PDF
HTML - HyperText Markup Language - 1
Israel Messias
 
PPT
Passo a Passo SEO - Otimização de Sites para Sistemas de Busca
Enlink
 
PPTX
CakePHP - Configurando o ambiente de desenvolvimento no Windows
Emerson Soares
 
PPTX
Instalação CakePHP 2.2.3
Maurício Barfknecht
 
PPTX
Palestra: Otimização de websites
Intrus
 
Mean Stack
Bruno Catão
 
SEO - Otimização de Sites
Ricardo Martins
 
Web Offline
Bruno Catão
 
Web components
Diego Melo
 
Mini curso: Ionic Framework
Loiane Groner
 
Top Plugins Wordpress
Leonardo de Souza
 
Site profissional em wordpress - emerson01@gmail
EmersonGonalves43
 
Melhorando A Performance Da Sua Aplicação Web
Maurício Linhares
 
Aula de HTML5 - DevCampos - www.devcampos.com.br
DevCampos
 
Vue.js - Framwork Progressivo
Bruno Santana
 
Desenvolvimento para a Web com CakePHP
Marcelo Andrade
 
Desbravando o HTML5
Mayron Cachina
 
Desenvolvimento para a web usando html e css
Eduardo Bonfandini
 
HTML - HyperText Markup Language - 2
Israel Messias
 
HTML - HyperText Markup Language - 1
Israel Messias
 
Passo a Passo SEO - Otimização de Sites para Sistemas de Busca
Enlink
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
Emerson Soares
 
Instalação CakePHP 2.2.3
Maurício Barfknecht
 
Palestra: Otimização de websites
Intrus
 
Anúncio

Destaque (20)

PDF
Um salve para evolução! construindo uma nova web com polymer
Marcus Silva
 
PPTX
Material Design - do smartphone ao desktop
Hillary Sousa
 
PDF
The Beautiful Simplicity of ES2015
Brandon Belvin
 
PDF
Angular js gtg-27feb2013
Nitya Narasimhan
 
PDF
Polymer Elements: Tudo que você precisa saber para criar a web
Beto Muniz
 
PDF
Apresentação Google I/O Extended Vitória
Fabiano Monte
 
PDF
Introduction To Dart (GDG NY Jan 2014 Meetup)
Nitya Narasimhan
 
PDF
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Horacio Gonzalez
 
PPTX
Material design
David Tiago Conceição
 
PDF
WebApps com Web Components
Beto Muniz
 
PDF
Polymer Starter Kit
Evaldo Barbosa
 
PDF
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Nitya Narasimhan
 
PDF
Tech talk polymer
Yanuar W
 
PDF
Polymer and Firebase: Componentizing the Web in Realtime
Juarez Filho
 
PDF
Web components
Evaldo Barbosa
 
PDF
O futuro do Android
Erisvaldo Junior
 
PPTX
Angular 2 - a New Hope
Sami Suo-Heikki
 
PPTX
Angular 2 overview workshop
Denis Gorbunov
 
PPTX
Pensando em UX / UI com o material design
Thiago Marques
 
PPTX
Componentizando a Web com Polymer
Stefan Horochovec
 
Um salve para evolução! construindo uma nova web com polymer
Marcus Silva
 
Material Design - do smartphone ao desktop
Hillary Sousa
 
The Beautiful Simplicity of ES2015
Brandon Belvin
 
Angular js gtg-27feb2013
Nitya Narasimhan
 
Polymer Elements: Tudo que você precisa saber para criar a web
Beto Muniz
 
Apresentação Google I/O Extended Vitória
Fabiano Monte
 
Introduction To Dart (GDG NY Jan 2014 Meetup)
Nitya Narasimhan
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Horacio Gonzalez
 
Material design
David Tiago Conceição
 
WebApps com Web Components
Beto Muniz
 
Polymer Starter Kit
Evaldo Barbosa
 
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Nitya Narasimhan
 
Tech talk polymer
Yanuar W
 
Polymer and Firebase: Componentizing the Web in Realtime
Juarez Filho
 
Web components
Evaldo Barbosa
 
O futuro do Android
Erisvaldo Junior
 
Angular 2 - a New Hope
Sami Suo-Heikki
 
Angular 2 overview workshop
Denis Gorbunov
 
Pensando em UX / UI com o material design
Thiago Marques
 
Componentizando a Web com Polymer
Stefan Horochovec
 
Anúncio

Último (7)

PPTX
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
PPTX
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
PPTX
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
PDF
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
PPTX
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
PDF
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
PPTX
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 

Workshop de Web Components