MDC-103 Web: Sắp xếp theo chủ đề Material với màu sắc, hình dạng, độ cao và kiểu (Web)

logo_components_color_2x_web_96dp.png

Thành phần Material (MDC) giúp nhà phát triển triển khai Material Design. Được tạo bởi một nhóm kỹ sư và nhà thiết kế trải nghiệm người dùng tại Google, MDC có hàng chục thành phần giao diện người dùng đẹp mắt và hữu ích, đồng thời có sẵn cho Android, iOS, web và Flutter.

material.io/develop

Trong các lớp học lập trình MDC-101 và MDC-102, bạn đã sử dụng Thành phần Material (MDC) để xây dựng các thành phần cơ bản của một ứng dụng có tên là Shrine, một ứng dụng thương mại điện tử bán quần áo và đồ gia dụng. Luồng người dùng của ứng dụng này bắt đầu bằng màn hình đăng nhập, sau đó đưa người dùng đến màn hình chính có chứa các sản phẩm.

Gần đây, Material Design đã mở rộng để mang đến cho nhà thiết kế và nhà phát triển khả năng linh hoạt hơn trong việc thể hiện thương hiệu của sản phẩm. Trong lớp học lập trình này, bạn sẽ sử dụng MDC để tuỳ chỉnh ứng dụng Shrine nhằm thể hiện phong cách độc đáo của thương hiệu theo nhiều cách hơn bao giờ hết.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ tuỳ chỉnh Shrine để thể hiện thương hiệu của ứng dụng bằng cách sử dụng:

  • Màu
  • Kiểu chữ
  • Độ cao
  • Hình dạng
  • Bố cục

Các thành phần và hệ thống con MDC Web được dùng trong lớp học lập trình này

  • Giao diện
  • Kiểu chữ
  • Độ cao
  • Danh sách hình ảnh

Bạn cần có

  • Một phiên bản gần đây của Node.js (đi kèm với npm, một trình quản lý gói JavaScript).
  • Mã mẫu (sẽ được tải xuống ở bước tiếp theo)
  • Kiến thức cơ bản về HTML, CSS và JavaScript

Bạn đánh giá thế nào về trình độ của mình trong lĩnh vực phát triển web?

Người mới bắt đầu Trung cấp Thành thạo

Tiếp tục từ MDC-102?

Nếu bạn đã hoàn thành MDC-102, thì mã của bạn sẽ sẵn sàng cho lớp học lập trình này. Chuyển sang bước 3: Thay đổi màu sắc.

Tải ứng dụng khởi đầu của lớp học lập trình xuống

Tải ứng dụng ban đầu xuống

Ứng dụng khởi đầu nằm trong thư mục material-components-web-codelabs-master/mdc-103/starter. Hãy nhớ cd vào thư mục đó trước khi bắt đầu.

...hoặc sao chép từ GitHub

Để sao chép lớp học lập trình này từ GitHub, hãy chạy các lệnh sau:

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

Cài đặt các phần phụ thuộc của dự án

Từ thư mục khởi động material-components-web-codelabs/mdc-103/starter (đây phải là thư mục hiện tại của bạn nếu bạn làm theo bước trên), hãy chạy:

npm install

Bạn sẽ thấy nhiều hoạt động và cuối cùng, thiết bị đầu cuối sẽ cho thấy quá trình cài đặt thành công:

Chạy ứng dụng khởi đầu

Trong cùng một thư mục, hãy chạy:

npm start

Gói webpack-dev-server sẽ bắt đầu. Trỏ trình duyệt đến http://localhost:8080/ để xem trang.

Thành công! Bạn sẽ thấy trang đăng nhập của Shrine đang chạy trong trình duyệt. Điền thông tin vào các trường Tên người dùng và Mật khẩu, rồi nhấp vào nút "Tiếp theo" để chuyển đến trang chủ. Ứng dụng này sẽ hiển thị một ngăn điều hướng ở bên trái, bên cạnh một lưới hình ảnh sản phẩm.

Mặc dù ngăn điều hướng hoạt động bình thường, nhưng chúng ta hãy thay đổi màu sắc, độ cao và kiểu chữ của ngăn này để phù hợp với thương hiệu Shrine.

Giao diện màu này do một nhà thiết kế tạo ra bằng các màu tuỳ chỉnh (như trong hình bên dưới). Tệp này chứa các màu được chọn từ thương hiệu của Shrine và được áp dụng cho Trình chỉnh sửa giao diện Material. Trình chỉnh sửa này đã mở rộng các màu đó để tạo ra một bảng màu đầy đủ hơn. (Những màu này không có trong bảng màu Material năm 2014.)

Hãy thay đổi màu của ngăn điều hướng trong ứng dụng Shrine để phản ánh bảng phối màu đó.

Ghi đè màu giao diện

Tạo một tệp mới có tên là _variables.scss, chứa nội dung sau:

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

Sau đó, hãy nhập tệp này ở ngay đầu _common.scss:

@import "./variables";

Thêm kiểu CSS vào ngăn điều hướng

Trong home.scss, hãy thêm câu lệnh nhập sau vào các câu lệnh nhập hiện có:

@import "@material/ripple/mixins";

Sau đó, hãy thêm các kiểu sau để tạo lớp .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);
  }
}

Làm mới trang tại http://localhost:8080/home.html. Màn hình chính của bạn hiện sẽ có dạng như sau:

Hãy thay đổi màu của màn hình đăng nhập cho phù hợp với bảng phối màu của chúng ta.

Thêm kiểu CSS vào trang đăng nhập

Trong login.scss, hãy thêm các dòng sau:

.shrine-login {
  background-color: $mdc-theme-background;
  color: $mdc-theme-on-background;
}

.cancel {
  @include mdc-button-ink-color(on-primary);
}

Ngoài ra, hãy thêm các lệnh gọi mixin sau đây vào bên trong bộ chọn CSS .username, .password:

.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);
  }
  ...
}

Làm mới trang tại http://localhost:8080/. Màn hình đăng nhập của bạn hiện sẽ có dạng như sau:

Ngoài các thay đổi về màu sắc, nhà thiết kế cũng đã cung cấp cho bạn kiểu chữ cụ thể để sử dụng trên trang web. Hãy thêm phần đó vào ngăn điều hướng.

Để cài đặt gói cho Kiểu chữ, hãy chạy:

npm install @material/typography

Thêm CSS cho kiểu chữ

Trong home.scss, hãy thêm câu lệnh nhập sau đây sau các câu lệnh nhập hiện có:

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

Sau đó, hãy thêm lệnh gọi mixin sau vào lớp shrine-title:

.shrine-title {
  @include mdc-typography(headline6);
  ...
}

Tiếp theo, hãy tạo kiểu cho các mục trong ngăn kéo.

Thêm một dòng phân cách

Trong home.html, hãy thêm nội dung sau ngay sau phần tử <a ...>Featured</a>:

<div class="shrine-select-item-divider mdc-list-divider" role="separator"></div>

Thêm các kiểu sau vào 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;
}

Điều chỉnh các mục và nhãn hình ảnh

Để điều chỉnh các mục và nhãn, hãy thêm các kiểu sau vào home.scss trong bộ chọn .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);
  }
}

Làm mới trang. Màn hình chính của bạn hiện sẽ có dạng như sau:

Bây giờ, bạn đã tạo kiểu cho trang bằng bảng phối màu và kiểu chữ cụ thể của Shrine, hãy xem danh sách hình ảnh cho thấy các sản phẩm của Shrine. Hãy thu hút sự chú ý đến các sản phẩm bằng cách nhấn mạnh hơn vào chúng.

Để cài đặt gói cho Elevation, hãy chạy mã:

npm install @material/elevation

Thêm câu lệnh nhập

Trong home.scss, hãy thêm dòng sau sau câu lệnh nhập cuối cùng:

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

Bọc danh sách hình ảnh bằng một div mới

Trong home.html, hãy thêm mã đánh dấu sau vào xung quanh phần tử <ul>:

<div class="shrine-body">
 <ul...>
</div>

Thay đổi độ cao bằng cách sử dụng các mixin Sass

Trong home.scss, hãy thêm nội dung sau:

.shrine-body {
  @include mdc-elevation(4);

  display: block;
  overflow: auto;
  z-index: 0; // Elevate over the drawer
}

Thật ấn tượng! Bạn đã thêm một bóng đổ vào cạnh trái của bề mặt màu trắng phía sau các mục trong danh sách hình ảnh, để các mục này xuất hiện hơi nổi lên phía trên phần điều hướng.

Tiếp theo, hãy thay đổi bố cục để hiển thị hình ảnh ở nhiều tỷ lệ khung hình và kích thước, sao cho mỗi hình ảnh trông khác biệt so với những hình ảnh khác.

Sửa đổi HTML

Trong home.html, hãy cập nhật phần tử mdc-image-list để chứa lớp mdc-image-list--masonry:

<ul class="mdc-image-list mdc-image-list--masonry product-list">

Thêm hình ảnh

Trong home.html, hãy thay đổi thuộc tính src của từng phần tử img để khớp với hình ảnh trong thư mục assets. Sau đó, hãy cập nhật văn bản nhãn cho từng hình ảnh. Sau khi hoàn tất, mã này sẽ có dạng như sau:

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

Cập nhật CSS

Trong home.scss, hãy xoá mixin mdc-image-list-standard-columns(4) và thay thế bằng mixin sau:

@include mdc-image-list-masonry-columns(4);

Sau đó, hãy thêm các giá trị padding sau đây vào lớp product-list trong home.scss:

.product-list {
  ...
  padding: 80px 100px 0;
}

Mã của bạn bây giờ sẽ khớp với mã có trong thư mục complete/.

Màu sắc là một cách hiệu quả để thể hiện thương hiệu của bạn và một thay đổi nhỏ về màu sắc có thể ảnh hưởng lớn đến trải nghiệm người dùng. Để thử nghiệm, hãy xem Shrine sẽ trông như thế nào nếu bảng phối màu của thương hiệu hoàn toàn khác.

Sửa đổi CSS

Trong _variables.scss, hãy thay thế các biến mà bạn đã khai báo cho giao diện chính bằng các biến sau:

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

Trong login.scss, hãy xoá các mixin trong bộ chọn .username, .password. Nội dung sẽ có dạng như sau:

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

Ngoài ra, hãy xoá chế độ ghi đè mixin mdc-button-ink-color trong lớp .cancel:

Trong home.scss, hãy thêm quy tắc sau vào lớp .home:

background-color: $mdc-theme-background;

Trong bộ chọn .shrine-logo-drawer, hãy thay thế thuộc tính fill bằng màu on-primary:

.shrine-logo-drawer {
  ...
  fill: $mdc-theme-on-primary;
}

Tương tự, trong bộ chọn .shrine-title, hãy đặt thuộc tính color thành màu on-primary:

.shrine-title {
  ...
  color: $mdc-theme-on-primary;
}

Cuối cùng, hãy xoá mixin mdc-elevation đã dùng trước đó trong bộ chọn .shrine-body.

Tạo bản dựng và chạy. Giờ đây, giao diện mới sẽ xuất hiện trong trình duyệt của bạn.

Bây giờ, hãy chuyển đến http://localhost:8080/home.html để xem các thay đổi đối với trang home.html.

Giờ thì bạn đã tạo một ứng dụng giống với quy cách của nhà thiết kế.

Các bước tiếp theo

Giờ đây, bạn đã sử dụng các thành phần MDC sau: giao diện, kiểu chữ, độ nâng và hình dạng. Bạn có thể khám phá thêm các thành phần và hệ thống con trong Danh mục MDC Web.

Tôi đã hoàn thành lớp học lập trình này trong một khoảng thời gian hợp lý và không tốn nhiều công sức

Hoàn toàn đồng ý Đồng ý Không đồng ý cũng không phản đối Không đồng ý Hoàn toàn không đồng ý

Tôi muốn tiếp tục sử dụng Thành phần Material trong tương lai

Hoàn toàn đồng ý Đồng ý Không đồng ý cũng không phản đối Không đồng ý Hoàn toàn không đồng ý