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

1. Einführung

logo_components_color_2x_web_96dp.png

Mit Material Components (MDC) können Entwickler Material Design implementieren. MDC wurde von einem Team aus Ingenieuren und UX-Designern bei Google entwickelt und bietet Dutzende von ansprechenden und funktionalen UI-Komponenten. Es ist für Android, iOS, das Web und Flutter verfügbar.material.io/develop

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 einfügen. Diese Komponenten können nach Bedarf installiert werden, um agile Designverbesserungen in Ihrer bestehenden App vorzunehmen.

Was Sie erstellen

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

c33f9d1388feca74.png

MDC Web-Komponenten in diesem Codelab

  • Schaltfläche
  • Auswählen
  • Textfeld

Voraussetzungen

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

Wie würden Sie Ihre Kenntnisse in der Webentwicklung einschätzen?

Anfänger Fortgeschritten Experte

2. Entwicklungsumgebung einrichten

Starter-App für das Codelab herunterladen

Die Starter-App befindet sich im Verzeichnis material-components-web-codelabs-master/mdc-111/starter. Wechseln Sie vor dem Start in dieses Verzeichnis.cd

...oder aus GitHub klonen

Führen Sie die folgenden Befehle aus, um dieses Codelab aus 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 Starter-Verzeichnis (material-components-web-codelabs/mdc-111/starter) folgenden Befehl aus:

npm install

Es wird viel Aktivität angezeigt und am Ende sollte im Terminal eine erfolgreiche Installation zu sehen sein:

bb3a822c020c9287.png

Starter-App ausführen

Führen Sie im Starter-Verzeichnis folgenden Befehl aus:

npm start

Der webpack-dev-server wird gestartet. Rufen Sie in Ihrem Browser http://localhost:8080/ auf, um die Seite zu sehen.

aa9263b15ae4f8d8.png

Fertig! Sie sollten das Formular für die Lieferadresse der App sehen:

8f60906e660b695e.png

3. Schaltfläche aktualisieren

MDC-Schaltfläche installieren

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

npm install @material/button
npm start

CSS-Code importieren

Löschen Sie oben in _theme.scss den Block .crane-button { ... } und fügen Sie stattdessen Folgendes ein:

$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>

Wellen 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 Entwicklungsserver zu beenden. Führen Sie dann folgenden 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 unten in app.js Folgendes hinzu, um die Welle auf der Schaltfläche zu instanziieren:

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

Roboto-Schriftart importieren

Standardmäßig verwendet Material Design Roboto für die Schriftarten der Komponenten.

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

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

Laden Sie die Seite neu. Sie sollten in etwa Folgendes sehen:

9be8eb813b02eada.gif

Die Schaltfläche zeigt jetzt einen subtilen Welleneffekt als visuelles Feedback an, wenn sie gedrückt wird.

4. Auswahlelement aktualisieren

Die MDC-Auswahlkomponente umschließt ein natives HTML <select> Element. Verwenden Sie sie überall dort, wo Sie normalerweise ein <select>-Element verwenden würden. Wir aktualisieren jetzt das "Bundesland" Feld.

MDC-Node-Modul installieren

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

npm install @material/select
npm start

CSS-Code 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 das 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 Tag <select> das folgende Markup für den Drop-down-Pfeil der MDC-Auswahlkomponente hinzu:

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

Ersetzen Sie direkt unter dem schließenden Tag </select> 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 schließlich die folgenden Tags um das <select> Element herum hinzu (aber innerhalb des crane-field Elements):

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

Das resultierende Markup sollte 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-Code importieren

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

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

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

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

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

20fa4104564f8195.gif

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

5. Textfelder aktualisieren

Material Design-Textfelder bieten im Vergleich zu einfachen <input> Elementen erhebliche Vorteile in Bezug auf die Nutzerfreundlichkeit. Sie sind so konzipiert, dass sie in komplexen Inhalten leicht zu erkennen sind, und zeigen subtiles visuelles Feedback an, wenn der Nutzer mit ihnen interagiert.

MDC-Node-Modul installieren

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

npm install @material/textfield
npm start

CSS-Code 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 das Element <input> 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 dann 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 schließlich alle drei Elemente mit Folgendem:

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

Das resultierende Markup sollte so 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 "Adresse", "Ort" und "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 jetzt die Stile .crane-label und .crane-input aus _theme.scss entfernen, da sie nicht mehr verwendet werden.

JS-Code importieren

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

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 so aktualisiert, dass sie Material Theming verwenden.

6. Zusammenfassung

Sie haben einige gängige Komponenten (Textfelder, Auswahl und Schaltfläche) ersetzt, ohne das Design Ihrer App komplett zu überarbeiten. Gut gemacht!

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

Weiteres Vorgehen

Im MDC Web-Katalog finden Sie noch mehr Komponenten in MDC Web.

Wenn Sie MDC Web mit einem bestimmten Framework verwenden möchten, lesen Sie den Artikel MDC-112: MDC in Web-Frameworks einbinden.

Ich konnte dieses Codelab in angemessener Zeit und mit angemessenem Aufwand abschließen.

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

Ich möchte Material Components auch in Zukunft verwenden.

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