そんなにデザインに凝る予定もないので styled-components で書こうと思っていたけど、少し触ってみたいという理由で MaterialUI を導入することにした。
前置き
Gatsby の公式で別のページにあった JS→TS のマイグレーション見たら手間がかかりそうだったのと、TypeScript で初期化について書かれていたのを見たので、結局やり直した。init の選択項目はほぼ一緒。
MaterialUI 導入
公式の手順に沿って導入していく
npm install @mui/material @emotion/react @emotion/styled
これであとは Component を import して使っていくだけ。
リセット CSS
リセット CSS も導入の手順が公式にありますが、MUI が提供しているものを使います。中身はnormalize.cssに近いらしい。ルートコンポーネントで MUI のリセット CSS を import して JSX 内にかくだけでいいようです。
// Index.tsx
import * as React from "react"
import CssBaseline from '@mui/material/CssBaseline';
import Box from '@mui/material/Box';
const IndexPage = () => {
return (
<main>
<CssBaseline />
<Box component="main">
</Box>
</main>
)
}
export default IndexPage
レスポンシブ対応とブレークポイント
sx という属性をコンポーネントに指定することでブレークポイントとして扱うことができる。
<AppBar component="nav">
<Box sx={{ p: { xs: 0, sm: 1}}}>
...
</Box>
</AppBar>
<Toolbar sx={{minHeight:{ xs: 32, sm: 56 }}}/>
CSS Modules
MUI コンポーネントの一部を上書きしたいので CSS Modules も使うことにした。いつもは styled-components を採用するけど、公式にも書いてあったのでなんとなく CSS Modules。使ったこともなかったし。
型宣言が見つかりません(ts2307)
import { link } from './module/link.module.css'
link コンポーネントの一部のスタイルを書き換えたかったので、link.module.css ファイルを作成し、import。しかし TypeScript のエラー。
モジュール './module/link.module.css' またはそれに対応する型宣言が見つかりません。
型宣言が見つからないということなので作ります。 /src/typings/css.d.ts ファイルを作成し下記のコードを記述
declare module '*.css'
これでエラーが消えました。