Material Components (MDC) ช่วยให้นักพัฒนาแอปใช้งาน Material Design ได้ MDC สร้างขึ้นโดยทีมวิศวกรและนักออกแบบ UX ที่ Google โดยมีคอมโพเนนต์ UI ที่สวยงามและใช้งานได้หลายสิบรายการ และพร้อมใช้งานสำหรับ Android, iOS, เว็บ และ Flutter material.io/develop |
Material Design และคอมโพเนนต์ Material สำหรับเว็บคืออะไร
Material Design คือระบบสำหรับการสร้างผลิตภัณฑ์ดิจิทัลที่โดดเด่นและสวยงาม การรวมสไตล์ การสร้างแบรนด์ การโต้ตอบ และการเคลื่อนไหวภายใต้ชุดหลักการและคอมโพเนนต์ที่สอดคล้องกันจะช่วยให้ทีมผลิตภัณฑ์ตระหนักถึงศักยภาพด้านการออกแบบที่ยิ่งใหญ่ที่สุด
สำหรับเดสก์ท็อปและเว็บบนอุปกรณ์เคลื่อนที่ Material Components Web (MDC Web) จะรวมการออกแบบและวิศวกรรมเข้าด้วยกันด้วยไลบรารีของคอมโพเนนต์เพื่อสร้างความสอดคล้องกันในแอปและเว็บไซต์ คอมโพเนนต์ MDC Web แต่ละรายการจะอยู่ในโมดูลโหนดของตัวเอง ดังนั้นเมื่อระบบ Material Design พัฒนาขึ้น คอมโพเนนต์เหล่านี้จะอัปเดตได้ง่ายเพื่อให้มั่นใจว่าการใช้งานจะสอดคล้องกันอย่างสมบูรณ์แบบและเป็นไปตามมาตรฐานการพัฒนาส่วนหน้าของ Google MDC ยังพร้อมใช้งานสำหรับ Android, iOS และ Flutter ด้วย
ในโค้ดแล็บนี้ คุณจะได้สร้างหน้าเข้าสู่ระบบโดยใช้คอมโพเนนต์หลายรายการของ MDC Web
สิ่งที่คุณจะสร้าง
Codelab นี้เป็น Codelab แรกใน 3 รายการที่จะแนะนำวิธีสร้างแอปชื่อ Shrine ซึ่งเป็นเว็บไซต์อีคอมเมิร์ซที่ขายเสื้อผ้าและของใช้ในบ้าน โดยจะแสดงวิธีปรับแต่งคอมโพเนนต์ให้สอดคล้องกับแบรนด์หรือสไตล์ใดก็ได้โดยใช้ MDC Web
ในโค้ดแล็บนี้ คุณจะได้สร้างหน้าเข้าสู่ระบบสำหรับ Shrine ซึ่งมีองค์ประกอบต่อไปนี้
- ช่องข้อความ 2 ช่อง ช่องหนึ่งสำหรับป้อนชื่อผู้ใช้และอีกช่องสำหรับป้อนรหัสผ่าน
- ปุ่ม 2 ปุ่ม ปุ่มหนึ่งสำหรับ "ยกเลิก" และอีกปุ่มสำหรับ "ถัดไป"
- ชื่อของเว็บไซต์ (ศาลเจ้า)
- รูปภาพโลโก้ของ Shrine
คอมโพเนนต์ MDC Web ใน Codelab นี้
- ช่องข้อความ
- ปุ่ม
- คลื่น
สิ่งที่ต้องมี
- Node.js เวอร์ชันล่าสุด (มาพร้อมกับ npm ซึ่งเป็นเครื่องมือจัดการแพ็กเกจ JavaScript)
- โค้ดตัวอย่าง (ดาวน์โหลดได้ในขั้นตอนถัดไป)
- ความรู้พื้นฐานเกี่ยวกับ HTML, CSS และ JavaScript
เรามองหาวิธีปรับปรุงบทแนะนำอยู่เสมอ คุณจะให้คะแนนระดับประสบการณ์ในการพัฒนาเว็บเท่าใด
ดาวน์โหลดแอป Codelab สำหรับผู้เริ่มต้น
แอปเริ่มต้นจะอยู่ในไดเรกทอรี material-components-web-codelabs-master/mdc-101/starter
อย่าลืม cd
เข้าไปในไดเรกทอรีนั้นก่อนเริ่มต้น
...หรือโคลนจาก GitHub
หากต้องการโคลนโค้ดแล็บนี้จาก GitHub ให้เรียกใช้คำสั่งต่อไปนี้
git clone https://github.com/material-components/material-components-web-codelabs cd material-components-web-codelabs/mdc-101/starter
ติดตั้งการอ้างอิงของโปรเจ็กต์
จากไดเรกทอรีเริ่มต้น ให้เรียกใช้คำสั่งต่อไปนี้
npm install
คุณจะเห็นกิจกรรมมากมาย และในตอนท้าย เทอร์มินัลควรแสดงการติดตั้งที่สำเร็จ
หากไม่มี ให้เรียกใช้ npm audit fix
เรียกใช้แอปเริ่มต้น
ในไดเรกทอรีเดียวกัน ให้เรียกใช้คำสั่งต่อไปนี้
npm start
webpack-dev-server
จะเริ่มขึ้น ป้อน http://localhost:8080/ ในเบราว์เซอร์เพื่อดูหน้าเว็บ
สำเร็จ! โค้ดเริ่มต้นสำหรับหน้าเข้าสู่ระบบของ Shrine ควรทํางานในเบราว์เซอร์ คุณควรเห็นชื่อ "Shrine" และโลโก้ Shrine อยู่ด้านล่าง
ดูโค้ด
ข้อมูลเมตาใน index.html
ในไดเรกทอรีเริ่มต้น ให้เปิด index.html
ด้วยโปรแกรมแก้ไขโค้ดที่คุณชื่นชอบ โดยควรมีข้อมูลต่อไปนี้
<!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>
ในที่นี้ เราใช้แท็ก <link>
เพื่อโหลดไฟล์ bundle-login.css
ที่สร้างโดย webpack และแท็ก <script>
จะรวมไฟล์ bundle-login.js
นอกจากนี้ เรายังรวม normalize.css เพื่อให้การแสดงผลในเบราว์เซอร์ต่างๆ สอดคล้องกัน รวมถึงแบบอักษร Roboto จาก Google Fonts
รูปแบบที่กำหนดเองใน login.scss
คอมโพเนนต์ MDC Web ได้รับการจัดรูปแบบโดยใช้คลาส CSS mdc-*
เช่น คลาส mdc-text-field
(MDC Web ถือว่าโครงสร้าง DOM เป็นส่วนหนึ่งของ API สาธารณะ)
โดยทั่วไป เราขอแนะนำให้คุณแก้ไขสไตล์ที่กำหนดเองในคอมโพเนนต์โดยใช้คลาสของคุณเอง คุณอาจสังเกตเห็นคลาส CSS ที่กำหนดเองบางรายการใน HTML ด้านบน เช่น shrine-logo
โดยสไตล์เหล่านี้กำหนดไว้ใน login.scss
เพื่อเพิ่มสไตล์พื้นฐานลงในหน้าเว็บ
เปิด login.scss
แล้วคุณจะเห็นรูปแบบต่อไปนี้สำหรับหน้าเข้าสู่ระบบ
@import "./common";
.header {
text-align: center;
}
.shrine-logo {
width: 150px;
height: 150px;
padding-top: 80px;
fill: currentColor;
}
เมื่อคุณคุ้นเคยกับโค้ดเริ่มต้นแล้ว มาใช้คอมโพเนนต์แรกกัน
ก่อนอื่น เราจะเพิ่มช่องข้อความ 2 ช่องในหน้าเข้าสู่ระบบ ซึ่งผู้ใช้จะป้อนชื่อผู้ใช้และรหัสผ่านได้ เราจะใช้คอมโพเนนต์ช่องข้อความ MDC ซึ่งมีฟังก์ชันในตัวที่แสดงป้ายกำกับลอยและเปิดใช้งานการกระเพื่อมเมื่อแตะ
ติดตั้งช่องข้อความ MDC
คอมโพเนนต์ MDC Web เผยแพร่ผ่านแพ็กเกจ NPM หากต้องการติดตั้งแพ็กเกจสำหรับคอมโพเนนต์ช่องข้อความ ให้เรียกใช้คำสั่งต่อไปนี้
npm install @material/textfield
เพิ่ม HTML
ใน index.html
ให้เพิ่มข้อมูลต่อไปนี้ภายในองค์ประกอบ <form>
ในส่วนเนื้อหา
<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>
โครงสร้าง DOM ของช่องข้อความ MDC ประกอบด้วยหลายส่วน ดังนี้
- องค์ประกอบหลัก
mdc-text-field
- องค์ประกอบย่อย
mdc-text-field__input
,mdc-floating-label
และmdc-line-ripple
เพิ่ม CSS
ใน login.scss
ให้เพิ่มคำสั่งนำเข้าต่อไปนี้หลังจากการนำเข้าที่มีอยู่
@import "@material/textfield/mdc-text-field";
ในไฟล์เดียวกัน ให้เพิ่มรูปแบบต่อไปนี้เพื่อจัดแนวและจัดกึ่งกลางช่องข้อความ
.username,
.password {
display: block;
width: 300px;
margin: 20px auto;
}
เพิ่ม JavaScript
เปิด login.js
ซึ่งตอนนี้ยังว่างเปล่า เพิ่มโค้ดต่อไปนี้เพื่อนำเข้าและสร้างอินสแตนซ์ของช่องข้อความ
import {MDCTextField} from '@material/textfield';
const username = new MDCTextField(document.querySelector('.username'));
const password = new MDCTextField(document.querySelector('.password'));
เพิ่มการตรวจสอบ HTML5
ช่องข้อความจะแสดงว่าข้อมูลที่ป้อนในช่องถูกต้องหรือมีข้อผิดพลาดหรือไม่ โดยใช้แอตทริบิวต์ที่ API การตรวจสอบความถูกต้องของแบบฟอร์ม HTML5 มีให้
สิ่งที่คุณควรทำมีดังนี้
- เพิ่มแอตทริบิวต์
required
ลงในองค์ประกอบmdc-text-field__input
ของช่องข้อความชื่อผู้ใช้และรหัสผ่าน - ตั้งค่าแอตทริบิวต์
minlength
ขององค์ประกอบmdc-text-field__input
ของช่องข้อความรหัสผ่านเป็น"8"
ปรับ<div class="mdc-text-field">
องค์ประกอบทั้ง 2 ให้มีลักษณะดังนี้
<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>
รีเฟรชหน้าที่ http://localhost:8080/ ตอนนี้คุณควรเห็นหน้าเว็บที่มีช่องข้อความ 2 ช่องสำหรับชื่อผู้ใช้และรหัสผ่าน
คลิกช่องข้อความเพื่อดูภาพเคลื่อนไหวของป้ายกำกับแบบลอยและภาพเคลื่อนไหวของเส้นระลอก (เส้นขอบด้านล่างที่ระลอกออกด้านนอก)
จากนั้นเราจะเพิ่มปุ่ม 2 ปุ่มลงในหน้าเข้าสู่ระบบ ได้แก่ "ยกเลิก" และ "ถัดไป" เราจะใช้คอมโพเนนต์ปุ่ม MDC พร้อมกับคอมโพเนนต์ระลอก MDC เพื่อสร้างเอฟเฟกต์ระลอกหมึกอันเป็นเอกลักษณ์ของ Material Design
ติดตั้งปุ่ม MDC
หากต้องการติดตั้งแพ็กเกจสำหรับคอมโพเนนต์ปุ่ม ให้เรียกใช้คำสั่งต่อไปนี้
npm install @material/button
เพิ่ม HTML
ใน index.html
ให้เพิ่มข้อความต่อไปนี้ใต้แท็กปิดขององค์ประกอบ <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>
สำหรับปุ่ม "ยกเลิก" เราใช้รูปแบบปุ่มเริ่มต้น อย่างไรก็ตาม ปุ่ม "ถัดไป" ใช้ตัวแปรสไตล์ยกขึ้น ซึ่งระบุโดยคลาส mdc-button--raised
เราจะรวมองค์ประกอบ mdc-button
ทั้ง 2 รายการไว้ในองค์ประกอบ <div>
เพื่อให้จัดแนวได้ง่ายในภายหลัง
เพิ่ม CSS
ใน login.scss
ให้เพิ่มคำสั่งนำเข้าต่อไปนี้หลังจากการนำเข้าที่มีอยู่
@import "@material/button/mdc-button";
หากต้องการจัดแนวปุ่มและเพิ่มระยะขอบรอบปุ่ม ให้เพิ่มรูปแบบต่อไปนี้ลงใน login.scss
.button-container {
display: flex;
justify-content: flex-end;
width: 300px;
margin: auto;
}
.button-container button {
margin: 3px;
}
เพิ่มเอฟเฟกต์หมึกกระเพื่อมให้กับปุ่ม
เมื่อผู้ใช้แตะหรือคลิกปุ่ม ระบบควรแสดงความคิดเห็นในรูปแบบของระลอกหมึก คอมโพเนนต์ระลอกหมึกต้องใช้ JavaScript ดังนั้นเราจะเพิ่ม JavaScript ลงในหน้าเว็บ
หากต้องการติดตั้งแพ็กเกจสำหรับคอมโพเนนต์ Ripple ให้เรียกใช้คำสั่งต่อไปนี้
npm install @material/ripple
ที่ด้านบนของ login.js
ให้เพิ่มคำสั่งนำเข้าต่อไปนี้
import {MDCRipple} from '@material/ripple';
หากต้องการสร้างอินสแตนซ์ของ Ripple ให้เพิ่มโค้ดต่อไปนี้ลงใน login.js
new MDCRipple(document.querySelector('.cancel'));
new MDCRipple(document.querySelector('.next'));
เนื่องจากเราไม่จำเป็นต้องเก็บการอ้างอิงไปยังอินสแตนซ์ของ Ripple จึงไม่จำเป็นต้องกำหนดให้กับตัวแปร
เท่านี้ก็เรียบร้อย รีเฟรชหน้าเว็บ หมึกจะกระเพื่อมเมื่อคุณคลิกปุ่มแต่ละปุ่ม
กรอกข้อมูลในช่องข้อความด้วยค่าที่ถูกต้อง แล้วกดปุ่ม "ถัดไป" สำเร็จแล้ว! คุณจะทำงานในหน้านี้ต่อใน MDC-102
การใช้มาร์กอัป HTML พื้นฐานและ CSS และ JavaScript เพียงไม่กี่บรรทัด ไลบรารีคอมโพเนนต์ Material สำหรับเว็บช่วยให้คุณสร้างหน้าเข้าสู่ระบบที่สวยงามซึ่งเป็นไปตามหลักเกณฑ์การออกแบบ Material รวมถึงมีลักษณะและทำงานอย่างสอดคล้องกันในอุปกรณ์ทุกเครื่อง
ขั้นตอนถัดไป
ช่องข้อความ ปุ่ม และ Ripple เป็น 3 องค์ประกอบหลักในไลบรารี MDC Web แต่ยังมีอีกมากมาย นอกจากนี้ คุณยังสำรวจคอมโพเนนต์อื่นๆ ใน MDC Web ได้ด้วย
คุณไปที่ MDC-102: โครงสร้างและการจัดวาง Material Design เพื่อดูข้อมูลเกี่ยวกับลิ้นชักการนำทางและรายการรูปภาพได้ ขอขอบคุณที่ลองใช้ Material Components เราหวังว่าคุณจะชอบ Codelab นี้