MDC-111 Web: włączanie komponentów Material Design w bazie kodu (sieć)

1. Wprowadzenie

logo_components_color_2x_web_96dp.png

Komponenty Material Design (MDC) pomagają deweloperom wdrażać Material Design. MDC to biblioteka stworzona przez zespół inżynierów i projektantów UX w Google. Zawiera dziesiątki pięknych i funkcjonalnych komponentów UI. Jest dostępna na Androida, iOS, web i Flutter.material.io/develop

Komponenty Material Design na potrzeby internetu (MDC Web) są niezależne od platformy i stworzone przy użyciu zwykłego kodu JavaScript. Dzięki temu MDC Web będzie płynnie współpracować z Twoim procesem tworzenia aplikacji. W razie potrzeby możesz zainstalować te komponenty, aby ułatwić elastyczny projekt aplikacji.

Co utworzysz

W ramach tego ćwiczenia w Codelabs zastąpisz niektóre istniejące komponenty w formularzu tymi dostarczonymi przez MDC Web:

c33f9d1388feca74.png

Komponenty MDC Web w tym kursie programowania

  • Przycisk
  • Wybierz
  • Pole tekstowe

Czego potrzebujesz

  • najnowsza wersja Node.js (dołączona do npm, menedżera pakietów JavaScript);
  • Przykładowy kod (do pobrania w następnym kroku)
  • podstawowa znajomość języków HTML, CSS i JavaScript;

Jak oceniasz swój poziom doświadczenia w tworzeniu stron internetowych?

Początkujący Poziom średnio zaawansowany Biegły
.

2. Konfigurowanie środowiska programistycznego

Pobierz aplikację Codelab dla początkujących

Aplikacja startowa znajduje się w katalogu material-components-web-codelabs-master/mdc-111/starter. Zanim zaczniesz, pamiętaj, by cd w tym katalogu.

...lub sklonuj je z GitHuba

Aby skopiować to laboratorium programistyczne z GitHuba, uruchom te polecenia:

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

Instalowanie zależności projektu

W katalogu startowym (material-components-web-codelabs/mdc-111/starter) uruchom:

npm install

W terminalu zobaczysz wiele aktywności, a na koniec komunikat o udanej instalacji:

bb3a822c020c9287.png

Uruchamianie aplikacji startowej

W katalogu startowym uruchom polecenie:

npm start

Rozpocznie się webpack-dev-server. Aby wyświetlić tę stronę, wpisz w przeglądarce adres http://localhost:8080/.

aa9263b15ae4f8d8.png

Gotowe! Powinien wyświetlić się formularz adresu dostawy w aplikacji:

8f60906e660b695e.png

3. Zaktualizuj przycisk

Przycisk Zainstaluj MDC

Aby zatrzymać serwer programistyczny, naciśnij Ctrl + C. Następnie zainstaluj pakiet NPM przycisku MDC i uruchom ponownie serwer:

npm install @material/button
npm start

Importowanie usługi porównywania cen

Na górze elementu _theme.scss usuń bryłę .crane-button { ... } i w jej miejsce dodaj:

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

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

Aktualizowanie znaczników

W index.html usuń klasę crane-button z elementu <button>, dodaj klasy mdc-button i mdc-button--raised oraz zagnieźdź etykietę w elemencie <span> z klasą 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>

Dodawanie efektu falowania

Przyciski MDC można używać bez JavaScriptu. Dodanie do przycisku interaktywnej fali powoduje jednak, że użytkownik ma lepsze wrażenia.

Naciśnij Ctrl + C, aby zatrzymać serwer programistyczny. Następnie uruchom:

npm install @material/ripple
npm start

Na górze app.js dodaj instrukcję importu:

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

Aby utworzyć instancję efektu falowania na przycisku, dodaj do elementu app.js ten kod:

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

Importuj czcionkę Roboto

Domyślnie w Material Design w przypadku czcionek komponentów jest używany krój Roboto.

W programie index.html zaimportuj czcionkę Roboto Web, dodając do elementu <head> ten fragment:

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

Załaduj stronę ponownie. Powinno wyświetlić się mniej więcej coś takiego:

9be8eb813b02eada.gif

Po naciśnięciu przycisk wyświetla teraz subtelny efekt falowania jako wizualny sygnał zwrotny.

4. Zaktualizuj wybór elementu

Komponent MDC Select opakowuje natywny element HTML <select>. Korzystaj z niej wszędzie tam, gdzie zwykle używasz karty <select>. Zmieńmy pole „Stan”.

Zainstaluj moduł węzła MDC

Naciśnij Ctrl + C, aby zatrzymać serwer programistyczny. Następnie uruchom:

npm install @material/select
npm start

Importowanie kodu CSS

Dodaj do pliku _theme.scss te instrukcje importu, tuż po importowaniu przycisku:

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

Aktualizowanie znaczników

Znajdź element <select> w komponencie index.html. Zastąp klasę crane-input klasą mdc-select__native-control:

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

Tuż nad tagiem <select> dodaj te znaczniki do strzałki menu komponentu MDC Select:

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

Tuż pod tagiem zamykającym </select> zastąp klasę crane-label klasą mdc-floating-label:

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

Następnie bezpośrednio po etykiecie dodaj te znaczniki:

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

Na koniec dodaj te tagi wokół elementu <select> (ale wewnątrz elementu crane-field):

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

Otrzymany znacznik powinien wyglądać tak:

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

Importowanie pliku JS

Na górze app.js dodaj instrukcję importu:

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

Aby utworzyć instancję wyboru, na dole sekcji app.js dodaj ten fragment:

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

Załaduj ponownie stronę, która powinna wyglądać tak:

20fa4104564f8195.gif

Komponent MDC Select prezentuje użytkownikowi listę opcji w znanym formacie, ale z nowoczesnym stylem.

5. Zaktualizuj pola tekstowe

Pola tekstowe w interfejsie Material Design są znacznie łatwiejsze w użyciu niż zwykłe elementy <input>. Zostały one zaprojektowane w taki sposób, aby można je było łatwo zidentyfikować w złożonych treściach i wyświetlać subtelne recenzje wizualne, gdy użytkownik wejdzie z nimi w interakcję.

Zainstaluj moduł węzła MDC

Naciśnij Ctrl+C, by wyłączyć serwer programistyczny. Następnie uruchom polecenie:

npm install @material/textfield
npm start

Dodawanie kodu CSS

Dodaj do _theme.scss zaraz po zaimportowaniu danych:

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

Zaktualizuj znaczniki

W index.html odszukaj element <input> w polu „Nazwa”. Zastąp klasę crane-input klasą mdc-text-field__input:

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

Następnie zastąp klasę crane-label elementem mdc-floating-label:

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

Następnie bezpośrednio po etykiecie dodaj te znaczniki:

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

Na koniec umieść wszystkie 3 elementy w taki sposób:

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

Znaczniki powinny wyglądać tak:

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

Powtórz te czynności w przypadku wszystkich innych elementów <input> na stronie.

Oznacznik dla pól „Adres”, „Miasto” i „Kod pocztowy” powinien wyglądać tak:

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

Możesz teraz usunąć style .crane-label i .crane-input z _theme.scss, ponieważ nie są już używane.

Importowanie kodu JavaScript

Na górze app.js dodaj instrukcję importu:

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

Aby utworzyć instancje pól tekstowych, dodaj na końcu pliku app.js następujące wiersze kodu:

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

Załaduj ponownie stronę, która powinna wyglądać tak:

c33f9d1388feca74.png

Wszystkie pola tekstowe zostały zaktualizowane, aby można było używać motywu Material Design.

6. Podsumowanie

Zastąpiono niektóre typowe komponenty (pola tekstowe, zaznaczenie i przycisk) bez wprowadzania zmian w aplikacji. Brawo!

Inne elementy, które mogą mieć duży wpływ na jakość aplikacji, to górny pasek aplikacji i szuflada nawigacyjna.

Dalsze kroki

Aby poznać jeszcze więcej komponentów MDC Web, otwórz katalog MDC Web.

Jeśli chcesz korzystać z określonej platformy MDC, przejdź do artykułu MDC-112: Integrating MDC z Web Frameworks.

Udało mi się ukończyć to ćwiczenia z programowania w rozsądny sposób i w rozsądny sposób

Zdecydowanie się zgadzam Zgadzam się Nie mam zdania Nie zgadzam się Zdecydowanie się nie zgadzam

Chcę w przyszłości nadal używać komponentów Material Komponenty

Zdecydowanie się zgadzam Zdecydowanie się zgadzam Nie mam zdania Nie zgadzam się Zdecydowanie się nie zgadzam