MDC-103 Web: Material Theming mit Farbe, Form, Höhe und Typ (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.

In den Codelabs MDC-101 und MDC-102 haben Sie mithilfe von Material Components (MDC) die Grundlagen einer App namens Shrine erstellt. Dies ist eine E-Commerce-App für den Verkauf von Kleidung und Haushaltswaren. Der User Flow dieser App beginnt mit einem Anmeldebildschirm, über den Nutzende zu einem Startbildschirm mit Produkten gelangen.

Material Design wurde kürzlich erweitert, um Designschaffenden und Entwickelnden mehr Flexibilität zu bieten, die Marke ihres Produkts zum Ausdruck zu bringen. In diesem Code-Lab verwenden Sie MDC, um die Shrine App auf vielfältigere Weise als je zuvor an den einzigartigen Stil der Marke anzupassen.

Inhalt

In diesem Codelab kannst du „Shrine“ so anpassen, dass es seine Marke widerspiegelt:

  • Farbe
  • Typografie
  • Höhe
  • Form
  • Layout

9c51661824dfa934.png

In diesem Codelab verwendete MDC-Webkomponenten und -Subsysteme

  • Design
  • Typografie
  • Höhe
  • Bildliste

Voraussetzungen

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

Wie würden Sie Ihre Erfahrung mit Webentwicklung bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

2. Entwicklungsumgebung einrichten

Weiter mit MDC-102?

Wenn Sie MDC-102 abgeschlossen haben, sollte Ihr Code für dieses Codelab bereit sein. Fahren Sie mit Schritt 3 fort: Farbe ändern.

Starter-Codelab-App herunterladen

Die Start-App befindet sich im Verzeichnis material-components-web-codelabs-master/mdc-103/starter. Achten Sie darauf, dass Sie sich in diesem Verzeichnis cd befinden, bevor Sie beginnen.

...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-103/starter

Projektabhängigkeiten installieren

Führen Sie im Startverzeichnis material-components-web-codelabs/mdc-103/starter (es sollte Ihr aktuelles Verzeichnis sein, wenn Sie den obigen Schritt ausführen) folgenden Befehl aus:

npm install

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

23003b0e5fdf9077.png

Starter-App ausführen

Führen Sie im selben Verzeichnis folgenden Befehl aus:

npm start

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

61dc5a089bf0986b.png

Fertig! Die Anmeldeseite von Shrine sollte in deinem Browser ausgeführt werden. Füllen Sie die Felder für Nutzername und Passwort aus und klicken Sie auf „Weiter“. um zur Startseite zu gelangen. Auf der linken Seite sollte eine Navigationsleiste neben einem Raster mit Produktbildern angezeigt werden.

e2f359c254988d75.png

Die Navigationsleiste ist zwar funktionsfähig, soll sie aber an die Marke „Shrine“ anpassen, indem wir ihre Farbe, Höhe und Typografie ändern.

3. Farbe ändern

Dieses Farbdesign wurde von einem Designer mit benutzerdefinierten Farben erstellt (siehe Bild unten). Sie enthält Farben, die aus der Marke Shrine ausgewählt und auf den Material Theme Editor angewendet wurden. Dieser hat sie erweitert, um eine umfassendere Palette zu erstellen. (Diese Farben stammen nicht aus den Material-Farbvorlagen von 2014.)

Ändern wir nun die Farbe der Navigationsleiste der Shrine App, um dieses Farbschema widerzuspiegeln.

Designfarben überschreiben

Erstellen Sie eine neue Datei mit dem Namen _variables.scss, die Folgendes enthält:

$mdc-theme-primary: #FEDBD0;
$mdc-theme-on-primary: #442C2E;
$mdc-theme-secondary: #FEEAE6;
$mdc-theme-on-secondary: #442C2E;
$mdc-theme-surface: #FFFBFA;
$mdc-theme-on-surface: #442C2E;
$mdc-theme-background: #FFFFFF;
$mdc-theme-on-background: #442C2E;

Importieren Sie sie dann ganz oben in _common.scss:

@import "./variables";

CSS-Stile zur Navigationsleiste hinzufügen

Fügen Sie in „home.scss“ nach den vorhandenen Importen die folgende Importanweisung hinzu:

@import "@material/ripple/mixins";

Fügen Sie dann die folgenden Stile hinzu und erstellen Sie die Klasse .shrine-drawer:

.shrine-drawer {
  @include mdc-drawer-fill-color-accessible(primary);
  // Drawer defaults to a higher z-index, but we aren't overlaying it over anything
  @include mdc-drawer-z-index(0);

  text-transform: uppercase;

  .mdc-list {
    margin: 70px 5px auto 5px;
  }

  .mdc-list-item {
    border-radius: 6px;
    justify-content: center;
  }

  // This needs 3-class specificity to override MDC Drawer styles
  .mdc-list .mdc-list-item {
    @include mdc-states-activated(#fff);
  }
}

Aktualisieren Sie die Seite unter http://localhost:8080/home.html. Ihr Startbildschirm sollte jetzt so aussehen:

816105f1c5a033f2.png

Ändern wir die Farbe des Anmeldebildschirms, damit sie zu unserem Farbschema passt.

CSS-Stile zur Anmeldeseite hinzufügen

Fügen Sie in login.scss die folgenden Zeilen hinzu:

.shrine-login {
  background-color: $mdc-theme-background;
  color: $mdc-theme-on-background;
}

.cancel {
  @include mdc-button-ink-color(on-primary);
}

Fügen Sie außerdem die folgenden Mixin-Aufrufe in den CSS-Selektor .username, .password ein:

.username,
.password {
  &:not(.mdc-text-field--invalid) {
    @include mdc-text-field-label-color(on-primary);
  }
  &.mdc-text-field--focused:not(.mdc-text-field--invalid)  {
    @include mdc-text-field-label-color(on-primary);
  }
  ...
}

Aktualisieren Sie die Seite unter http://localhost:8080/. Ihr Anmeldebildschirm sollte nun so aussehen:

9e0172a18582a44e.png

4. Typografie und Labelstile ändern

Zusätzlich zu den Farbänderungen haben Ihre Designschaffenden Ihnen auch spezifische Typografien zur Verwendung auf der Website bereitgestellt. Lassen Sie uns das auch zur Navigationsleiste hinzufügen.

Führen Sie folgenden Befehl aus, um das Typografie-Paket zu installieren:

npm install @material/typography

CSS für Typografie hinzufügen

Fügen Sie in home.scss nach den vorhandenen Importen die folgende Importanweisung hinzu:

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

Fügen Sie dann der Klasse shrine-title den folgenden Mixin-Aufruf hinzu:

.shrine-title {
  @include mdc-typography(headline6);
  ...
}

Als Nächstes gestalten wir die Leistenelemente.

Linientrennzeichen hinzufügen

Fügen Sie in home.html direkt nach dem <a ...>Featured</a>-Element Folgendes ein:

<div class="shrine-select-item-divider mdc-list-divider" role="separator"></div>

Fügen Sie home.scss die folgenden Stile hinzu:

.shrine-select-item-divider {
  display: block;
  border-bottom-color: #EAA4A4;
  border-bottom-width: 2px;
  width: 50px;
  position: relative;
  top: -8px;
}

// This needs 2-class specificity to override MDC Drawer styles
.shrine-drawer .shrine-select-item-divider {
  margin: 0 auto;
}

Bildelemente und ‐labels anpassen

Fügen Sie home.scss im .product-list-Selektor die folgenden Stile hinzu, um die Elemente und Labels anzupassen:

.product-list {
  ...

  .mdc-image-list__supporting {
    justify-content: center;
  }

  .mdc-image-list__item {
    padding: 10px;
  }

  .mdc-image-list__label {
    @include mdc-typography(subtitle2);
  }
}

Aktualisieren Sie die Seite. Ihr Startbildschirm sollte jetzt so aussehen:

129ada72a02baf5a.png

5. Höhe anpassen

Nachdem Sie nun die Seite mit der spezifischen Farbe und Typografie von Shrine gestaltet haben, schauen wir uns die Bildliste mit den Produkten von Shrine an. Wir möchten die Aufmerksamkeit auf die Produkte lenken, indem wir sie stärker betonen.

Führen Sie folgenden Befehl aus, um das Elevation-Paket zu installieren:

npm install @material/elevation

Importanweisung hinzufügen

Fügen Sie in home.scss nach der letzten Importanweisung die folgende Zeile hinzu:

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

Umschließen der Bildliste mit einem neuen div-Element

Füge in home.html das folgende Markup um das <ul>-Element hinzu:

<div class="shrine-body">
 <ul...>
</div>

Höhenunterschied mit Sass-Mixins ändern

Fügen Sie in home.scss Folgendes hinzu:

.shrine-body {
  @include mdc-elevation(4);

  display: block;
  overflow: auto;
  z-index: 0; // Elevate over the drawer
}

Beeindruckend! Sie haben am linken Rand der weißen Oberfläche hinter den Bildlistenelementen einen Schatten hinzugefügt, sodass er leicht über der Navigation zu schwebt.

66c3d6a82fb8bb23.png

6. Layout ändern

Als Nächstes ändern wir das Layout, um Bilder mit unterschiedlichen Seitenverhältnissen und Größen anzuzeigen, damit jedes Bild in Bezug auf die anderen einzigartig aussieht.

HTML ändern

Aktualisieren Sie in home.html das mdc-image-list-Element, sodass es die Klasse mdc-image-list--masonry enthält:

<ul class="mdc-image-list mdc-image-list--masonry product-list">

Bilder hinzufügen

Ändern Sie in home.html das src-Attribut jedes img-Elements, damit es mit den Bildern im Ordner assets übereinstimmt. Aktualisieren Sie dann den Labeltext für jedes Bild. Wenn Sie fertig sind, sollte sie so aussehen:

    <ul class="mdc-image-list mdc-image-list--masonry product-list">
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/ginger-scarf.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Ginger scarf</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/blue-stone-mug.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Blue stone mug</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/cerise-scallop.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Cerise scallop tee</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/chambray-napkins.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Chambray napkins</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/fine-lines.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Fine lines tee</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/garden-strand.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Garden strand</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/gatsby-hat.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Gatsby hat</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/gilt-desk-trio.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Gilt desk trio</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/kitchen-quattro.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Kitchen quattro</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/seabreeze-sweater.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Seabreeze sweater</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/shrug-bag.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Shrug bag</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/stella-sunglasses.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Stella sunglasses</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/surf-and-perf.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Surf and perf shirt</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/vagabond-sack.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Vagabond sack</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/walter-henley.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Walter henley (white)</span>
        </div>
      </li>
      <li class="mdc-image-list__item">
        <img class="mdc-image-list__image" src="assets/weave-keyring.jpg">
        <div class="mdc-image-list__supporting">
          <span class="mdc-image-list__label">Weave keyring</span>
        </div>
      </li>
    </ul>

CSS aktualisieren

Entfernen Sie in home.scss das Mixin mdc-image-list-standard-columns(4) und ersetzen Sie es durch das folgende Mixin:

@include mdc-image-list-masonry-columns(4);

Fügen Sie dann der Klasse product-list in home.scss die folgenden padding-Werte hinzu:

.product-list {
  ...
  padding: 80px 100px 0;
}

9c51661824dfa934.png

Der Code sollte jetzt mit dem im Ordner complete/ enthaltenen Code übereinstimmen.

7. Anderes Design ausprobieren

Farbe ist ein wirkungsvolles Mittel, um Ihre Marke auszudrücken, und eine kleine Farbänderung kann einen großen Einfluss auf die User Experience haben. Um dies zu testen, sehen wir uns an, wie Shrine aussehen würde, wenn das Farbschema der Marke völlig anders wäre.

CSS ändern

Ersetzen Sie in _variables.scss die Variablen, die Sie für das primäre Design deklariert haben, durch Folgendes:

$mdc-theme-primary: #5D1049;
$mdc-theme-on-primary: #FFFFFF;
$mdc-theme-secondary: #E30425;
$mdc-theme-on-secondary: #FFFFFF;
$mdc-theme-surface: #FFFFFF;
$mdc-theme-on-surface: #000000;
$mdc-theme-background: #F4E2ED;
$mdc-theme-on-background: #000000;

Entfernen Sie in login.scss die Mixins in der .username, .password-Auswahl. Sie sollte so aussehen:

.username,
.password {
  display: block;
  width: 300px;
  margin: 20px auto;
}

Entfernen Sie außerdem die Mixin-Überschreibung mdc-button-ink-color in der Klasse .cancel:

Fügen Sie in home.scss der Klasse .home die folgende Regel hinzu:

background-color: $mdc-theme-background;

Ersetzen Sie im .shrine-logo-drawer-Selektor das Attribut fill durch die Farbe Primär:

.shrine-logo-drawer {
  ...
  fill: $mdc-theme-on-primary;
}

Legen Sie entsprechend im .shrine-title-Selektor für die Eigenschaft color die Farbe Primär fest:

.shrine-title {
  ...
  color: $mdc-theme-on-primary;
}

Entfernen Sie abschließend das zuvor unter dem .shrine-body-Selektor verwendete mdc-elevation-Mixin.

Erstellen und ausführen. Das neue Design sollte jetzt in Ihrem Browser angezeigt werden.

7fdf830a944e53d7.png

Gehen Sie jetzt zu http://localhost:8080/home.html, um die Änderungen auf der Seite home.html zu sehen.

7369127decb1a875.png

8. Zusammenfassung

Sie haben jetzt eine App erstellt, die den Spezifikationen Ihrer Designfachkraft ähnelt.

Weiteres Vorgehen

Sie haben jetzt die folgenden MDC-Komponenten verwendet: Design, Typografie, Höhe und Form. Im MDC-Webkatalog finden Sie weitere Komponenten und Subsysteme.

Ich konnte dieses Codelab mit angemessenem Zeit- und Arbeitsaufwand abschließen

<ph type="x-smartling-placeholder"></ph> Stimme vollkommen zu Stimme zu Weder zufrieden noch unzufrieden Stimme nicht zu Stimme überhaupt nicht zu

Ich möchte Material Components weiterhin verwenden.

<ph type="x-smartling-placeholder"></ph> Stimme vollkommen zu Stimme zu Weder zufrieden noch unzufrieden Stimme nicht zu Stimme überhaupt nicht zu