MDC-111 Web: intégration de composants Material dans votre codebase (Web)

1. Introduction

logo_components_color_2x_web_96dp.png

Material Components (MDC) aide les développeurs à implémenter Material Design. Conçu par une équipe d'ingénieurs et de spécialistes de l'expérience utilisateur chez Google, MDC propose des dizaines de composants d'interface utilisateur élégants et fonctionnels. Il est disponible pour Android, iOS, le Web et Flutter.material.io/develop.

Material Components pour le Web (MDC Web) est indépendant du framework et est créé à l'aide de JavaScript standard. Cela permet à MDC Web de s'intégrer parfaitement à votre processus de développement. Ces composants peuvent être installés selon les besoins pour vous aider à améliorer la conception agile de votre application existante.

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez remplacer certains composants existants d'un formulaire par ceux fournis par MDC Web :

c33f9d1388feca74.png

Composants Web de MDC dans cet atelier de programmation

  • Bouton
  • Sélectionner
  • Champ de texte

Prérequis

  • Une version récente de Node.js (fournie avec npm, un gestionnaire de paquets JavaScript)
  • L'exemple de code (à télécharger à l'étape suivante)
  • Connaissances de base de HTML, CSS et JavaScript

Comment évalueriez-vous votre niveau d'expérience en développement Web ?

Débutant Intermédiaire Expert

2. Configurer l'environnement de développement

Télécharger l'application de départ de l'atelier de programmation

L'application de départ se trouve dans le répertoire material-components-web-codelabs-master/mdc-111/starter. Assurez-vous de cd dans ce répertoire avant de commencer.

… ou cloner l'atelier depuis GitHub

Pour cloner cet atelier de programmation à partir de GitHub, exécutez les commandes suivantes :

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

Installer les dépendances du projet

Dans le répertoire de démarrage (material-components-web-codelabs/mdc-111/starter), exécutez :

npm install

Vous verrez de nombreuses activités et, à la fin, votre terminal devrait indiquer une installation réussie:

bb3a822c020c9287.png

Exécuter l'application de départ

Dans le répertoire de démarrage, exécutez la commande suivante:

npm start

webpack-dev-server démarre. Accédez à l'URL http://localhost:8080/ dans votre navigateur pour afficher la page.

aa9263b15ae4f8d8.png

Opération réussie. Le formulaire d'adresse de livraison de l'application doit s'afficher:

8f60906e660b695e.png

3. Mettre à jour le bouton

Bouton "Installer MDC"

Appuyez sur Ctrl+C pour arrêter le serveur de développement. Installez ensuite le package NPM du bouton MDC et redémarrez le serveur :

npm install @material/button
npm start

Importer le CSS

En haut de _theme.scss, supprimez le bloc .crane-button { ... } et ajoutez ce qui suit à la place:

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

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

Mettre à jour le balisage

Dans index.html, supprimez la classe crane-button de l'élément <button>, ajoutez les classes mdc-button et mdc-button--raised, puis imbriquez le libellé dans un élément <span> avec la classe 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>

Ajouter l'ondulation

Les boutons MDC peuvent être utilisés sans JavaScript. Toutefois, ajouter une ondulation interactive au bouton crée une expérience utilisateur plus riche.

Appuyez sur Ctrl+C pour arrêter le serveur de développement. Exécutez ensuite la commande ci-dessous :

npm install @material/ripple
npm start

Ajoutez l'instruction d'importation suivante en haut de app.js:

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

Pour instancier l'ondulation sur le bouton, ajoutez ce qui suit en bas de app.js :

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

Importer une police Roboto

Par défaut, Material Design utilise Roboto pour les polices de caractères de composants.

Dans index.html, importez la police Web Roboto en ajoutant ce qui suit à l'élément <head> :

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

Actualisez la page pour obtenir le résultat suivant:

9be8eb813b02eada.gif

Le bouton affiche désormais un subtil effet d'ondulation sous forme de retour visuel lorsque vous appuyez dessus.

4. Modifier l'élément de sélection

Le composant MDC Select encapsule un élément <select> HTML natif. Utilisez-le partout où vous utiliseriez normalement un <select>. Mettons à jour le champ État.

Installer le module Node MDC

Appuyez sur Ctrl+C pour arrêter le serveur de développement. Exécutez ensuite la commande ci-dessous :

npm install @material/select
npm start

Importer le CSS

Ajoutez le code suivant à _theme.scss, juste après l'importation du bouton:

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

Modifier le balisage

Recherchez l'élément <select> dans index.html. Remplacez la classe crane-input par mdc-select__native-control :

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

Juste au-dessus de la balise <select>, ajoutez le balisage suivant pour la flèche du menu déroulant du composant MDC Select:

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

Juste en dessous de la balise </select> de fermeture, remplacez la classe crane-label par mdc-floating-label :

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

Ajoutez ensuite le balisage suivant juste après le libellé:

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

Enfin, ajoutez les balises suivantes autour de l'élément <select> (mais à l'intérieur de l'élément crane-field):

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

Le balisage obtenu doit se présenter comme suit :

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

Importer le code JS

Ajoutez l'instruction d'importation suivante en haut de app.js :

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

Pour instancier la sélection, ajoutez ce qui suit au bas de app.js :

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

Actualisez la page, qui doit maintenant se présenter comme suit:

20fa4104564f8195.gif

Le composant MDC Select présente à l'utilisateur une liste d'options dans un format familier, mais avec un style moderne.

5. Mettre à jour les champs de texte

Les champs de texte Material Design présentent un gain d'usabilité majeur par rapport aux éléments <input> bruts. Ils sont conçus pour être facilement identifiables dans un contenu complexe et afficher des retours visuels subtils lorsque l'utilisateur interagit avec eux.

Installer le module Node MDC

Appuyez sur Ctrl+C pour arrêter le serveur de développement. Exécutez ensuite la commande ci-dessous :

npm install @material/textfield
npm start

Ajouter le CSS

Ajoutez le code suivant à _theme.scss, juste après l'importation sélectionnée:

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

Mettre à jour le balisage

Dans index.html, recherchez l'élément <input> pour le champ "Name" (Nom). Remplacez la classe crane-input par mdc-text-field__input :

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

Ensuite, remplacez la classe crane-label par mdc-floating-label :

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

Ajoutez ensuite le balisage suivant immédiatement après le libellé :

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

Enfin, encapsulez les trois éléments avec ce qui suit :

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

Le balisage obtenu doit se présenter comme suit :

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

Répétez la même procédure pour tous les autres éléments <input> de la page.

Le balisage des champs Adresse, Ville et Code postal doit se présenter comme suit:

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

Vous pouvez désormais supprimer les styles .crane-label et .crane-input de _theme.scss, qui ne sont plus utilisés.

Importer le code JS

Ajoutez l'instruction d'importation suivante en haut de app.js :

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

Pour instancier les champs de texte, ajoutez le code suivant en bas de app.js:

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

Actualisez la page. Elle doit maintenant se présenter comme suit :

c33f9d1388feca74.png

Les champs de texte ont tous été mis à jour pour utiliser la thématisation Material.

6. Récapitulatif

Vous avez remplacé certains composants courants (champs de texte, sélecteur et bouton) sans avoir à repenser complètement votre application. Bravo !

D'autres composants peuvent également faire toute la différence, comme la barre d'application supérieure et le panneau de navigation.

Étapes suivantes

Pour découvrir encore plus de composants de MDC Web, consultez le catalogue MDC Web.

Si vous souhaitez utiliser MDC Web avec un framework particulier, consultez MDC-112 : Intégration de MDC aux frameworks Web.

La réalisation de cet atelier de programmation m'a demandé un temps et des efforts raisonnables

Tout à fait d'accord D'accord Ni d'accord, ni pas d'accord Pas d'accord Pas du tout d'accord

Je souhaite continuer à utiliser Material Components

Tout à fait d'accord D'accord Ni d'accord, ni pas d'accord Pas d'accord Pas du tout d'accord