Material Components (MDC) ช่วยให้นักพัฒนาแอปใช้งาน Material Design ได้ MDC สร้างขึ้นโดยทีมวิศวกรและนักออกแบบ UX ที่ Google โดยมีคอมโพเนนต์ UI ที่สวยงามและใช้งานได้หลายสิบรายการ และพร้อมใช้งานสำหรับ Android, iOS, เว็บ และ Flutter material.io/develop |
ใน Codelab MDC-101 และ MDC-102 คุณได้ใช้คอมโพเนนต์ Material (MDC) เพื่อสร้างพื้นฐานของแอปชื่อ Shrine ซึ่งเป็นแอปอีคอมเมิร์ซที่ขายเสื้อผ้าและของใช้ในบ้าน โฟลว์ของผู้ใช้แอปนี้เริ่มต้นด้วยหน้าจอเข้าสู่ระบบ ซึ่งจะนำผู้ใช้ไปยังหน้าจอหลักที่มีผลิตภัณฑ์
เมื่อเร็วๆ นี้ Material Design ได้ขยายขอบเขตเพื่อให้ดีไซเนอร์และนักพัฒนาแอปมีความยืดหยุ่นมากขึ้นในการแสดงแบรนด์ของผลิตภัณฑ์ ในโค้ดแล็บนี้ คุณจะได้ใช้ MDC เพื่อปรับแต่งแอป Shrine ให้แสดงถึงสไตล์ที่เป็นเอกลักษณ์ของแบรนด์ในหลากหลายวิธีมากกว่าที่เคย
สิ่งที่คุณจะสร้าง
ในโค้ดแล็บนี้ คุณจะปรับแต่ง Shrine ให้แสดงถึงแบรนด์โดยใช้สิ่งต่อไปนี้
- สี
- การพิมพ์
- ระดับความสูง
- รูปร่าง
- เลย์เอาต์

คอมโพเนนต์และระบบย่อยของ MDC Web ที่ใช้ใน Codelab นี้
- ธีม
- การพิมพ์
- ระดับความสูง
- รายการรูปภาพ
สิ่งที่ต้องมี
- Node.js เวอร์ชันล่าสุด (มาพร้อมกับ npm ซึ่งเป็นเครื่องมือจัดการแพ็กเกจ JavaScript)
- โค้ดตัวอย่าง (ดาวน์โหลดได้ในขั้นตอนถัดไป)
- ความรู้พื้นฐานเกี่ยวกับ HTML, CSS และ JavaScript
คุณจะให้คะแนนระดับประสบการณ์ในการพัฒนาเว็บเท่าใด
หากเคยเรียน MDC-102 มาแล้ว
หากคุณทำ MDC-102 เสร็จแล้ว โค้ดของคุณก็ควรพร้อมสำหรับโค้ดแล็บนี้ ข้ามไปขั้นตอนที่ 3: เปลี่ยนสี
ดาวน์โหลดแอป Codelab สำหรับผู้เริ่มต้น
แอปเริ่มต้นจะอยู่ในไดเรกทอรี material-components-web-codelabs-master/mdc-103/starter อย่าลืม cd เข้าไปในไดเรกทอรีนั้นก่อนเริ่มต้น
...หรือโคลนจาก GitHub
หากต้องการโคลนโค้ดแล็บนี้จาก GitHub ให้เรียกใช้คำสั่งต่อไปนี้
git clone https://github.com/material-components/material-components-web-codelabs cd material-components-web-codelabs/mdc-103/starter
ติดตั้งการอ้างอิงของโปรเจ็กต์
จากไดเรกทอรีเริ่มต้น material-components-web-codelabs/mdc-103/starter (ควรเป็นไดเรกทอรีปัจจุบันหากคุณทำตามขั้นตอนข้างต้น) ให้เรียกใช้คำสั่งต่อไปนี้
npm install
คุณจะเห็นกิจกรรมมากมาย และในตอนท้าย เทอร์มินัลควรแสดงการติดตั้งที่สำเร็จ

เรียกใช้แอปเริ่มต้น
ในไดเรกทอรีเดียวกัน ให้เรียกใช้คำสั่งต่อไปนี้
npm start
webpack-dev-server จะเริ่มขึ้น ป้อน http://localhost:8080/ ในเบราว์เซอร์เพื่อดูหน้าเว็บ

สำเร็จ! คุณควรเห็นหน้าเข้าสู่ระบบของ Shrine ทำงานในเบราว์เซอร์ กรอกข้อมูลในช่องชื่อผู้ใช้และรหัสผ่าน แล้วคลิกปุ่ม "ถัดไป" เพื่อไปยังหน้าแรก โดยควรแสดงแผงการนำทางทางด้านซ้าย ถัดจากตารางรูปภาพผลิตภัณฑ์

แม้ว่าลิ้นชักการนำทางจะใช้งานได้ แต่เรามาทำให้เข้ากับแบรนด์ Shrine โดยการเปลี่ยนสี ระดับความสูง และการพิมพ์กัน
ธีมสีนี้สร้างขึ้นโดยนักออกแบบที่มีสีที่กำหนดเอง (แสดงในรูปภาพด้านล่าง) ซึ่งประกอบด้วยสีที่เลือกจากแบรนด์ของ Shrine และนำไปใช้กับ Material Theme Editor ซึ่งได้ขยายสีเหล่านั้นเพื่อสร้างชุดสีที่สมบูรณ์ยิ่งขึ้น (สีเหล่านี้ไม่ได้มาจากชุดสี Material ของปี 2014)
มาเปลี่ยนสีของลิ้นชักการนำทางของแอป Shrine ให้สอดคล้องกับรูปแบบสีนั้นกัน
ลบล้างสีธีม
สร้างไฟล์ใหม่ชื่อ _variables.scss ซึ่งมีข้อมูลต่อไปนี้
$mdc-theme-primary: #FEDBD0;
$mdc-theme-on-primary: #442C2E;
$mdc-theme-secondary: #FEEAE6;
$mdc-theme-on-secondary: #442C2E;
$mdc-theme-surface: #FFFBFA;
$mdc-theme-on-surface: #442C2E;
$mdc-theme-background: #FFFFFF;
$mdc-theme-on-background: #442C2E;จากนั้นนำเข้าที่ด้านบนสุดของ _common.scss ดังนี้
@import "./variables";เพิ่มการจัดรูปแบบ CSS ลงในแผงการนำทาง
ใน home.scss ให้เพิ่มคำสั่งนำเข้าต่อไปนี้หลังจากการนำเข้าที่มีอยู่
@import "@material/ripple/mixins";จากนั้นเพิ่มสไตล์ต่อไปนี้เพื่อสร้างคลาส .shrine-drawer
.shrine-drawer {
@include mdc-drawer-fill-color-accessible(primary);
// Drawer defaults to a higher z-index, but we aren't overlaying it over anything
@include mdc-drawer-z-index(0);
text-transform: uppercase;
.mdc-list {
margin: 70px 5px auto 5px;
}
.mdc-list-item {
border-radius: 6px;
justify-content: center;
}
// This needs 3-class specificity to override MDC Drawer styles
.mdc-list .mdc-list-item {
@include mdc-states-activated(#fff);
}
}รีเฟรชหน้าที่ http://localhost:8080/home.html ตอนนี้หน้าจอหลักควรมีลักษณะดังนี้

มาเปลี่ยนสีหน้าจอเข้าสู่ระบบให้เข้ากับรูปแบบสีของเรากัน
เพิ่มการจัดรูปแบบ CSS ลงในหน้าเข้าสู่ระบบ
ใน login.scss ให้เพิ่มบรรทัดต่อไปนี้
.shrine-login {
background-color: $mdc-theme-background;
color: $mdc-theme-on-background;
}
.cancel {
@include mdc-button-ink-color(on-primary);
}นอกจากนี้ ให้เพิ่มการเรียกใช้มิกซ์อินต่อไปนี้ภายใน.username, .passwordตัวเลือก CSS
.username,
.password {
&:not(.mdc-text-field--invalid) {
@include mdc-text-field-label-color(on-primary);
}
&.mdc-text-field--focused:not(.mdc-text-field--invalid) {
@include mdc-text-field-label-color(on-primary);
}
...
}รีเฟรชหน้าที่ http://localhost:8080/ ตอนนี้หน้าจอเข้าสู่ระบบควรมีลักษณะดังนี้

นอกจากสีที่เปลี่ยนไปแล้ว นักออกแบบยังได้ให้ตัวอักษรเฉพาะที่คุณใช้ในเว็บไซต์ด้วย มาเพิ่มปุ่มนั้นลงในลิ้นชักการนำทางด้วยกัน
หากต้องการติดตั้งแพ็กเกจสำหรับ Typography ให้เรียกใช้คำสั่งต่อไปนี้
npm install @material/typography
เพิ่ม CSS สำหรับการจัดรูปแบบข้อความ
ใน home.scss ให้เพิ่มคำสั่งนำเข้าต่อไปนี้หลังจากการนำเข้าที่มีอยู่
@import "@material/typography/mdc-typography";จากนั้นเพิ่มการเรียกใช้มิกซ์อินต่อไปนี้ลงในคลาส shrine-title
.shrine-title {
@include mdc-typography(headline6);
...
}ต่อไป มาจัดรูปแบบรายการในลิ้นชักกัน
เพิ่มตัวคั่นบรรทัด
ใน home.html ให้เพิ่มข้อมูลต่อไปนี้หลังองค์ประกอบ <a ...>Featured</a> ทันที
<div class="shrine-select-item-divider mdc-list-divider" role="separator"></div>เพิ่มรูปแบบต่อไปนี้ใน home.scss
.shrine-select-item-divider {
display: block;
border-bottom-color: #EAA4A4;
border-bottom-width: 2px;
width: 50px;
position: relative;
top: -8px;
}
// This needs 2-class specificity to override MDC Drawer styles
.shrine-drawer .shrine-select-item-divider {
margin: 0 auto;
}ปรับรายการรูปภาพและป้ายกำกับ
หากต้องการปรับรายการและป้ายกำกับ ให้เพิ่มรูปแบบต่อไปนี้ลงใน home.scss ภายในตัวเลือก .product-list
.product-list {
...
.mdc-image-list__supporting {
justify-content: center;
}
.mdc-image-list__item {
padding: 10px;
}
.mdc-image-list__label {
@include mdc-typography(subtitle2);
}
}รีเฟรชหน้าเว็บ ตอนนี้หน้าจอหลักควรมีลักษณะดังนี้

ตอนนี้คุณได้จัดรูปแบบหน้าเว็บด้วยการลงสีและตัวอักษรเฉพาะของ Shrine แล้ว มาดูรายการรูปภาพที่แสดงผลิตภัณฑ์ของ Shrine กัน มาทำให้ผลิตภัณฑ์โดดเด่นขึ้นด้วยการเน้นย้ำผลิตภัณฑ์ให้มากขึ้นกัน
หากต้องการติดตั้งแพ็กเกจสำหรับ Elevation ให้เรียกใช้คำสั่งต่อไปนี้
npm install @material/elevation
เพิ่มคำสั่งนำเข้า
ใน home.scss ให้เพิ่มบรรทัดต่อไปนี้หลังคำสั่งนำเข้าสุดท้าย
@import "@material/elevation/mdc-elevation";รวมรายการรูปภาพไว้ใน Div ใหม่
ใน home.html ให้เพิ่มมาร์กอัปต่อไปนี้รอบองค์ประกอบ <ul>
<div class="shrine-body">
<ul...>
</div>เปลี่ยนระดับความสูงโดยใช้ Sass Mixin
ใน home.scss ให้เพิ่มรายการต่อไปนี้
.shrine-body {
@include mdc-elevation(4);
display: block;
overflow: auto;
z-index: 0; // Elevate over the drawer
}น่าประทับใจมาก คุณได้เพิ่มเงาที่ขอบด้านซ้ายของพื้นผิวสีขาวด้านหลังรายการรูปภาพ เพื่อให้ดูเหมือนลอยอยู่เหนือการนำทางเล็กน้อย

จากนั้นมาเปลี่ยนเลย์เอาต์เพื่อแสดงรูปภาพในสัดส่วนและขนาดต่างๆ เพื่อให้แต่ละรูปภาพดูไม่ซ้ำกัน
แก้ไข HTML
ใน home.html ให้อัปเดตองค์ประกอบ mdc-image-list ให้มีคลาส mdc-image-list--masonry ดังนี้
<ul class="mdc-image-list mdc-image-list--masonry product-list">เพิ่มภาพ
ใน home.html ให้เปลี่ยนแอตทริบิวต์ src ขององค์ประกอบ img แต่ละรายการให้ตรงกับรูปภาพที่อยู่ในโฟลเดอร์ assets จากนั้นอัปเดตข้อความป้ายกำกับสำหรับแต่ละรูปภาพ เมื่อเสร็จแล้ว ควรมีลักษณะดังนี้
<ul class="mdc-image-list mdc-image-list--masonry product-list">
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/ginger-scarf.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Ginger scarf</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/blue-stone-mug.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Blue stone mug</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/cerise-scallop.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Cerise scallop tee</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/chambray-napkins.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Chambray napkins</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/fine-lines.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Fine lines tee</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/garden-strand.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Garden strand</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/gatsby-hat.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Gatsby hat</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/gilt-desk-trio.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Gilt desk trio</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/kitchen-quattro.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Kitchen quattro</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/seabreeze-sweater.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Seabreeze sweater</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/shrug-bag.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Shrug bag</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/stella-sunglasses.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Stella sunglasses</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/surf-and-perf.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Surf and perf shirt</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/vagabond-sack.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Vagabond sack</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/walter-henley.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Walter henley (white)</span>
</div>
</li>
<li class="mdc-image-list__item">
<img class="mdc-image-list__image" src="assets/weave-keyring.jpg">
<div class="mdc-image-list__supporting">
<span class="mdc-image-list__label">Weave keyring</span>
</div>
</li>
</ul>อัปเดต CSS
ใน home.scss ให้นำ mdc-image-list-standard-columns(4) มิกซ์อินออกแล้วแทนที่ด้วยมิกซ์อินต่อไปนี้
@include mdc-image-list-masonry-columns(4);จากนั้นเพิ่มpaddingค่าproduct-listต่อไปนี้ลงในคลาส home.scss
.product-list {
...
padding: 80px 100px 0;
}
ตอนนี้โค้ดของคุณควรตรงกับโค้ดที่รวมอยู่ในโฟลเดอร์ complete/
สีเป็นวิธีที่มีประสิทธิภาพในการแสดงออกถึงแบรนด์ และการเปลี่ยนแปลงสีเพียงเล็กน้อยอาจส่งผลอย่างมากต่อประสบการณ์ของผู้ใช้ มาลองดูว่า Shrine จะมีลักษณะอย่างไรหากรูปแบบสีของแบรนด์แตกต่างออกไปโดยสิ้นเชิง
แก้ไข CSS
ใน _variables.scss ให้แทนที่ตัวแปรที่คุณประกาศสำหรับธีมหลักด้วยตัวแปรต่อไปนี้
$mdc-theme-primary: #5D1049;
$mdc-theme-on-primary: #FFFFFF;
$mdc-theme-secondary: #E30425;
$mdc-theme-on-secondary: #FFFFFF;
$mdc-theme-surface: #FFFFFF;
$mdc-theme-on-surface: #000000;
$mdc-theme-background: #F4E2ED;
$mdc-theme-on-background: #000000;ใน login.scss ให้นำมิกซ์อินในตัวเลือก .username, .password ออก โดยควรมีลักษณะดังนี้
.username,
.password {
display: block;
width: 300px;
margin: 20px auto;
}นอกจากนี้ ให้นำการลบล้างมิกซ์อิน mdc-button-ink-color ออกในคลาส .cancel ดังนี้
ใน home.scss ให้เพิ่มกฎต่อไปนี้ลงในคลาส .home
background-color: $mdc-theme-background;ในตัวเลือก .shrine-logo-drawer ให้แทนที่พร็อพเพอร์ตี้ fill ด้วยสี on-primary
.shrine-logo-drawer {
...
fill: $mdc-theme-on-primary;
}ในทำนองเดียวกัน ภายในตัวเลือก .shrine-title ให้ตั้งค่าพร็อพเพอร์ตี้ color เป็นสี on-primary ดังนี้
.shrine-title {
...
color: $mdc-theme-on-primary;
}
สุดท้าย ให้นำ mdc-elevation มิกซ์อินที่ใช้ก่อนหน้านี้ออกภายใต้ตัวเลือก .shrine-body
สร้างและเรียกใช้ ตอนนี้ธีมใหม่ควรปรากฏในเบราว์เซอร์แล้ว

ตอนนี้ให้ไปที่ http://localhost:8080/home.html เพื่อดูการเปลี่ยนแปลงในหน้า home.html

ตอนนี้คุณได้สร้างแอปที่คล้ายกับข้อกำหนดของนักออกแบบแล้ว
ขั้นตอนถัดไป
ตอนนี้คุณได้ใช้คอมโพเนนต์ MDC ต่อไปนี้แล้ว ได้แก่ ธีม การออกแบบตัวอักษร ระดับความสูง และรูปร่าง คุณดูคอมโพเนนต์และระบบย่อยเพิ่มเติมได้ในแคตตาล็อกเว็บ MDC