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

logo_components_color_2x_web_96dp.png

Material Components (MDC) aiuta 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 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 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 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.

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 (Shrine)
  • Un'immagine del logo di Shrine

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

Scarica l'app codelab iniziale

Scaricare l'app 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.

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

In caso contrario, esegui npm audit fix.

Eseguire l'app iniziale

Nella stessa directory, esegui:

npm start

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

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.

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

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.

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

Aggiungere il codice HTML

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

<div class="mdc-text-field username">
  <input type="text" class="mdc-text-field__input" id="username-input" name="username">
  <label class="mdc-floating-label" for="username-input">Username</label>
  <div class="mdc-line-ripple"></div>
</div>
<div class="mdc-text-field password">
  <input type="password" class="mdc-text-field__input" id="password-input" name="password">
  <label class="mdc-floating-label" for="password-input">Password</label>
  <div class="mdc-line-ripple"></div>
</div>

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

  • L'elemento principale, mdc-text-field
  • Elementi secondari mdc-text-field__input, mdc-floating-label e mdc-line-ripple

Aggiungere il CSS

In login.scss, aggiungi la seguente istruzione di importazione dopo quella 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: block;
  width: 300px;
  margin: 20px auto;
}

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 <div class="mdc-text-field"> in modo che abbiano questo aspetto:

<div class="mdc-text-field username">
  <input type="text" class="mdc-text-field__input" id="username-input" name="username" required>
  <label class="mdc-floating-label" for="username-input">Username</label>
  <div class="mdc-line-ripple"></div>
</div>
<div class="mdc-text-field password">
  <input type="password" class="mdc-text-field__input" id="password-input" name="password" required minlength="8">
  <label class="mdc-floating-label" for="password-input">Password</label>
  <div class="mdc-line-ripple"></div>
</div>

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

A questo punto, aggiungiamo 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 increspatura dell'inchiostro di Material Design.

Installa pulsante MDC

Per installare il pacchetto per il componente pulsante, esegui:

npm install @material/button

Aggiungere il codice HTML

In index.html, aggiungi quanto segue sotto il tag di chiusura dell'elemento <div class="mdc-text-field 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

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.

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.

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 il resto dei componenti in MDC Web.

Consulta la pagina MDC-102: Material Design Structure and Layout per scoprire di più sul menu di navigazione e sull'elenco di immagini. Grazie per aver provato Material Components. 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