MDC-101 Web: Conceptos básicos sobre componentes de Material (MDC) (Web)

1. Introducción

logo_components_color_2x_web_96dp.png

Los componentes de Material (MDC) ayudan a los desarrolladores a implementar Material Design. MDC, creado por un equipo de ingenieros y diseñadores de UX en Google, cuenta con decenas de componentes de IU atractivos y funcionales, y está disponible para Android, iOS, la Web y Flutter.material.io/develop.

¿Qué son Material Design y los componentes de Material para la Web?

Material Design es un sistema para crear productos digitales atractivos y llamativos. Mediante la unión de estilo, desarrollo de la marca, interacción y movimiento en un conjunto coherente de principios y componentes, los equipos de productos pueden alcanzar su máximo potencial de diseño.

Para computadoras y la Web móvil, Material Components Web (MDC Web) combina el diseño y la ingeniería con una biblioteca de componentes para crear coherencia entre apps y sitios web. Cada uno de los componentes web de MDC se encuentra en sus propios módulos de nodo, por lo que, a medida que evoluciona el sistema de Material Design, estos componentes se pueden actualizar fácilmente para garantizar una implementación coherente de píxeles perfectos y el cumplimiento de los estándares de desarrollo de frontend de Google. MDC también está disponible para Android, iOS y Flutter.

En este codelab, crearás una página de acceso con varios de los componentes web de MDC.

Qué compilarás

Este codelab es el primero de tres que te guiarán para que compiles una app llamada Shrine, un sitio web de comercio electrónico en el que se vende ropa y artículos para el hogar. Demostrará cómo puedes personalizar los componentes para que reflejen cualquier marca o estilo con MDC Web.

En este codelab, crearás una página de acceso para Shrine que contiene lo siguiente:

  • Dos campos de texto: uno para ingresar un nombre de usuario y el otro para la contraseña
  • Dos botones, uno para "Cancelar" y una para "Siguiente"
  • El nombre del sitio web (Shrine)
  • Una imagen del logotipo de Shrine

674d1ca8cfa98c9.png

Componentes web de MDC en este codelab

  • Campo de texto
  • Botón
  • Onda

Requisitos

  • Una versión reciente de Node.js (que incluye npm, un administrador de paquetes de JavaScript).
  • El código de muestra (que se descargará en el siguiente paso)
  • Conocimientos básicos de HTML, CSS y JavaScript

Trabajamos constantemente para mejorar nuestros instructivos. ¿Cómo calificarías tu nivel de experiencia con el desarrollo web?

Principiante Intermedio Avanzado .
.

2. Configura tu entorno de desarrollo

Descarga la app de inicio del codelab

La app de partida se encuentra en el directorio material-components-web-codelabs-master/mdc-101/starter. Asegúrate de cd en ese directorio antes de comenzar.

… o clónalo desde GitHub

Para clonar este codelab desde GitHub, ejecuta los siguientes comandos:

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

Instala dependencias del proyecto

Desde el directorio de inicio, ejecuta lo siguiente:

npm install

Verás mucha actividad y, al final, tu terminal debería mostrar una instalación exitosa:

204c063d8fd78f94.png

De lo contrario, ejecuta npm audit fix.

Cómo ejecutar la app de inicio

En el mismo directorio, ejecuta lo siguiente:

npm start

Se iniciará la webpack-dev-server. Dirige tu navegador a http://localhost:8080/ para ver la página.

17c139dc5a9bebaf.png

¡Listo! El código de partida para la página de acceso de Shrine debería estar ejecutándose en tu navegador. Deberías ver el nombre “Shrine”. y el logotipo de Shrine debajo.

f7e3f354df8d84b8.png

Consulta el código

Metadatos en index.html

En el directorio de inicio, abre index.html con tu editor de código favorito. Debe contener lo siguiente:

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

Aquí, se usa una etiqueta <link> para cargar el archivo bundle-login.css que generó Webpack, y una etiqueta <script> incluye el archivo bundle-login.js. Además, incluimos normalize.css para lograr una renderización coherente en varios navegadores, así como la fuente Roboto de Google Fonts.

Estilos personalizados en login.scss

A los componentes web de MDC se les aplica el estilo mediante las clases de CSS mdc-*, como la clase mdc-text-field. (MDC Web trata su estructura de DOM como parte de su API pública).

En general, se recomienda que realices modificaciones de diseño personalizado en los componentes con tus propias clases. Es posible que hayas notado algunas clases de CSS personalizadas en el código HTML anterior, como shrine-logo. Estos estilos se definen en login.scss para agregar estilos básicos a la página.

Abre login.scss y verás los siguientes estilos para la página de acceso:

@import "./common";

.header {
  text-align: center;
}

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

Ahora que te familiarizaste con el código de partida, implementemos nuestro primer componente.

3. Agrega campos de texto

Para empezar, agregaremos dos campos de texto a nuestra página de acceso, donde las personas podrán ingresar su nombre de usuario y contraseña. Usaremos el componente de campo de texto de MDC, que incluye funcionalidad incorporada que muestra una etiqueta flotante y activa una onda táctil.

9ad8a7db0b50f07d.png

Instala el campo de texto de MDC.

Los componentes web de MDC se publican a través de paquetes de NPM. Para instalar el paquete del componente de campo de texto, ejecuta lo siguiente:

npm install @material/textfield@^6.0.0

Agrega el HTML

En index.html, agrega lo siguiente dentro del elemento <form> en el cuerpo:

<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 estructura del DOM del campo de texto de MDC se compone de varias partes:

  • El elemento principal, mdc-text-field
  • Subelementos mdc-text-field__ripple, mdc-text-field__input, mdc-floating-label y mdc-line-ripple

Agrega el CSS

En login.scss, agrega la siguiente sentencia de importación después de la importación existente:

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

En el mismo archivo, agrega los siguientes estilos para alinear y centrar los campos de texto:

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

Agrega JavaScript

Abre login.js, que está vacío en este momento. Agrega el siguiente código para importar los campos de texto y crear una instancia de ellos:

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

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

Agregar validación de HTML5

Los campos de texto expresan si la entrada de campo es válida o contiene un error, mediante el uso de atributos proporcionados por la API de validación de formularios de HTML5.

Podrás:

  • Agrega el atributo required a los elementos mdc-text-field__input de los campos de texto Nombre de usuario y Contraseña.
  • Establece el atributo minlength del elemento mdc-text-field__input del campo de texto Contraseña en "8".

Ajusta los dos elementos <label class="mdc-text-field mdc-text-field--filled"> para que se vean de la siguiente manera:

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

Actualiza la página en http://localhost:8080/. Ahora debería ver una página con dos campos de texto para el nombre de usuario y la contraseña.

Haz clic en los campos de texto para ver la animación de la etiqueta flotante y la animación de ondas de la línea (la línea del borde inferior que se onda hacia afuera):

c0b341e9949a6183.gif

4. Cómo agregar botones

A continuación, agregaremos dos botones a nuestra página de acceso: "Cancel" y "Next". Usaremos el componente Botón de MDC, junto con el componente Onda de MDC, para completar el emblemático efecto de ondas de tinta de Material Design.

674d1ca8cfa98c9.png

Botón para instalar MDC

Para instalar el paquete del componente del botón, ejecuta lo siguiente:

npm install @material/button@^6.0.0

Agrega el HTML

En index.html, agrega lo siguiente debajo de la etiqueta de cierre del 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>

Para la opción "Cancelar" usamos el estilo de botón predeterminado. Sin embargo, la pestaña "Siguiente" usa una variante de estilo elevada, que indica la clase mdc-button--raised.

Para alinearlos fácilmente más tarde, unimos los dos elementos mdc-button en un elemento <div>.

Agrega el CSS

En login.scss, agrega la siguiente sentencia de importación después de las importaciones existentes:

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

Para alinear los botones y agregar un margen a su alrededor, agrega los siguientes estilos a login.scss:

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

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

Agrega una onda de tinta a los botones

Cuando el usuario toca o hace clic en un botón, debe mostrar una respuesta en forma de ondas de tinta. El componente de ondas de tinta requiere JavaScript, así que lo agregaremos a la página.

Para instalar el paquete del componente de ondas, ejecuta el siguiente comando:

npm install @material/ripple@^6.0.0

En la parte superior de login.js, agrega la siguiente sentencia de importación:

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

Para crear una instancia de los ondas, agrega lo siguiente a login.js:

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

Como no necesitamos retener una referencia a la instancia de ripple, no es necesario asignarla a una variable.

Eso es todo. Actualiza la página. Se mostrará un efecto de tinta cuando hagas clic en cada botón.

bb19b0a567977bde.gif

Completa los campos de texto con valores válidos y presiona "NEXT" . ¡Lo lograste! Seguirás trabajando en esta página en MDC-102.

5. Resumen

Con lenguaje de marcado HTML básico y solo algunas líneas de CSS y JavaScript, los componentes de Material para la biblioteca web te ayudaron a crear una atractiva página de acceso que cumple con los lineamientos de Material Design y tiene un aspecto y comportamiento coherentes en todos los dispositivos.

Próximos pasos

Campo de texto, Botón y Ripple son tres componentes principales de la biblioteca web de MDC, pero hay muchos más. También puedes explorar el resto de los componentes en MDC Web.

Puedes ir a MDC-102: Estructura y diseño de Material Design para obtener información sobre el panel lateral de navegación y la lista de imágenes. Gracias por probar los componentes de Material. Esperamos que hayas disfrutado de este codelab.

Pude completar este codelab en una cantidad de tiempo y con un nivel de esfuerzo razonables

Totalmente de acuerdo De acuerdo Neutral En desacuerdo Totalmente en desacuerdo

Me gustaría seguir usando los componentes de Material en el futuro.

Muy de acuerdo De acuerdo Ni feliz ni triste En desacuerdo Muy en desacuerdo .
.