MDC-111 Web: Material Components in Ihre Codebasis einbinden (Web)

1. Einführung

logo_components_color_2x_web_96dp.png

Material Components (MDC) unterstützen Entwickler bei der Implementierung von Material Design. MDC wurde von einem Team aus Entwicklern und UX-Designern bei Google entwickelt. Es enthält Dutzende schöne und funktionale UI-Komponenten und ist für Android, iOS, das Web und Flutter.material.io/develop verfügbar.

Material Components for the Web (MDC Web) sind frameworkunabhängig und werden mit regulärem JavaScript erstellt. So lässt sich MDC Web nahtlos in Ihren Entwicklungsprozess einbinden. Diese Komponenten können bei Bedarf installiert werden, um agile Designverbesserungen an Ihrer vorhandenen App vorzunehmen.

Inhalt

In diesem Codelab ersetzen Sie einige vorhandene Komponenten in einem Formular durch Komponenten von MDC Web:

c33f9d1388feca74.png

MDC-Webkomponenten in diesem Codelab

  • Schaltfläche
  • Auswählen
  • Textfeld

Voraussetzungen

  • Eine aktuelle Version von Node.js (im Lieferumfang von npm, einem JavaScript-Paketmanager)
  • Beispielcode (wird im nächsten Schritt heruntergeladen)
  • Grundkenntnisse in HTML, CSS und JavaScript

Wie würden Sie Ihre Erfahrung mit der Webentwicklung bewerten?

Neuling Mittel Kompetent

2. Entwicklungsumgebung einrichten

Codelab-App für den Einstieg herunterladen

Die Start-App befindet sich im Verzeichnis material-components-web-codelabs-master/mdc-111/starter. Sie müssen sich vor Beginn in diesem Verzeichnis cd befinden.

...oder von GitHub klonen

Führen Sie die folgenden Befehle aus, um dieses Codelab von GitHub zu klonen:

git clone https://github.com/material-components/material-components-web-codelabs
cd material-components-web-codelabs/mdc-111/starter

Projektabhängigkeiten installieren

Führen Sie im Startverzeichnis (material-components-web-codelabs/mdc-111/starter) folgenden Befehl aus:

npm install

Es werden viele Aktivitäten angezeigt. Am Ende sollte das Terminal eine erfolgreiche Installation anzeigen:

bb3a822c020c9287.png

Starter-App ausführen

Führen Sie im Starter-Verzeichnis Folgendes aus:

npm start

Die webpack-dev-server wird gestartet. Rufen Sie die Seite mit Ihrem Browser unter http://localhost:8080/ auf.

aa9263b15ae4f8d8.png

Fertig! Daraufhin wird das Formular für die Versandadresse der App angezeigt:

8f60906e660b695e.png

3. Schaltfläche aktualisieren

Schaltfläche „MDC installieren“

Drücken Sie Ctrl + C, um den Entwicklungsserver zu beenden. Installieren Sie dann das NPM-Paket für die MDC-Schaltfläche und starten Sie den Server neu:

npm install @material/button
npm start

CSS importieren

Löschen Sie im oberen Bereich von _theme.scss den .crane-button { ... }-Block und fügen Sie stattdessen Folgendes hinzu:

$mdc-theme-primary: $crane-primary-color;

@import "@material/button/mdc-button";

Markup aktualisieren

Entfernen Sie in index.html die Klasse crane-button aus dem Element <button>, fügen Sie die Klassen mdc-button und mdc-button--raised hinzu und verschachteln Sie das Label in einem <span>-Element mit der Klasse mdc-button__label:

<button type="submit" class="mdc-button mdc-button--raised">
  <div class="mdc-button__ripple"></div>
  <span class="mdc-button__label">Save</span>
</button>

Die Welle hinzufügen

MDC-Schaltflächen können ohne JavaScript verwendet werden. Wenn Sie der Schaltfläche jedoch eine interaktive Welle hinzufügen, wird die Nutzererfahrung verbessert.

Drücken Sie Ctrl + C, um den Anwendungsserver zu beenden. Führen Sie dann diesen Befehl aus:

npm install @material/ripple
npm start

Fügen Sie oben in app.js die folgende Importanweisung hinzu:

import {MDCRipple} from '@material/ripple';

Fügen Sie am Ende von app.js Folgendes hinzu, um die Welle für die Schaltfläche zu instanziieren:

new MDCRipple(document.querySelector('.mdc-button'));

Roboto-Schriftart importieren

In Material Design wird standardmäßig Roboto für Komponentenschriften verwendet.

Importieren Sie in index.html die Webschriftart „Roboto“, indem Sie dem <head>-Element Folgendes hinzufügen:

<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">

Aktualisieren Sie die Seite. Sie sollten dann in etwa Folgendes sehen:

9be8eb813b02eada.gif

Beim Drücken der Schaltfläche wird jetzt ein leichter Welleneffekt als visuelles Feedback angezeigt.

4. Ausgewähltes Element aktualisieren

Die MDC Select-Komponente umschließt ein natives HTML-<select>-Element. Verwenden Sie sie überall dort, wo Sie normalerweise ein <select> nutzen würden. Lassen Sie uns nun das Feld „State“ (Bundesstaat) aktualisieren.

MDC-Knotenmodul installieren

Drücken Sie Ctrl + C, um den Anwendungsserver zu beenden. Führen Sie dann diesen Befehl aus:

npm install @material/select
npm start

CSS importieren

Fügen Sie _theme.scss direkt nach dem Import der Schaltfläche Folgendes hinzu:

@import "@material/select/mdc-select";

Markup aktualisieren

Suchen Sie in index.html nach dem Element <select>. Ersetzen Sie die Klasse crane-input durch mdc-select__native-control:

<select class="mdc-select__native-control" id="crane-state-input" required>

Fügen Sie direkt über dem <select>-Tag das folgende Markup für den Drop-down-Pfeil der MDC Select-Komponente hinzu:

<i class="mdc-select__dropdown-icon"></i>

Ersetzen Sie direkt unter dem schließenden </select>-Tag die Klasse crane-label durch mdc-floating-label:

<label class="mdc-floating-label" for="crane-state-input">

Fügen Sie dann direkt nach dem Label das folgende Markup hinzu:

<div class="mdc-line-ripple"></div>

Fügen Sie zum Schluss die folgenden Tags um das <select>-Element herum, aber innerhalb des crane-field-Elements ein:

<div class="mdc-select">
  ...
</div>

Das resultierende Markup sollte in etwa so aussehen:

<div class="crane-field">
  <div class="mdc-select">
    <i class="mdc-select__dropdown-icon"></i>
    <select class="mdc-select__native-control" id="crane-state-input" required>
      <option value="" selected></option>
      <option value="AL">Alabama</option>
      ...
      <option value="WI">Wisconsin</option>
      <option value="WY">Wyoming</option>
    </select>
    <label class="mdc-floating-label" for="crane-state-input">
      State
    </label>
    <div class="mdc-line-ripple"></div>
  </div>
</div>

JS importieren

Fügen Sie ganz oben in app.js die folgende Importanweisung ein:

import {MDCSelect} from '@material/select';

Fügen Sie am Ende von app.js Folgendes hinzu, um die Auswahl zu instanziieren:

new MDCSelect(document.querySelector('.mdc-select'));

Aktualisieren Sie die Seite. Das sollte nun so aussehen:

20fa4104564f8195.gif

Die MDC-Auswahlkomponente präsentiert dem Nutzer eine Liste von Optionen in einem vertrauten Format, aber mit modernem Stil.

5. Textfelder aktualisieren

Textfelder in Material Design haben gegenüber einfachen <input>-Elementen eine deutliche Verbesserung der Nutzerfreundlichkeit. Sie sind so konzipiert, dass sie in komplizierten Inhalten leicht zu identifizieren sind, und sie zeigen subtiles visuelles Feedback an, wenn die Nutzenden mit ihnen interagieren.

MDC-Knotenmodul installieren

Drücken Sie Ctrl + C, um den Anwendungsserver zu beenden. Führen Sie dann diesen Befehl aus:

npm install @material/textfield
npm start

CSS hinzufügen

Fügen Sie _theme.scss direkt nach dem Import der Auswahl Folgendes hinzu:

@import "@material/textfield/mdc-text-field";

Markup aktualisieren

Suchen Sie in index.html nach dem <input>-Element für das Feld „Name“. Ersetzen Sie die Klasse crane-input durch mdc-text-field__input:

<input class="mdc-text-field__input" id="crane-name-input" type="text" required autofocus>

Ersetzen Sie als Nächstes die Klasse crane-label durch mdc-floating-label:

<label class="mdc-floating-label" for="crane-name-input">

Fügen Sie dann direkt nach dem Label das folgende Markup hinzu:

<div class="mdc-line-ripple"></div>

Umschließen Sie abschließend alle drei Elemente mit Folgendem:

<div class="mdc-text-field">
  ...
</div>

Das resultierende Markup sollte wie folgt aussehen:

<div class="crane-field">
  <div class="mdc-text-field">
    <input class="mdc-text-field__input" id="crane-name-input"
           type="text" required autofocus>
    <label class="mdc-floating-label" for="crane-name-input">
      Name
    </label>
    <div class="mdc-line-ripple"></div>
  </div>
</div>

Wiederholen Sie diesen Vorgang für alle anderen <input>-Elemente auf der Seite.

Das Markup für die Felder Address (Adresse), City (Ort) und ZIP Code (Postleitzahl) sollte so aussehen:

<div class="crane-field">
  <div class="mdc-text-field">
    <input class="mdc-text-field__input" id="crane-address-input" type="text" required>
    <label class="mdc-floating-label" for="crane-address-input">
      Address
    </label>
    <div class="mdc-line-ripple"></div>
  </div>
</div>
<div class="crane-field">
  <div class="mdc-text-field">
    <input class="mdc-text-field__input" id="crane-city-input" type="text" required>
    <label class="mdc-floating-label" for="crane-city-input">
      City
    </label>
    <div class="mdc-line-ripple"></div>
  </div>
</div>
<div class="crane-field">
  <div class="mdc-text-field">
    <input class="mdc-text-field__input" id="crane-zip-code-input"
            type="text" required minlength="5" maxlength="5" pattern="[0-9]*">
    <label class="mdc-floating-label" for="crane-zip-code-input">
      ZIP Code
    </label>
    <div class="mdc-line-ripple"></div>
  </div>
</div>

Sie können die Stile .crane-label und .crane-input jetzt aus _theme.scss entfernen, da sie nicht mehr verwendet werden.

JS importieren

Fügen Sie ganz oben in app.js die folgende Importanweisung ein:

import {MDCTextField} from '@material/textfield';

Fügen Sie unten in app.js Folgendes hinzu, um die Textfelder zu instanziieren:

const textFieldElements = [].slice.call(document.querySelectorAll('.mdc-text-field'));
textFieldElements.forEach((textFieldEl) => {
  new MDCTextField(textFieldEl);
});

Laden Sie die Seite neu. Sie sollte jetzt so aussehen:

c33f9d1388feca74.png

Die Textfelder wurden jetzt alle auf Material-Design-Designthemen umgestellt.

6. Zusammenfassung

Sie haben einige gängige Komponenten (Textfelder, Auswahl und Schaltfläche) ersetzt, ohne Ihre App komplett neu zu gestalten. Sehr gut gemacht!

Weitere Komponenten, die einen großen Unterschied machen können, sind die obere App-Leiste und die Navigationsleiste.

Weiteres Vorgehen

Weitere Komponenten in MDC Web finden Sie im MDC Web-Katalog.

Wenn Sie MDC Web mit einem bestimmten Framework verwenden möchten, lesen Sie MDC-112: Integrate MDC with Web Frameworks.

Ich konnte dieses Codelab mit angemessenem Zeitaufwand und Mühe abschließen.

Stimme vollkommen zu Stimme zu Weder zufrieden noch unzufrieden Stimme nicht zu Stimme überhaupt nicht zu

Ich möchte Material Components weiterhin verwenden.

Stimme voll und ganz zu Stimme zu Neutral Stimme nicht zu Stimme überhaupt nicht zu