SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
   
 
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

Mais procurados

SEO - Otimização de Sites
SEO - Otimização de SitesSEO - Otimização de Sites
SEO - Otimização de SitesRicardo Martins
 
Web components
Web componentsWeb components
Web componentsDiego Melo
 
Mini curso: Ionic Framework
Mini curso: Ionic FrameworkMini curso: Ionic Framework
Mini curso: Ionic FrameworkLoiane Groner
 
Site profissional em wordpress - emerson01@gmail
Site profissional em wordpress - emerson01@gmailSite profissional em wordpress - emerson01@gmail
Site profissional em wordpress - emerson01@gmailEmersonGonalves43
 
Melhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMelhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMaurício Linhares
 
Aula de HTML5 - DevCampos - www.devcampos.com.br
Aula de HTML5 - DevCampos - www.devcampos.com.brAula de HTML5 - DevCampos - www.devcampos.com.br
Aula de HTML5 - DevCampos - www.devcampos.com.brDevCampos
 
Vue.js - Framwork Progressivo
Vue.js - Framwork ProgressivoVue.js - Framwork Progressivo
Vue.js - Framwork ProgressivoBruno Santana
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPMarcelo Andrade
 
Desenvolvimento para a web usando html e css
Desenvolvimento para a web usando html e cssDesenvolvimento para a web usando html e css
Desenvolvimento para a web usando html e cssEduardo Bonfandini
 
HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2Israel Messias
 
HTML - HyperText Markup Language - 1
HTML - HyperText Markup Language - 1HTML - HyperText Markup Language - 1
HTML - HyperText Markup Language - 1Israel Messias
 
Passo a Passo SEO - Otimização de Sites para Sistemas de Busca
Passo a Passo SEO - Otimização de Sites para Sistemas de BuscaPasso a Passo SEO - Otimização de Sites para Sistemas de Busca
Passo a Passo SEO - Otimização de Sites para Sistemas de BuscaEnlink
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsEmerson Soares
 
Palestra: Otimização de websites
Palestra: Otimização de websitesPalestra: Otimização de websites
Palestra: Otimização de websitesIntrus
 

Mais procurados (20)

Mean Stack
Mean StackMean Stack
Mean Stack
 
SEO - Otimização de Sites
SEO - Otimização de SitesSEO - Otimização de Sites
SEO - Otimização de Sites
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Web components
Web componentsWeb components
Web components
 
Mini curso: Ionic Framework
Mini curso: Ionic FrameworkMini curso: Ionic Framework
Mini curso: Ionic Framework
 
Top Plugins Wordpress
Top Plugins WordpressTop Plugins Wordpress
Top Plugins Wordpress
 
Site profissional em wordpress - emerson01@gmail
Site profissional em wordpress - emerson01@gmailSite profissional em wordpress - emerson01@gmail
Site profissional em wordpress - emerson01@gmail
 
Melhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMelhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação Web
 
Aula de HTML5 - DevCampos - www.devcampos.com.br
Aula de HTML5 - DevCampos - www.devcampos.com.brAula de HTML5 - DevCampos - www.devcampos.com.br
Aula de HTML5 - DevCampos - www.devcampos.com.br
 
Vue.js - Framwork Progressivo
Vue.js - Framwork ProgressivoVue.js - Framwork Progressivo
Vue.js - Framwork Progressivo
 
Spa com Vue.js
Spa com Vue.jsSpa com Vue.js
Spa com Vue.js
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 
Desbravando o HTML5
Desbravando o HTML5Desbravando o HTML5
Desbravando o HTML5
 
Desenvolvimento para a web usando html e css
Desenvolvimento para a web usando html e cssDesenvolvimento para a web usando html e css
Desenvolvimento para a web usando html e css
 
HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2
 
HTML - HyperText Markup Language - 1
HTML - HyperText Markup Language - 1HTML - HyperText Markup Language - 1
HTML - HyperText Markup Language - 1
 
Passo a Passo SEO - Otimização de Sites para Sistemas de Busca
Passo a Passo SEO - Otimização de Sites para Sistemas de BuscaPasso a Passo SEO - Otimização de Sites para Sistemas de Busca
Passo a Passo SEO - Otimização de Sites para Sistemas de Busca
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no Windows
 
Instalação CakePHP 2.2.3
Instalação CakePHP 2.2.3Instalação CakePHP 2.2.3
Instalação CakePHP 2.2.3
 
Palestra: Otimização de websites
Palestra: Otimização de websitesPalestra: Otimização de websites
Palestra: Otimização de websites
 

Destaque

Um salve para evolução! construindo uma nova web com polymer
Um salve para evolução! construindo uma nova web com  polymerUm salve para evolução! construindo uma nova web com  polymer
Um salve para evolução! construindo uma nova web com polymerMarcus Silva
 
Material Design - do smartphone ao desktop
Material Design - do smartphone ao desktopMaterial Design - do smartphone ao desktop
Material Design - do smartphone ao desktopHillary Sousa
 
The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015Brandon Belvin
 
Polymer Elements: Tudo que você precisa saber para criar a web
Polymer Elements: Tudo que você precisa saber para criar a webPolymer Elements: Tudo que você precisa saber para criar a web
Polymer Elements: Tudo que você precisa saber para criar a webBeto Muniz
 
Apresentação Google I/O Extended Vitória
Apresentação Google I/O Extended VitóriaApresentação Google I/O Extended Vitória
Apresentação Google I/O Extended VitóriaFabiano Monte
 
Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Nitya Narasimhan
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Horacio Gonzalez
 
WebApps com Web Components
WebApps com Web ComponentsWebApps com Web Components
WebApps com Web ComponentsBeto Muniz
 
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Nitya Narasimhan
 
Tech talk polymer
Tech talk polymerTech talk polymer
Tech talk polymerYanuar W
 
Polymer and Firebase: Componentizing the Web in Realtime
Polymer and Firebase: Componentizing the Web in RealtimePolymer and Firebase: Componentizing the Web in Realtime
Polymer and Firebase: Componentizing the Web in RealtimeJuarez Filho
 
Angular 2 overview workshop
Angular 2 overview workshopAngular 2 overview workshop
Angular 2 overview workshopDenis Gorbunov
 
Pensando em UX / UI com o material design
Pensando em UX / UI com o material designPensando em UX / UI com o material design
Pensando em UX / UI com o material designThiago Marques
 
Componentizando a Web com Polymer
Componentizando a Web com PolymerComponentizando a Web com Polymer
Componentizando a Web com PolymerStefan Horochovec
 

Destaque (20)

Um salve para evolução! construindo uma nova web com polymer
Um salve para evolução! construindo uma nova web com  polymerUm salve para evolução! construindo uma nova web com  polymer
Um salve para evolução! construindo uma nova web com polymer
 
Material Design - do smartphone ao desktop
Material Design - do smartphone ao desktopMaterial Design - do smartphone ao desktop
Material Design - do smartphone ao desktop
 
The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015
 
Angular js gtg-27feb2013
Angular js gtg-27feb2013Angular js gtg-27feb2013
Angular js gtg-27feb2013
 
Polymer Elements: Tudo que você precisa saber para criar a web
Polymer Elements: Tudo que você precisa saber para criar a webPolymer Elements: Tudo que você precisa saber para criar a web
Polymer Elements: Tudo que você precisa saber para criar a web
 
Apresentação Google I/O Extended Vitória
Apresentação Google I/O Extended VitóriaApresentação Google I/O Extended Vitória
Apresentação Google I/O Extended Vitória
 
Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
 
Material design
Material designMaterial design
Material design
 
WebApps com Web Components
WebApps com Web ComponentsWebApps com Web Components
WebApps com Web Components
 
Polymer Starter Kit
Polymer Starter KitPolymer Starter Kit
Polymer Starter Kit
 
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
 
Tech talk polymer
Tech talk polymerTech talk polymer
Tech talk polymer
 
Polymer and Firebase: Componentizing the Web in Realtime
Polymer and Firebase: Componentizing the Web in RealtimePolymer and Firebase: Componentizing the Web in Realtime
Polymer and Firebase: Componentizing the Web in Realtime
 
Web components
Web componentsWeb components
Web components
 
O futuro do Android
O futuro do AndroidO futuro do Android
O futuro do Android
 
Angular 2 - a New Hope
Angular 2 - a New HopeAngular 2 - a New Hope
Angular 2 - a New Hope
 
Angular 2 overview workshop
Angular 2 overview workshopAngular 2 overview workshop
Angular 2 overview workshop
 
Pensando em UX / UI com o material design
Pensando em UX / UI com o material designPensando em UX / UI com o material design
Pensando em UX / UI com o material design
 
Componentizando a Web com Polymer
Componentizando a Web com PolymerComponentizando a Web com Polymer
Componentizando a Web com Polymer
 

Semelhante a Web Components: guia para desenvolvimento

Demoiselle Behave - Parte 2
Demoiselle Behave - Parte 2Demoiselle Behave - Parte 2
Demoiselle Behave - Parte 2Vanderson Silva
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
Otimize sua web page e web components
Otimize sua web page e web componentsOtimize sua web page e web components
Otimize sua web page e web componentsAndré Betiolo
 
SharePoint Deployment
SharePoint DeploymentSharePoint Deployment
SharePoint DeploymentAndré Vala
 
Wordpress e suas funções
Wordpress e suas funçõesWordpress e suas funções
Wordpress e suas funçõesDaniel Marcos
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Fernanda Bernardo
 
Otimização de Performance Web
Otimização de Performance WebOtimização de Performance Web
Otimização de Performance WebPaolo Almeida
 
Web 2.0 com Ajax: JQuery/PHP (Aula 02)
Web 2.0 com Ajax: JQuery/PHP (Aula 02)Web 2.0 com Ajax: JQuery/PHP (Aula 02)
Web 2.0 com Ajax: JQuery/PHP (Aula 02)Wagner Silva
 
Criando Sites Com CMS
Criando Sites Com CMSCriando Sites Com CMS
Criando Sites Com CMSClaudio Toldo
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 

Semelhante a Web Components: guia para desenvolvimento (20)

Demoiselle Behave - Parte 2
Demoiselle Behave - Parte 2Demoiselle Behave - Parte 2
Demoiselle Behave - Parte 2
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
Otimize sua web page e web components
Otimize sua web page e web componentsOtimize sua web page e web components
Otimize sua web page e web components
 
SharePoint Deployment
SharePoint DeploymentSharePoint Deployment
SharePoint Deployment
 
Wordpress e suas funções
Wordpress e suas funçõesWordpress e suas funções
Wordpress e suas funções
 
Web Performance Client Side
Web Performance Client SideWeb Performance Client Side
Web Performance Client Side
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Componentes para a Web
Componentes para a WebComponentes para a Web
Componentes para a Web
 
Workshop Magento
Workshop MagentoWorkshop Magento
Workshop Magento
 
Gsp007
Gsp007Gsp007
Gsp007
 
Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Otimização de Performance Web
Otimização de Performance WebOtimização de Performance Web
Otimização de Performance Web
 
Gwt parte 01
Gwt   parte 01Gwt   parte 01
Gwt parte 01
 
Web 2.0 com Ajax: JQuery/PHP (Aula 02)
Web 2.0 com Ajax: JQuery/PHP (Aula 02)Web 2.0 com Ajax: JQuery/PHP (Aula 02)
Web 2.0 com Ajax: JQuery/PHP (Aula 02)
 
Geek night-2015
Geek night-2015Geek night-2015
Geek night-2015
 
Criando Sites Com CMS
Criando Sites Com CMSCriando Sites Com CMS
Criando Sites Com CMS
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Tutorial codeigniter
Tutorial codeigniterTutorial codeigniter
Tutorial codeigniter
 

Web Components: guia para desenvolvimento