MDC-111 Web: integrazione di componenti materiali nel codebase (web)

1. Introduzione

logo_components_color_2x_web_96dp.png

Material Components (MDC) aiutano gli sviluppatori a implementare Material Design. Creato dal team di ingegneri e designer UX di Google, MDC è dotato di decine di componenti UI belli e funzionali ed è disponibile per Android, iOS, web e Flutter.material.io/develop

Material Components per il web (MDC Web) è indipendente dal framework e viene creato utilizzando codice JavaScript standard. In questo modo MDC Web interagisce perfettamente con il tuo processo di sviluppo. Questi componenti possono essere installati in base alle esigenze per apportare miglioramenti agili al design della tua app esistente.

Cosa creerai

In questo codelab, sostituirai alcuni componenti esistenti in un modulo con quelli forniti da MDC Web:

c33f9d1388feca74.png

Componenti web MDC in questo codelab

  • Pulsante
  • Seleziona
  • Campo di testo

Che cosa ti serve

  • Una versione recente di Node.js (integrata in npm, un gestore di pacchetti JavaScript).
  • Il codice di esempio (da scaricare nel passaggio successivo)
  • Conoscenza di base di HTML, CSS e JavaScript

Come valuteresti il tuo livello di esperienza nello sviluppo web?

Principiante Livello intermedio Livello avanzato

2. Configurazione dell'ambiente di sviluppo

Scarica l'app codelab iniziale

L'app iniziale si trova nella directory material-components-web-codelabs-master/mdc-111/starter. Assicurati di cd in questa directory prima di iniziare.

…oppure clonalo da GitHub

Per clonare questo codelab da GitHub, esegui i seguenti comandi:

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

Installare le dipendenze del progetto

Dalla directory iniziale (material-components-web-codelabs/mdc-111/starter), esegui:

npm install

Vedrai molta attività e, alla fine, il tuo terminale dovrebbe mostrare un'installazione eseguita correttamente:

bb3a822c020c9287.png

Esegui l'app iniziale

Nella directory iniziale, esegui:

npm start

Inizierà webpack-dev-server. Apri il browser all'indirizzo http://localhost:8080/ per visualizzare la pagina.

aa9263b15ae4f8d8.png

Operazione riuscita. Dovresti vedere il modulo dell'indirizzo di spedizione dell'app:

8f60906e660b695e.png

3. Aggiorna il pulsante

Pulsante Installa MDC

Premi Ctrl+C per terminare il server di sviluppo. Poi, installa il pacchetto NPM del pulsante MDC e riavvia il server:

npm install @material/button
npm start

Importare il CSS

Nella parte superiore di _theme.scss, elimina il blocco .crane-button { ... } e aggiungi quanto segue al suo posto:

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

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

Aggiornare il markup

In index.html, rimuovi la classe crane-button dall'elemento <button>, aggiungi le classi mdc-button e mdc-button--raised e nidifica l'etichetta all'interno di un elemento <span> con 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>

Aggiungi l'eco

I pulsanti MDC possono essere utilizzati senza JavaScript. Tuttavia, l'aggiunta di un'eco interattiva al pulsante crea un'esperienza utente più completa.

Premi Ctrl+C per terminare il server di sviluppo. Dopodiché, esegui:

npm install @material/ripple
npm start

Aggiungi la seguente istruzione di importazione all'inizio di app.js:

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

Per creare un'istanza dell'effetto ripple sul pulsante, aggiungi quanto segue alla parte inferiore di app.js:

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

Importare il carattere Roboto

Per impostazione predefinita, Material Design utilizza Roboto per i caratteri tipografici dei componenti.

In index.html, importa il carattere web Roboto aggiungendo quanto segue all'elemento <head>:

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

Ricarica la pagina. Il risultato dovrebbe essere simile al seguente:

9be8eb813b02eada.gif

Il pulsante ora mostra un sottile effetto a onde sotto forma di feedback visivo quando viene premuto.

4. Aggiorna l'elemento di selezione

Il componente MDC Select aggrega un elemento HTML <select> nativo. Usalo ovunque useresti normalmente un <select>. Aggiorniamo il campo "Stato".

Installa il modulo del nodo MDC

Premi Ctrl+C per arrestare il server di sviluppo. Dopodiché, esegui:

npm install @material/select
npm start

Importa il CSS

Aggiungi quanto segue a _theme.scss, subito dopo l'importazione del pulsante:

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

Aggiornare il markup

Individua l'elemento <select> in index.html. Sostituisci la classe crane-input con mdc-select__native-control:

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

Proprio sopra il tag <select>, aggiungi il seguente markup per la freccia del menu a discesa del componente MDC Select:

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

Appena sotto il tag di chiusura </select>, sostituisci la classe crane-label con mdc-floating-label:

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

Aggiungi poi il seguente markup subito dopo l'etichetta:

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

Infine, aggiungi i seguenti tag intorno all'elemento <select> (ma all'interno dell'elemento crane-field):

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

Il markup risultante dovrebbe avere il seguente aspetto:

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

Importa il file JS

Aggiungi la seguente istruzione di importazione all'inizio di app.js:

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

Per creare un'istanza del selettore, aggiungi quanto segue alla fine di app.js:

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

Ricarica la pagina, che ora dovrebbe avere il seguente aspetto:

20fa4104564f8195.gif

Il componente MDC Select presenta un elenco di opzioni per l'utente in un formato familiare, ma con uno stile moderno.

5. Aggiorna i campi di testo

I campi di testo Material Design presentano notevoli vantaggi in termini di usabilità rispetto ai semplici elementi <input>. Sono progettati per essere facilmente identificabili all'interno di contenuti complessi e mostrano un feedback visivo sottile quando l'utente interagisce con loro.

Installa il modulo MDC Node

Premi Ctrl+C per arrestare il server di sviluppo. Dopodiché, esegui:

npm install @material/textfield
npm start

Aggiungi il CSS

Aggiungi quanto segue a _theme.scss, subito dopo l'importazione selezionata:

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

Aggiornare il markup

In index.html, individua l'elemento <input> per il campo "Nome". Sostituisci la classe crane-input con mdc-text-field__input:

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

Poi, sostituisci la classe crane-label con mdc-floating-label:

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

Quindi aggiungi il seguente markup subito dopo l'etichetta:

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

Infine, aggrega tutti e tre gli elementi con quanto segue:

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

Il markup risultante dovrebbe avere il seguente aspetto:

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

Ripeti la stessa procedura per tutti gli altri elementi <input> della pagina.

Il markup per i campi "Indirizzo", "Città" e "Codice postale" dovrebbe avere il seguente aspetto:

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

Ora puoi rimuovere gli stili .crane-label e .crane-input da _theme.scss, poiché non sono più utilizzati.

Importa il codice JS

Aggiungi la seguente istruzione di importazione all'inizio di app.js:

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

Per creare un'istanza per i campi di testo, aggiungi quanto segue in fondo a app.js:

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

Ricarica la pagina, che ora dovrebbe avere il seguente aspetto:

c33f9d1388feca74.png

Tutti i campi di testo sono stati aggiornati per utilizzare i temi Material.

6. Riepilogo

Hai sostituito alcuni componenti comuni (campi di testo, selezione e pulsanti) senza eseguire un nuovo design completo dell'app. Ottimo lavoro.

Anche altri componenti che possono fare una grande differenza includono la barra superiore delle app e il riquadro di navigazione a scomparsa.

Passaggi successivi

Puoi esaminare altri componenti di MDC Web visitando il catalogo web di MDC.

Se vuoi utilizzare MDC Web con un framework specifico, vai a MDC-112: Integrating MDC with Web Frameworks.

Ho potuto completare questo codelab con un impegno e un tempo ragionevoli

Totalmente d'accordo D'accordo Neutrale In disaccordo Totalmente in disaccordo

Vorrei continuare a utilizzare Material Components in futuro

Molto d'accordo D'accordo Né d'accordo né in disaccordo In disaccordo Totalmente in disaccordo