⑩app/layout.tsxの編集
全ページ共通のレイアウトを決めるapp/layout.tsxでは以下の項目を指定する
・ フォント
・ サイトタイトルとDescription
・ ヘッダーとフッターとChildren のレイアウト
import type { Metadata } from "next";
import { Fredoka } from "next/font/google";
import { SiteFooter } from "@/components/site-footer";
import { SiteHeader } from "@/components/site-header";
import { LeftSidebar } from "@/components/left-sidebar";
import { RightSidebar } from "@/components/right-sidebar";
import "./globals.css";
const sans = Fredoka({
variable: "--font-fredoka",
subsets: ["latin"],
weight: ["400", "500", "600", "700"],
});
#####
google fontをインポートして読み込んでいる
デフォルトだとNoto_Sans_JPやShippori _Minchoを読み込むが、
英語で記事を書くなら英語フォントに変えること
#####
export const metadata: Metadata = {
title: {
default: "JP MONEY",
template: "%s | JP MONEY",
},
description: "Share tips on Japanese taxes and personal finance",
};
#####
Next.jsにはMetadataという型があり、サイトのタイトルや説明文を設定するのに使う
それをimport type { Metadata } from "next"; でインポートし、
export const metadata: Metadata = で設定する
template: "%s | JP MONEY"の「%s」には、
記事ページ側で title: "記事タイトル" と設定したら、
記事タイトル | JP MONEY というタイトルになる
#####
export default function RootLayout({ children }: LayoutProps<"/">) {
return (
<html
lang="en"
className={`${sans.variable} ${serif.variable} h-full antialiased`}
>
<body className="flex min-h-full flex-col bg-background font-sans text-foreground">
<SiteHeader />
<div className="mx-auto grid w-full max-w-7xl grid-cols-1 gap-8 px-6 py-12 lg:grid-cols-[220px_minmax(0,1fr)_220px]">
<aside><LeftSidebar /></aside>
<main className="w-full flex-1 px-6 py-12">{children}</main>
<aside><RightSidebar /></aside>
</div>
<SiteFooter />
</body>
</html>
);
}
#####
ヘッダー(SiteHeader)とフッター(SiteFooter)が全ページの共通部分としてあり
その間に挟まっている{children}がページごとに入れ替わる部分を示す
posts/welcome.mdxの内容が{children}に入る
<SiteHeader />にはcomponents/site-header.tsxの内容が表示される
海外にいる外国人にサイトを見てもらいたいなら、
<html lang="en">にすべき
また、<html className={`${sans.variable}`}>として、
HTMLタグにフォントクラスをつけること
パソコンでは3カラム、スマホでは1カラムのレスポンシブデザインにしたいので、
<main className>の"mx-auto max-w-3xl"は
メイン部分の最大幅をかなり狭くする設定なので外す
<main>の周りに<LeftSidebar />と<RightSidebar />をつけてから、
import { LeftSidebar } from "@/components/left-sidebar";
import { RightSidebar } from "@/components/right-sidebar";
とする
最後に、<div className="省略">で3列、1列のレスポンシブを作る
#####
BACK