MDC-101 Web: nozioni di base su Material Components (MDC) (Web)

1. Introduzione

logo_components_color_2x_web_96dp.png

I componenti Material (MDC) aiutano gli sviluppatori a implementare Material Design. Creati da un team di ingegneri e progettisti UX di Google, i componenti MDC includono decine di componenti UI belli e funzionali e sono disponibili per Android, iOS, web e Flutter.material.io/develop

Che cosa sono Material Design e i componenti Material per il web?

Material Design è un sistema per la creazione di prodotti digitali audaci e accattivanti. Unendo stile, branding, interazione e movimento in un insieme coerente di principi e componenti, i team di prodotto possono realizzare il loro massimo potenziale di progettazione.

Per il desktop e il web mobile, Material Components Web (MDC Web) unisce progettazione e ingegneria con una libreria di componenti per creare coerenza tra app e siti web. Ogni componente MDC Web risiede nei propri moduli Node, quindi, man mano che il sistema Material Design si evolve, questi componenti possono essere aggiornati facilmente per garantire un'implementazione coerente e perfetta a livello di pixel e il rispetto degli standard di sviluppo front-end di Google. MDC è disponibile anche per Android, iOS e Flutter.

In questo codelab creerai una pagina di accesso utilizzando diversi componenti di MDC Web.

Che cosa creerai

Questo codelab è il primo di tre codelab che ti guideranno nella creazione di un'app chiamata Shrine, un sito web di e-commerce che vende abbigliamento e articoli per la casa. Ti mostrerà come personalizzare i componenti per riflettere qualsiasi brand o stile utilizzando MDC Web.

In questo codelab creerai una pagina di accesso per Shrine che contiene:

  • Due campi di testo, uno per inserire un nome utente e l'altro per una password
  • Due pulsanti, uno per "Annulla" e uno per "Avanti"
  • Il nome del sito web (Shrine)
  • Un'immagine del logo di Shrine

674d1ca8cfa98c9.png

Componenti MDC Web in questo codelab

  • Campo di testo
  • Pulsante
  • Onde

Che cosa ti serve

  • Una versione recente di Node.js (che viene fornita in bundle con npm, un gestore di pacchetti JavaScript).
  • Il codice campione (da scaricare nel passaggio successivo)
  • Conoscenze di base di HTML, CSS e JavaScript

Cerchiamo sempre di migliorare i nostri tutorial. Come valuteresti il tuo livello di esperienza con lo sviluppo web?

Principiante Intermedio Esperto

2. Configurazione dell'ambiente di sviluppo

Scarica l'app di avvio del codelab

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

...o clonala 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-101/starter

Installa le dipendenze del progetto

Dalla directory di avvio, esegui:

npm install

Vedrai molte attività e, alla fine, il terminale dovrebbe mostrare un'installazione riuscita:

204c063d8fd78f94.png

In caso contrario, esegui npm audit fix.

Esegui l'app di base

Nella stessa directory, esegui:

npm start

Verrà avviato webpack-dev-server. Vai all'indirizzo http://localhost:8080/ nel browser per visualizzare la pagina.

17c139dc5a9bebaf.png

Operazione riuscita. Il codice di avvio per la pagina di accesso di Shrine dovrebbe essere in esecuzione nel browser. Dovresti vedere il nome "Shrine" e il logo di Shrine appena sotto.

f7e3f354df8d84b8.png

Dai un'occhiata al codice

Metadati in index.html

Nella directory di avvio, apri index.html con il tuo editor di codice preferito. Dovrebbe contenere quanto segue:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <title>Shrine (MDC Web Example App)</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" sizes="192x192" href="https://material.io/static/images/simple-lp/favicons/components-192x192.png">
  <link rel="shortcut icon" href="https://material.io/static/images/simple-lp/favicons/components-72x72.png">

  <link rel="stylesheet"
        href="https://cdnjs.cloudflare.com/ajax/libs/normalize/6.0.0/normalize.min.css">
  <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet">
  <link rel="stylesheet" href="bundle-login.css">
</head>
<body class="shrine-login">
  <section class="header">
    <svg class="shrine-logo" ...>
      ...
    </svg>
    <h1>SHRINE</h1>
  </section>

  <form action="home.html">
  </form>

  <script src="bundle-login.js" async></script>
</body>
</html>

Qui, un tag <link> viene utilizzato per caricare il file bundle-login.css generato da webpack e un tag <script> include il file bundle-login.js. Inoltre, includiamo normalize.css per un rendering coerente tra i browser, nonché il carattere Roboto di Google Fonts.

Stili personalizzati in login.scss

I componenti MDC Web vengono stilizzati utilizzando le classi CSS mdc-*, ad esempio la classe mdc-text-field. (MDC Web considera la sua struttura DOM come parte della sua API pubblica.)

In generale, ti consigliamo di apportare modifiche allo stile personalizzato dei componenti utilizzando le tue classi. Potresti aver notato alcune classi CSS personalizzate nel codice HTML sopra, ad esempio shrine-logo. Questi stili sono definiti in login.scss per aggiungere stili di base alla pagina.

Apri login.scss e vedrai i seguenti stili per la pagina di accesso:

@import "./common";

.header {
  text-align: center;
}

.shrine-logo {
  width: 150px;
  height: 150px;
  padding-top: 80px;
  fill: currentColor;
}

Ora che hai familiarità con il codice di avvio, implementiamo il nostro primo componente.

3. Aggiungi campi di testo

Per iniziare, aggiungeremo due campi di testo alla nostra pagina di accesso, in cui gli utenti potranno inserire il proprio nome utente e la password. Utilizzeremo il componente Campo di testo MDC, che include funzionalità integrate che visualizzano un'etichetta mobile e attivano un'onda al tocco.

9ad8a7db0b50f07d.png

Installa il campo di testo MDC

I componenti MDC Web vengono pubblicati tramite pacchetti NPM. Per installare il pacchetto per il componente del campo di testo, esegui:

npm install @material/textfield@^6.0.0

Aggiungi il codice HTML

In index.html, aggiungi quanto segue all'interno dell'elemento <form> nel corpo:

<label class="mdc-text-field mdc-text-field--filled username">
  <span class="mdc-text-field__ripple"></span>
  <input type="text" class="mdc-text-field__input" aria-labelledby="username-label" name="username">
  <span class="mdc-floating-label" id="username-label">Username</span>
  <span class="mdc-line-ripple"></span>
</label>
<label class="mdc-text-field mdc-text-field--filled password">
  <span class="mdc-text-field__ripple"></span>
  <input type="password" class="mdc-text-field__input" aria-labelledby="password-label" name="password">
  <span class="mdc-floating-label" id="password-label">Password</span>
  <span class="mdc-line-ripple"></span>
</label>

La struttura DOM del campo di testo MDC è composta da diverse parti:

  • L'elemento principale, mdc-text-field
  • I sottoelementi mdc-text-field__ripple, mdc-text-field__input, mdc-floating-label e mdc-line-ripple

Aggiungi il codice CSS

In login.scss, aggiungi la seguente istruzione di importazione dopo l'importazione esistente:

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

Nello stesso file, aggiungi i seguenti stili per allineare e centrare i campi di testo:

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

Aggiungi il codice JavaScript

Apri login.js, che al momento è vuoto. Aggiungi il seguente codice per importare e creare un'istanza dei campi di testo:

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

const username = new MDCTextField(document.querySelector('.username'));
const password = new MDCTextField(document.querySelector('.password'));

Aggiungi la convalida HTML5

I campi di testo indicano se l'input del campo è valido o contiene un errore, utilizzando gli attributi forniti dall'API di convalida dei moduli di HTML5.

Al termine del corso dovreste essere in grado di:

  • Aggiungere l'attributo required agli elementi mdc-text-field__input dei campi di testo Nome utente e Password
  • Impostare l'attributo minlength dell'elemento mdc-text-field__input del campo di testo Password su "8"

Modifica i due elementi <label class="mdc-text-field mdc-text-field--filled"> in modo che siano simili a questi:

<label class="mdc-text-field mdc-text-field--filled username">
  <span class="mdc-text-field__ripple"></span>
  <input type="text" class="mdc-text-field__input" aria-labelledby="username-label" name="username" required>
  <span class="mdc-floating-label" id="username-label">Username</span>
  <span class="mdc-line-ripple"></span>
</label>
<label class="mdc-text-field mdc-text-field--filled password">
  <span class="mdc-text-field__ripple"></span>
  <input type="password" class="mdc-text-field__input" aria-labelledby="password-label" name="password" required minlength="8">
  <span class="mdc-floating-label" id="password-label">Password</span>
  <span class="mdc-line-ripple"></span>
</label>

Aggiorna la pagina all'indirizzo http://localhost:8080/. Ora dovresti vedere una pagina con due campi di testo per Nome utente e Password.

Fai clic sui campi di testo per visualizzare l'animazione dell'etichetta mobile e l'animazione dell'onda della linea (la linea del bordo inferiore che si propaga verso l'esterno):

c0b341e9949a6183.gif

4. Aggiungi pulsanti

Successivamente, aggiungeremo due pulsanti alla nostra pagina di accesso: "Annulla" e "Avanti". Utilizzeremo il componente Pulsante MDC, insieme al componente Onda MDC, per completare l'iconico effetto di onda di inchiostro di Material Design.

674d1ca8cfa98c9.png

Installa il pulsante MDC

Per installare il pacchetto per il componente del pulsante, esegui:

npm install @material/button@^6.0.0

Aggiungi il codice HTML

In index.html, aggiungi quanto segue sotto il tag di chiusura dell'elemento <label class="mdc-text-field mdc-text-field--filled password">:

<div class="button-container">
  <button type="button" class="mdc-button cancel">
    <div class="mdc-button__ripple"></div>
    <span class="mdc-button__label">
      Cancel
    </span>
  </button>
  <button class="mdc-button mdc-button--raised next">
    <div class="mdc-button__ripple"></div>
    <span class="mdc-button__label">
      Next
    </span>
  </button>
</div>

Per il pulsante "Annulla", utilizziamo lo stile del pulsante predefinito. Tuttavia, il pulsante "Avanti" utilizza una variante di stile rialzata, indicata dalla classe mdc-button--raised.

Per allinearli facilmente in un secondo momento, racchiudiamo i due elementi mdc-button in un elemento <div>.

Aggiungi il codice CSS

In login.scss, aggiungi la seguente istruzione di importazione dopo le importazioni esistenti:

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

Per allineare i pulsanti e aggiungere un margine intorno a essi, aggiungi i seguenti stili a login.scss:

.button-container {
  display: flex;
  justify-content: flex-end;
  width: 300px;
  margin: auto;
}

.button-container button {
  margin: 3px;
}

Aggiungi un'onda di inchiostro ai pulsanti

Quando l'utente tocca o fa clic su un pulsante, deve visualizzare un feedback sotto forma di onda di inchiostro. Il componente dell'onda di inchiostro richiede JavaScript, quindi lo aggiungeremo alla pagina.

Per installare il pacchetto per il componente dell'onda, esegui:

npm install @material/ripple@^6.0.0

Nella parte superiore di login.js, aggiungi la seguente istruzione di importazione:

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

Per creare un'istanza delle onde, aggiungi quanto segue a login.js:

new MDCRipple(document.querySelector('.cancel'));
new MDCRipple(document.querySelector('.next'));

Poiché non è necessario conservare un riferimento all'istanza dell'onda, non è necessario assegnarla a una variabile.

È tutto. Aggiorna la pagina. Quando fai clic su ogni pulsante, viene visualizzata un'onda di inchiostro.

bb19b0a567977bde.gif

Compila i campi di testo con valori validi e premi il pulsante "AVANTI". Ce l'hai fatta. Continuerai a lavorare su questa pagina in MDC-102.

5. Riepilogo

Utilizzando il markup HTML di base e solo poche righe di CSS e JavaScript, la libreria dei componenti Material per il web ti ha aiutato a creare una pagina di accesso accattivante conforme alle linee guida di Material Design, con un aspetto e un comportamento coerenti su tutti i dispositivi.

Passaggi successivi

Campo di testo, Pulsante e Onda sono tre componenti principali della libreria MDC Web, ma ce ne sono molti altri. Puoi anche esplorare il resto dei componenti in MDC Web.

Puoi passare a MDC-102: struttura e layout di Material Design per scoprire di più sul riquadro di navigazione a scomparsa e sull'elenco di immagini. Grazie per aver provato i componenti Material. Speriamo che questo codelab ti sia piaciuto.

Sono riuscito a completare questo codelab con un ragionevole dispendio di tempo e impegno

Molto d'accordo D'accordo Neutro Non d'accordo Molto in disaccordo

Mi piacerebbe continuare a utilizzare i componenti Material in futuro

Molto d'accordo D'accordo Neutro Non d'accordo Molto in disaccordo