npx create-next-app@latest --typescript
➜ airbnb-video git:(main) tree -L 1
.
├── README.md
├── app
├── next-env.d.ts
├── next.config.js
├── node_modules
├── package-lock.json
├── package.json
├── public
└── tsconfig.json
3 directories, 6 files
npm run dev
http://localhost:3000にアクセスする
次にテキストを表示させてみます。次のファイルのretrunの中身を全て削除しdivタグでテキストを表示させてみましょう。
import Image from 'next/image'
import { Inter } from 'next/font/google'
import styles from './page.module.css'
const inter = Inter({ subsets: ['latin'] })
export default function Home() {
return (
<div>Hello Airbnb!</div>
)
}
http://localhost:3000を再度確認すると、divタグ内のテキストが表示されているのが確認できます。
次にブラウザのタブに表示されるテキストを変更してみましょう。
初期設定では「Create Next App」と表示されていますが、このテキストはapp/layout.tsx
に記述されています。
import './globals.css'
export const metadata = {
title: 'Create Next App',
description: 'Generated by create next app',
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body>{children}</body>
</html>
)
}
上記ファイルの4行目にCreate Next App
の記述がありますね。
ここを以下のように変えてみましょう。description
も併せて変えておきます。
import './globals.css'
export const metadata = {
title: 'Airbnb',
description: 'Airbnb clone',
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body>{children}</body>
</html>
)
}
これで再度http://localhost:3000/を読み込んでみると、
次にHello Airbnb!
のフォントの種類を変えてみましょう。
引き続き同じファイルapp/layout.tsx
に修正を加えていきます。
以下のように、修正を加えます。
- 2行目
import { Nunito } from "next/font/google"
:GoogleFont の Nunito を読み込む - 9行目〜
const font = Nunito({ ...
:ラテン語の書体をセットする - 20行目
<bady className={font.className}>
:上記で設定した書体をページのスタイルに適用させる
import './globals.css'
import { Nunito } from "next/font/google"
export const metadata = {
title: 'Airbnb',
description: 'Airbnb clone',
}
const font = Nunito({
subsets: ["latin"],
})
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body className={font.className}>{children}</body>
</html>
)
}
ページを再読み込みすると、フォントがGoogleFontのNunitoに変わります。
ここで、スタイルをプレーンの状態にするために、app/globals.css
の内容を削除して初期設定で設定されているスタイルを無くしてしまいましょう。
また、app/page.module.css
は、ファイルごと削除してしまいましょう。
app/globals.css
はファイルを後で使うので内容を削除、app/page.module.css
は使用しないのでファイルごと削除です。
今回は、tailwindでスタイルをあてていくので、ここからは公式サイトの説明の通りtailwindの設定を行っていきましょう。
まずは、必要なパッケージをインストールします。
次の公式サイトにコマンドを書いてあるので、そのまま実行しましょう。
https://tailwindcss.com/docs/guides/nextjs
npm install -D tailwindcss postcss autoprefixer
これで、package.json
とpackage-lock.json
にtailwindcss
とpostcss
とautoprefixer
のパッケージに関する記述が追記されます。
tailwindと一緒にインストールしているpostcss
とautoprefixer
については調べてみてください。
引き続き、上記サイトにあるコマンドを実行して、tailwindとpostcssの設定ファイルを作成します。
npx tailwindcss init -p
これで、tailwind.config.js
とpostcss.config.js
が作成されます。
次にtailwindの設定を追加しましょう。(これも公式サイト書いています。)
tailwind.config.js
を開いて、以下のようにcontentの内容を追加します。
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./app/**/*.{js,ts,jsx,tsx,mdx}",
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
"./components/**/*.{js,ts,jsx,tsx,mdx}",
],
theme: {
extend: {},
},
plugins: [],
}
次に、app/globals.css
を修正します。
@tailwind base;
@tailwind components;
@tailwind utilities;
ここまでの設定が終わったら、npm run dev
コマンドを再度実行し、ページを確認してみましょう。
padding が変わっていると思いますが、これまで表示されていたHello Airbnb!
がエラーなく表示されていればOKです。
これでtailwindの設定が完了したので、試しにテキストに色を設定しましょう。
app/page.tsx
を開いて以下のように、9行目を修正します。
import Image from 'next/image'
import { Inter } from 'next/font/google'
import styles from './page.module.css'
const inter = Inter({ subsets: ['latin'] })
export default function Home() {
return (
<div className="text-rose-500 text-2xl">Hello Airbnb!</div>
)
}
これでページを確認するとテキストHello Airbnb!
の色と大きさが変わっていると思います。
全体に適用させたいスタイルについても試しに設定してみましょう。
app/globals.css
を開いて以下のように5行目以降を追加してください。
@tailwind base;
@tailwind components;
@tailwind utilities;
html,
body,
:root {
height: 100%;
}
ここからは、ナビゲーションバーを作成していきましょう。
app/layout.tsx
にNavbar
のコンポーネントを追加します。
以下のコードのように<Navbar />
を追加します。
(Navbarコンポーネントがないので現時点ではエラーになります)
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body className={font.className}>
<Navbar />
{children}
</body>
</html>
)
}
次のNavbarコンポーネントの実物を作成していきます。
app/components/navbar/Nabvar.tsx
を作成します。
app
ディレクトリ以下の存在しないディレクトリについては適宜作成してください。
const Navbar = () => {
return (
<div>
I am a Navbar!
</div>
)
}
export default Navbar;
このNavbar.tsx
をlayout.tsx
に読み込ませる必要があるため、以下の3行目のようにapp/layout.tsx
にファイルをimport
する記述を追加します。
import './globals.css'
import { Nunito } from "next/font/google"
import Navbar from './components/navbar/Nabvar'
export const metadata = {
title: 'Airbnb',
description: 'Airbnb clone',
}
これで先ほど、app/layout.tsx
に追加したNavbar
コンポーネントの実物ができたので画面を更新すると、Navbar
が表示されるはずです。
次にNavbarなので画面の上部に固定されるようにtailwindによってスタイルを適用させてみましょう。
以下のようにNavbarコンポーネントのdivタグにスタイルを追加します。
const Navbar = () => {
return (
<div className="fixed w-full bg-white z-10 shadow-sm">
I am a Navbar!
</div>
)
}
export default Navbar;
これによりdivタグの要素には次のスタイルが適用されます。
- fixed:
- w-full:
- bg-white:
- z-10:
- shadow-sm:
Nabvar
が画面上部に固定されたので、Hello Airbnb!
のテキストがNavbar
の後ろに隠れた形になります。
ここまでで、ナビケーションバーの土台を作成することができたので、次回はこれを完成させていこうと思います。