Next.js で、すべてのページコンポーネント (pages/*.tsx
) に共通のスタイルシート(いわゆるグローバル CSS)を適用したい場合は、pages/_app.tsx(js)
というファイルを作成して、そこで CSS ファイルをインポートします。
例えば、グローバル CSS として次のようなファイルを用意したとします。
* {
box-sizing: border-box;
}
html {
margin: 0;
padding: 0;
}
body {
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
max-width: 50rem;
padding: 0.5rem;
margin: 0 auto;
font-size: 100%;
}
a {
color: inherit;
text-decoration: none;
}
この CSS ファイルを pages/_app.tsx
からインポートすれば、すべてのコンポーネントにスタイルが反映されます。
このファイルが存在しない場合は作成してください。
import type { AppProps } from 'next/app'
import '../styles/global.css'
export default function MyApp({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />
}
☝️ pages/_app.tsx って何者?
Next.js は
pages/_app.tsx
を特殊なファイルとして扱い、ここで default export
しているコンポーネントを、すべてのページコンポーネントの親コンポーネントとして扱います。
具体的には、上記コード中の Component
部分が各ページのコンポーネントに置き換えられた形で動作します。
結果的に、ここでインポートした CSS が、全ページから参照できることになります。
ちなみに、ここで複数の CSS ファイルをインポートしている場合は、Next.js が Web サイトのビルド時に 1 つの CSS ファイルにマージしてくれます。Bootstrap や Tailwind CSS などの CSS フレームワークを使いたい場合も、この pages/_app.tsx
ファイルでインポートすれば OK です。
関連記事
- Next.js で Sass (scss/sass) を有効にする
- Next.js でコンポーネント単位の CSS を作成する (CSS Modules)
- Next.js の Image コンポーネントで画像を表示する (next/image)
- Next.js の API Routes 機能で Web API を作成する
- Next.js のダイナミックルーティング機能を利用する (getStaticPaths, getStaticProps, getServerSideProps)
- Next.js でコンポーネント内に直接 CSS を記述する (styled-jsx)
- Next.js で全ページ共通のレイアウトを定義する(Layout コンポーネント)