HTML TEMPLATES UI-Vorlage für eine Komponente SHADOW DOM Kapselung der inneren DOM- Bestandteile eines Elements HTML IMPORTS / ES MODULES Importieren von Komponenten WEB COMPONENTS
Ableitung von HTMLElement oder vorhandenem Element möglich Custom Element muss im Browser registriert werden class MyPerson extends HTMLElement { constructor(){ super(); this._firstName = null; } get firstName(){ return this._firstName; } set firstName(newName){ this._firstName = newName; } } customElements.define("my-person", MyPerson);
{ // render … } disconnectedCallback() { // release … } attributeChangedCallback(attr, oldValue, newValue) { // refresh … } static get observedAttributes() { return ['myProperty']; } adoptedCallback(oldDocument, newDocument) { // change … } } customElements.define('my-element', MyElement); }); Element wird erstellt Element wurde in ein neues Dokument verschoben Element wurde aus Dokument entfernt Attribut wurde geändert Attribute für Verfolgung registrieren Element registrieren Element wurde ins Dokument eingefügt CUSTOM ELEMENTS – LIFECYCLE METHODS
der nach dem Laden nicht direkt gerendert wird Wird erst bei Verwendung gerendert Das Fragment kann im Dokument wiederverwendet werden <table id="producttable"> <thead> <tr> <td>Nr.</td> <td>Name</td> </tr> </thead> <tbody> <!-- wird dynamisch mit inhalt gefüllt --> </tbody> </table> <template id="productrow"> <tr> <td class="record"></td> <td></td> </tr> </template>
für eine Komponente FEATURES Isolated DOM: Lokale Elemente der Komponente sind von außen nicht sichtbar. Scoped CSS: Lokale CSS-Definitionen wirken sich nur auf die Komponente aus. Composition: Komponente kann von außen per Markup erweitert werden. Einfaches CSS: Keine Konflikte mit id/class-Namen von außen. Produktivität: App besteht aus gekapselten, wiederverwendbaren Komponenten.
Shadow DOM Alle Styles sind lokal var shadow = document.querySelector('#host') .attachShadow({mode: 'open'}); shadow.innerHTML = '<span>Some new text</span>' + '<style>span { color: red; }</style>';
<button id="decrement-button">-</button> </div> <number-pad value="3" minimum="1" maximum="5"> <span slot="addition">kg</span> </number-pad> Verwendung: Template: SHADOW DOM - COMPOSITION DEFINITION Ermöglicht das Einbetten von benutzerdefinierten Elementen <slot>-Element im Template dient als Platzhalter slot-Eigenschaft im Host stellt die Verbindung her
Kann CSS und JavaScript enthalten Einbindung erfolgt über: <link rel="import"> Wird zukünftig von ES6-Modulen abgelöst <html> <head> <title>Human Being</title> <link rel="import" href="/imports/heart.html"> </head> <body> <p>What is a body without a heart?</p> </body> </html> var link = document.querySelector('link[rel=import]'); var heart = link.import; // Access DOM of the document in /imports/heart.html var pulse = heart.querySelector('div.pulse');
veröffentlicht Aktuell: Version 3 FEATURES Einfache Entwicklung von Custom Elements Two-Way Data Binding Computed Properties Conditional & Repeat Templates Gesture Events Element Library
Erleichtert die Zusammenarbeit zwischen Designern und Entwicklern, sowie zwischen Teams Zentraler Ablageort für gemeinsam UI-Fragmente (Komponenten, Styles, Assets, …)
UI-Fragmenten auf einem Screen BUILDING BLOCKS › Atoms – Tag Elements › Molecules – Pairs or Groups of Tags › Organisms – Container incl. Atoms & Molecules › Templates – Configured set of Organisms › Pages – Templates with real content OK Modecule OK Atom Organism
auch komplexe Komponenten BOOTSTRAP Enthält vorgefertigte Styles für Standardelemente TAILWIND Rudimentäre Infrastruktur für Styling und Layout Enthält keine Komponenten oder vorgefertigte Styles
Sass Ähnliche Funktionalität wie LESS, aber vereinfachte Syntax Sehr weit verbreitet in der Community SCSS Gleiche Funktionalität wie SASS Syntax orientiert sich an CSS SCSS
Reagiert dynamisch auf Änderungen des Viewport Behält immer die Relation zum jeweiligen Parent-Element Saubere Layouts sind mit Flexbox wesentlich zuverlässiger, schneller und mit weniger Code-Aufwand zu erreichen GRID Wird durch gängige Frameworks bereitgestellt
vertikale Aufteilung Mit Web Components können die Bereiche der App gekapselt und wiederverwendet werden Storyboards helfen ein gemeinsames Zielbild der App zu definieren Pattern Libs helfen bei Organisation von UI-Fragmenten NPM Module helfen beim Paketieren und Verteilen der Assets Flexbox und Grid helfen bei der Umsetzung eines flexibles Layouts Icomoon erstellt responsive Symbol-Grafiken