MDC-111 Web: שילוב רכיבי Material ב-codebase (אינטרנט)

1. מבוא

logo_components_color_2x_web_96dp.png

Material Components (MDC) עוזר למפתחים להטמיע Material Design. MDC נוצר על ידי צוות של מהנדסים ומעצבי חוויית המשתמש ב-Google, שכולל עשרות רכיבים יפים ופונקציונליים של ממשק המשתמש. זמין ל-Android, ל-iOS, לאינטרנט ול-Flutter.material.io/develop

Material Elements לאינטרנט (MDC Web) הם ללא תלות במסגרות, והם נבנים באמצעות JavaScript רגיל. הכלים האלה מאפשרים ל-MDC Web לעבוד בצורה חלקה בתהליך הפיתוח. אפשר להתקין את הרכיבים האלה לפי הצורך כדי לשפר את העיצוב הגמיש באפליקציה הקיימת.

מה תפַתחו

ב-Codelab הזה מחליפים חלק מהרכיבים הקיימים בצורה ברכיבים שסופקו על ידי MDC Web:

c33f9d1388feca74.png

רכיבי MDC ב-Codelab הזה

  • לחצן
  • בחירה
  • שדה טקסט

מה צריך להכין

  • גרסה עדכנית של Node.js (שנשלחת בחבילה עם npm, מנהל חבילות של JavaScript).
  • הקוד לדוגמה (להורדה בשלב הבא)
  • ידע בסיסי ב-HTML, ב-CSS וב-JavaScript

איזה דירוג מגיע לדעתך לרמת הניסיון שלך בפיתוח אתרים?

מתחילים בינונית בקיאים

2. הגדרת סביבת הפיתוח

להורדת האפליקציה לתחילת פעולה של Codelab

האפליקציה לתחילת הפעולה נמצאת בספרייה material-components-web-codelabs-master/mdc-111/starter. חשוב לשמור את cd בספרייה הזו לפני שמתחילים.

...או לשכפל אותו מ-GitHub

כדי לשכפל את ה-Codelab הזה מ-GitHub, מריצים את הפקודות הבאות:

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

תלות של פרויקטים בהתקנות

מספריית ההתחלה (material-components-web-codelabs/mdc-111/starter), מריצים את:

npm install

יש פעילות רבה ובסופה, ההתקנה אמורה להופיע בטרמינל:

bb3a822c020c9287.png

הפעלת אפליקציה לתחילת פעולה

בספרייה לתחילת הפעולה, מריצים את:

npm start

webpack-dev-server יתחיל. מכוונים את הדפדפן אל http://localhost:8080/ כדי לראות את הדף.

aa9263b15ae4f8d8.png

הצלחת! אתם אמורים לראות את טופס הכתובת למשלוח של האפליקציה:

8f60906e660b695e.png

3. עדכון הלחצן

לחצן להתקנת MDC

כדי להפסיק את שרת הפיתוח, מקישים על Ctrl+C. לאחר מכן, מתקינים את חבילת ה-NPM של לחצן ה-MDC ומפעילים מחדש את השרת:

npm install @material/button
npm start

ייבוא של שירות ה-CSS

בחלק העליון של _theme.scss, מוחקים את הבלוק .crane-button { ... } ומוסיפים את הקוד הבא במקומו:

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

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

עדכון תגי העיצוב

בקובץ index.html, מסירים את המחלקה crane-button מהרכיב <button>, מוסיפים את המחלקות mdc-button ו-mdc-button--raised ומציבים את התווית בתוך רכיב <span> עם המחלקה 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>

הוספת גל

אפשר להשתמש בלחצני MDC בלי JavaScript. עם זאת, הוספת גל אינטראקטיבי ללחצן יוצרת חוויית משתמש עשירה יותר.

כדי להפסיק את שרת הפיתוח, מקישים על Ctrl+C. לאחר מכן מריצים את הפקודה:

npm install @material/ripple
npm start

מוסיפים את הצהרת הייבוא הבאה לחלק העליון של app.js:

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

כדי ליצור את ההד על הלחצן, צריך להוסיף את הפרטים הבאים בחלק התחתון של app.js:

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

ייבוא של הגופן Roboto

כברירת מחדל, Material Design משתמש ב-Roboto לגופנים של רכיבים.

ב-index.html, ייבא את הגופן Roboto Web על ידי הוספת הקוד הבא לרכיב <head>:

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

טוענים מחדש את הדף. אתם אמורים לראות משהו כזה:

9be8eb813b02eada.gif

הלחצן מציג עכשיו אפקט של גלים עדינים כמשוב חזותי לאחר לחיצה.

4. עדכון הרכיב שנבחר

רכיב ה-MDC Select כולל רכיב HTML מקורי <select>. יש להשתמש בו בכל מקום שבו בדרך כלל משתמשים ב-<select>. בואו נעדכן את השדה "מצב".

התקנת מודול MDC Node

כדי להפסיק את שרת הפיתוח, מקישים על Ctrl+C. לאחר מכן מריצים את הפקודה:

npm install @material/select
npm start

ייבוא של שירות ה-CSS

יש להוסיף את הפריטים הבאים אל _theme.scss, מיד לאחר ייבוא הלחצנים:

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

עדכון תגי העיצוב

מאתרים את הרכיב <select> ב-index.html. מחליפים את המחלקה crane-input במחלקה mdc-select__native-control:

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

מעל התג <select>, מוסיפים את תגי העיצוב הבאים לחץ לתפריט הנפתח של הרכיב MDC Select:

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

מתחת לתג </select> הסוגר, מחליפים את המחלקה crane-label ב-mdc-floating-label:

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

לאחר מכן מוסיפים את תגי העיצוב הבאים מיד אחרי התווית:

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

לסיום, מוסיפים את התגים הבאים מסביב לרכיב <select> (אבל בתוך הרכיב crane-field):

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

תגי העיצוב שיתקבלו אמורים להיראות כך:

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

ייבוא ה-JS

מוסיפים את הצהרת הייבוא הבאה לחלק העליון של app.js:

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

כדי ליצור את הבחירה, צריך להוסיף את הפרטים הבאים בחלק התחתון של app.js:

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

טוענים מחדש את הדף, שנראה כך:

20fa4104564f8195.gif

הרכיב MDC Select מציג רשימה של אפשרויות למשתמש בפורמט מוכר, אבל בסגנון מודרני.

5. עדכון שדות הטקסט

לשדות טקסט של עיצוב חדש (Material Design) יש יתרונות משמעותיים יותר בנוחות השימוש לעומת רכיבי <input> פשוטים. הם מיועדים לזיהוי קל של תוכן מורכב, והם מציגים משוב חזותי עדין כשהמשתמש מקיים איתם אינטראקציה.

התקנת מודול MDC Node

כדי להפסיק את שרת הפיתוח, לוחצים על Ctrl+C. לאחר מכן מריצים את הפקודה:

npm install @material/textfield
npm start

הוספה של שירות ה-CSS

יש להוסיף את הפריטים הבאים אל _theme.scss, מיד לאחר בחירת הייבוא:

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

עדכון תגי העיצוב

באפליקציית index.html, מאתרים את הרכיב <input> בשדה 'שם'. מחליפים את המחלקה crane-input במחלקה mdc-text-field__input:

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

לאחר מכן, מחליפים את המחלקה crane-label במחלקה mdc-floating-label:

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

לאחר מכן מוסיפים את תגי העיצוב הבאים מיד אחרי התווית:

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

בסוף, כוללים את כל 3 הרכיבים הבאים:

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

תגי העיצוב שיתקבלו אמורים להיראות כך:

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

חוזרים על אותו תהליך בכל שאר רכיבי <input> בדף.

תגי העיצוב בשדות כתובת, עיר ומיקוד אמורים להיראות כך:

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

עכשיו אפשר להסיר את הסגנונות .crane-label ו.crane-input מ-_theme.scss, שלא נמצאים יותר בשימוש.

ייבוא ה-JS

מוסיפים את הצהרת הייבוא הבאה לחלק העליון של app.js:

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

כדי ליצור מופע של שדות טקסט, צריך להוסיף את הפרטים הבאים בחלק התחתון של app.js:

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

טוענים מחדש את הדף, שנראה כך:

c33f9d1388feca74.png

כל שדות הטקסט עודכנו ועכשיו הן מבוססות על עיצוב חדשני מהותי.

6. Recap

החלפת כמה רכיבים נפוצים (שדות טקסט, בחירה ולחצן) בלי לשנות את העיצוב של האפליקציה מחדש. מעולה!

רכיבים נוספים שעשויים להשפיע מאוד הם סרגל האפליקציות העליון וחלונית ההזזה לניווט.

השלבים הבאים

אפשר לעיין בעוד רכיבים נוספים ב-MDC באינטרנט בקטלוג האינטרנט של MDC.

אם אתם רוצים להשתמש ב-MDC Web עם מסגרת מסוימת, תוכלו לעבור אל MDC-112: שילוב של MDC עם Web Frameworks.

הצלחתי להשלים את ה-Codelab הזה תוך השקעה של זמן ומאמץ סבירים

נכון מאוד נכון נייטרלי לא נכון לא נכון בכלל

ארצה להמשיך להשתמש ברכיבי Material Materials בעתיד

נכון מאוד נכון נייטרלי לא נכון לא נכון בכלל