Mokelab Blog

MDC でよく使われる部品

前回は Material Design Components for Web の導入方法について説明しました。今回は MDC で用意されている部品の中から、アプリ開発でよく使われるものについて説明します。

TextField

TextField は入力欄を提供するコンポーネントです。input 要素を装飾してくれます。

インストール

$ npm install @material/textfield

HTML

<div class="mdc-text-field">
  <input type="text" id="blog-title" class="mdc-text-field__input" />
  <label class="mdc-floating-label" for="blog-title">ブログタイトル</label>
  <div class="mdc-line-ripple"></div>
</div>

scss

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

TypeScript

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

const textField = new MDCTextField(document.querySelector('.mdc-text-field')!);

表示

フォーカスがあたるとヒント部分がアニメーションします。

Checkbox

ユーザーに複数項目から選択をさせるときに使います。「3つの選択肢のうち 1つだけ選ぶ」というような場面では使用しません。

インストール

$ npm install @material/checkbox

HTML

<div class="mdc-form-field">
    <div class="mdc-checkbox">
    <input
        type="checkbox"
        class="mdc-checkbox__native-control"
        id="keep-login"
    />
    <div class="mdc-checkbox__background">
        <svg class="mdc-checkbox__checkmark" viewBox="0 0 24 24">
        <path
            class="mdc-checkbox__checkmark-path"
            fill="none"
            d="M1.73,12.91 8.1,19.28 22.79,4.59"
        />
        </svg>
        <div class="mdc-checkbox__mixedmark"></div>
    </div>
    <div class="mdc-checkbox__ripple"></div>
    </div>
    <label for="keep-login">ログイン状態を維持する</label>
</div>

scss

@import "@material/form-field/mdc-form-field";
@import "@material/checkbox/mdc-checkbox";

TypeScript

import { MDCFormField } from "@material/form-field";
import { MDCCheckbox } from "@material/checkbox";

const checkbox = new MDCCheckbox(document.querySelector(".mdc-checkbox")!);
const formField = new MDCFormField(document.querySelector(".mdc-form-field")!);
formField.input = checkbox;

表示

チェック時にアニメーションします。

Select

複数の選択肢から 1 つを選んでもらう時に使用するコンポーネントです。同様の機能を提供するものとしてラジオボタンもありますが、画面の狭いモバイル環境を考慮すると、この Select を使用する場面は多いでしょう。

インストール

$ npm install @material/select

HTML

<div class="mdc-select">
    <div class="mdc-select__anchor demo-width-class">
    <i class="mdc-select__dropdown-icon"></i>
    <div class="mdc-select__selected-text"></div>
    <span class="mdc-floating-label">使用しているOS</span>
    <div class="mdc-line-ripple"></div>
    </div>

    <div class="mdc-select__menu mdc-menu mdc-menu-surface demo-width-class">
    <ul class="mdc-list">
        <li
        class="mdc-list-item mdc-list-item--selected"
        data-value=""
        aria-selected="true"
        ></li>
        <li class="mdc-list-item" data-value="android">
        Android
        </li>
        <li class="mdc-list-item" data-value="ios">
        iOS
        </li>
        <li class="mdc-list-item" data-value="windows">
        Windows
        </li>
    </ul>
    </div>
</div>

scss

@import "@material/list/mdc-list";
@import "@material/menu-surface/mdc-menu-surface";
@import "@material/menu/mdc-menu";
@import "@material/select/mdc-select";

// デモ用
.demo-width-class {
    width: 400px;
}

TypeScript

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

const select = new MDCSelect(document.querySelector(".mdc-select")!);

表示

mdc-floating-label がついている部分はラベルになります。

Button

ユーザーにクリックしてもらうためのボタンを提供するコンポーネントです。平面なボタンと盛り上がっているボタンの 2 種類があります。

インストール

$ npm install @material/button

HTML

<button class="mdc-button">
    <div class="mdc-button__ripple"></div>
    <span class="mdc-button__label">詳細を表示</span>
</button>

scss

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

TypeScript

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

const buttonRipple = new MDCRipple(document.querySelector(".mdc-button")!);

表示

タップするとリップルエフェクトがかかります。

まとめ

MDCで提供されている部品の内、Web アプリ開発でよく使われる部品について説明しました。他にもたくさん部品は用意されているので、公式サイトを見てみましょう。

本サイトではサービス向上のため、Google Analyticsを導入しています。分析にはCookieを利用しています。