まず、すべてのページで共有されるLayoutコンポーネントを作成しましょう。
components
という最上位ディレクトリを作成します。components
の中に、次の内容でlayout.js
というファイルを作成します。export default function Layout({ children }) {
return <div>{children}</div>;
}
次に、pages/posts/first-post.js
を開き、Layout
コンポーネントをインポートし、最も外側のコンポーネントにします。
import Head from 'next/head';
import Link from 'next/link';
import Layout from '../../components/layout';
export default function FirstPost() {
return (
<Layout>
<Head>
<title>First Post</title>
</Head>
<h1>First Post</h1>
<h2>
<Link href="/">← Back to home</Link>
</h2>
</Layout>
);
}
次に、Layout
コンポーネントにいくつかのスタイルを追加しましょう。そのためには、CSS Modulesを使用します。これにより、ReactコンポーネントでCSSファイルをインポートできます。
components/layout.module.css
というファイルを次の内容で作成します。
.container {
max-width: 36rem;
padding: 0 1rem;
margin: 3rem auto 6rem;
}
重要: CSS Modulesを使用するには、CSSファイル名が
.module.css
で終わる必要があります。
components/layout.js
内でこのcontainer
クラスを使用するには、次の操作が必要です。
styles
のような名前を割り当てますstyles.container
をclassName
として使用しますcomponents/layout.js
を開き、その内容を次のように置き換えます。
import styles from './layout.module.css';
export default function Layout({ children }) {
return <div className={styles.container}>{children}</div>;
}
今、https://:3000/posts/first-postにアクセスすると、テキストが中央揃えのコンテナ内にあることが確認できるはずです
ここで、ブラウザの開発者ツールでHTMLを見ると、Layout
コンポーネントによってレンダリングされたdiv
には、layout_container__...
のようなクラス名があることに気付くでしょう。
これがCSS Modulesが行うことです。一意のクラス名を自動的に生成します。CSS Modulesを使用している限り、クラス名の衝突を心配する必要はありません。
さらに、Next.jsのコード分割機能はCSS Modulesでも機能します。これにより、各ページでロードされるCSSの量が最小限に抑えられます。これにより、バンドルサイズが小さくなります。
CSS Modulesはビルド時にJavaScriptバンドルから抽出され、Next.jsによって自動的にロードされる.css
ファイルを生成します。
簡単な復習: CSS Modulesを使用するメリットの1つは何ですか?