<select>
</select>
<select>
<option value="s">Small</option>
<option value="m">Medium</option>
<option value="l">Large</option>
</select>
<select name="size" multiple>
<option value="s">Small</option>
<option value="m">Medium</option>
<option value="l" selected>Large</option>
</select>
select.onchange = function(){
const idx = this.selectedIndex;
const val = this.options[idx].value;
}
<section>, <video>, <article>,
<nav>, <main>, <aside>, ...
<div class="sidebar">
<div class="avatar medium">
<span class="username">...</span>
<span class="image"><img src="..." /></span>
</div>
</div>
Etendre le langage HTML afin d'avoir des éléments personnalisés et réutilisables !
Améliorer la lisibilité et la sémantique des pages : donner du sens !
<meetup-presentation>
<meetup-slide>
<h1>Principe</h1>
<p>....</p>
<p>....</p>
<code>...</code>
</meetup-slide>
</meetup-presentation>
Interopérabilité : pouvoir les utiliser où on veut sur le net, sans librairie particulière
Ca ne fonctionne que sur IE ou produits Mozilla (et pas entre eux ...)
On ne créé pas d'éléments (balises), mais uniquement des attributs
Au niveau de la page, on ne voit que des balises classiques, la sémantique n'est pas améliorée
Impossible à utiliser sans inclure les dépendances. Très dur d'utiliser les deux à la fois
2012 : Premier "draft" du W3C !
<script
type="text/mustache"
id="my-template">
<img src="">
<h2></h2>
</script>
<template
id="my-template">
<img src="">
<h2></h2>
</template>
Avant ...
Maintenant !
<link rel="import" href="un-fichier.html" />
class HelloWorldElement
extends HTMLElement {
constructor(){
super()
this.innerHTML = `
<h1>Hello les bros !</h1>
`
}
}
window.customElements.define(
'hello-world',
HelloWorldElement)
class HelloElement extends HTMLElement {
static get observedAttributes(){}
constructor(){
// initialisation
}
connectedCallback(){
// lors de l'ajout au DOM
}
disconnectedCallback(){
// lors du retrait du DOM
}
attributeChangedCallback(name,
oldVal,
newVal){
// lors du changement
// d'un attribut
}
}
// Création du shadowRoot
this.attachShadow({mode: 'open'});
// Utilisation du shadowRoot
this.shadowRoot.innerHTML = 'Hello Bros !';
Le ShadowDOM est une partie du document qui est complètement encapsulée dans notre élément !
<user-card></user-card>
<user-card
image="https://avatars.io/twitter/LiiorC"
full-name="Lior Chamla">
<a href="#">🔍 Voir le profil</a>
<a href="#">📧 Envoyer un mail</a>
</user-card>
Renseignez vous sur
webcomponents.org !
Vous, quand vous écrivez des web components ;-)