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. Creato da un team di ingegneri e progettisti UX di Google, MDC include decine di componenti UI belli e funzionali ed è disponibile 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 creare prodotti digitali audaci e belli. 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 web mobile e il computer, Material Components Web (MDC Web) unisce progettazione e ingegneria con una libreria di componenti per creare coerenza tra app e siti web. I componenti MDC Web risiedono ciascuno nei propri moduli dei nodi, quindi, man mano che il sistema Material Design si evolve, questi componenti possono essere facilmente aggiornati per garantire un'implementazione coerente e perfetta al 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.

Cosa creerai

Questo codelab è il primo di tre che ti guideranno nella creazione di un'app chiamata Shrine, un sito web di e-commerce che vende abbigliamento e articoli per la casa. Verrà illustrato 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 (Santuario)
  • Un'immagine del logo di Shrine

674d1ca8cfa98c9.png

Componenti web MDC in questo codelab

  • Campo di testo
  • Pulsante
  • Onde

Che cosa ti serve

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

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

Principiante Intermedio 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-101/starter. Assicurati di cd in questa directory prima di iniziare.

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

Installa le dipendenze del progetto

Dalla directory iniziale, 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 iniziale

Nella stessa directory, esegui:

npm start

webpack-dev-server inizierà. Punta il browser su http://localhost:8080/ per visualizzare la pagina.

17c139dc5a9bebaf.png

Operazione riuscita. Il codice iniziale 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 iniziale, apri index.html con il tuo editor di codice preferito. Deve contenere:

<!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 viene utilizzato un tag <link> 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 web MDC sono stilizzati utilizzando 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 riportato 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 iniziale, implementiamo il nostro primo componente.

3. Aggiungere 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 propria password. Utilizzeremo il componente Campo di testo MDC, che include funzionalità integrate che mostrano un'etichetta mobile e attivano un'increspatura al tocco.

9ad8a7db0b50f07d.png

Installa il campo di testo MDC

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

npm install @material/textfield@^6.0.0

Aggiungere 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
  • Sottoelementi mdc-text-field__ripple, mdc-text-field__input, mdc-floating-label e mdc-line-ripple

Aggiungere il 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;
}

Aggiungere 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'));

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

  • Aggiungi l'attributo required agli elementi mdc-text-field__input dei campi di testo Nome utente e Password
  • Imposta 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 abbiano questo aspetto:

<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/. A questo punto dovresti visualizzare 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'increspatura della linea (il bordo inferiore che si increspa verso l'esterno):

c0b341e9949a6183.gif

4. Aggiungere pulsanti

A questo punto, aggiungeremo due pulsanti alla nostra pagina di accesso: "Annulla" e "Avanti". Utilizzeremo il componente Pulsante MDC, insieme al componente Ripple MDC, per completare l'iconico effetto ripple di inchiostro di Material Design.

674d1ca8cfa98c9.png

Installare il pulsante MDC

Per installare il pacchetto per il componente pulsante, esegui:

npm install @material/button@^6.0.0

Aggiungere 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 predefinito. Tuttavia, il pulsante "Avanti" utilizza una variante di stile in rilievo, indicata dalla classe mdc-button--raised.

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

Aggiungere il 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, aggiungi i seguenti stili a login.scss:

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

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

Aggiungere un effetto increspatura ai pulsanti

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

Per installare il pacchetto per il componente ripple, 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 le increspature, aggiungi quanto segue a login.js:

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

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

È tutto. Aggiorna la pagina. Quando fai clic su ogni pulsante, viene visualizzata un'increspatura 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 poche righe di CSS e JavaScript, la libreria Material Components for the web ti ha aiutato a creare una splendida pagina di accesso conforme alle linee guida di Material Design e con un aspetto e un comportamento coerenti su tutti i dispositivi.

Passaggi successivi

Campo di testo, Pulsante e Ripple sono tre componenti principali della libreria MDC Web, ma ce ne sono molti altri. Puoi anche esplorare gli altri componenti di MDC Web.

Per scoprire di più sul menu di navigazione e sull'elenco di immagini, consulta la pagina MDC-102: Material Design Structure and Layout. Grazie per aver provato i componenti Material. Ci auguriamo che questo codelab ti sia piaciuto.

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

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

Vorrei continuare a utilizzare i componenti Material in futuro

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