ํฌํธํด๋ฆฌ์ค๋ฅผ ๋จ์ํ ํ ์คํธ๋ก ์ฝ๊ธฐ๋ณด๋ค๋ ์น ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ธ ๋งํผ ์นํ์ด์ง๋ก ๋ง๋ค์ด์ ๋ฐฐํฌํ๊ณ ๊ฒ์์์ง์ ์ํด ๊ฒ์๋๋๋ก ๋ง๋ค์ด๋ณด๊ณ ์ถ์ด์ ๊ฐ๋ฐ์ ์์ํ์ต๋๋ค.
์ฃผ ๋ชฉ์ ์ SEO
๋ฅผ ์ํด์๊ณ ์ถ๊ฐ์ ์ผ๋ก ๊ฐ์ข
ํธ์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ ํํ์ต๋๋ค.
์ฌํ๊น์ง styled-components
์ tailwindcss
๋ ๊ฐ์ง ๋ฐ์ ์ฌ์ฉํด๋ณด์ง ์์์ง๋ง tailwindcss
๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋๋๊ฒ ์ด๊ฒ๋ณด๋ค ๋ ํธํ๊ณ ์ฝ๊ณ ์ข์ css๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ ์์ํฌ๊ฐ ์์๊ฑฐ๋ผ๋ ์๊ฐ์ ํ์์ ๋๋ก ๋๋ฌด ํธํ๊ณ ์ข์์ ์ ํํ์ต๋๋ค.
์์ผ๋ก๋ ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด tailwindcss
๋ฅผ ์ด์ฉํ ์๊ฐ์
๋๋ค.
๊ฐ๋ฐ์ ์งํํ ๋๋ ๊ฐ๋ฐ ์๋ฃ ํ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ ๋๋ JavaScript
๋ณด๋ค ๋ ํธํ๊ธฐ ๋๋ฌธ์ ์ ํํ์ต๋๋ค.
# ์ค์น
npm i -D tailwindcss postcss autoprefixer
# postcss.config.js์ tailwind.config.js ์์ฑ
npx tailwindcss init -p
tailwind.config.js
์ ์๋ ๊ฐ ์ถ๊ฐmodule.exports = {
content: ["./src/pages/**/*.{ts,tsx}", "./src/components/**/*.{ts,tsx}"],
}
globals.css
( _app.tsx
์์ import
ํ๋ css
ํ์ผ ) ์์ @tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
/* ํฐํธ ์ค์ ( _document์์ importํด์ค ์ด๋ฆ ์ฌ์ฉ ) */
html {
font-family: 'Jua', sans-serif;
}
/* ์คํฌ๋กค ์ ๊ฑฐ */
body::-webkit-scrollbar {
display: none
}
}
module.exports = {
// ... ์๋ต
theme: {
extend: {
// ์์ ๋ฑ๋ก
colors: {
// ์ํ๋ ์ด๋ฆ๊ณผ ์์ ๋ฑ๋ก ( ์๋์์ฑ๋จ )
trello: "#1A76E3",
},
// ์ด๋ฏธ์ง ๋ฑ๋ก
backgroundImage: {
// ์ํ๋ ์ด๋ฆ๊ณผ ์ด๋ฏธ์ง ๊ฒฝ๋ก ์ง์ ( ์๋์์ฑ๋จ )
me: "url('/me.jpg')",
},
// ํคํ๋ ์ ์ง์
keyframes: {
"appear": {
"0%": { opacity: 0 },
"100%": { opacity: 1 },
},
},
// ์ ๋๋ฉ์ด์
๋ฑ๋ก
animation: {
"appear": "appear 1.6s ease-in forwards",
},
},
},
plugins: [],
};
import Document, { Head, Html, Main, NextScript } from "next/document";
class CustomDocument extends Document {
render(): JSX.Element {
return (
<Html lang="ko">
<Head>
{/* ํ๋น์ฝ */}
<link rel="shortcut icon" href="/favicon.ico" />
{/* SEO */}
<meta name="keyword" content="ํ๋ก ํธ์๋, ํฌํธํด๋ฆฌ์ค" />
<meta name="description" content="1-blue์ ํฌํธํด๋ฆฌ์ค" />
{/* ์์ฑ์ */}
<meta name="author" content="1-blue" />
{/* ๋ฌธ์ */}
<meta httpEquiv="Content-Type" content="text/html; charset=utf-8" />
{/* ์นด์นด์คํก, ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ ๊ณตํ ์ ๋ณด */}
<meta property="og:type" content="website" />
<meta property="og:site_name" content="1-blue_portfolio" />
<meta property="og:locale" content="ko_KR" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="600" />
<meta property="og:title" content="1-blue์ ํฌํธํด๋ฆฌ์ค" />
<meta property="og:description" content="1-blue์ ํฌํธํด๋ฆฌ์ค" />
<meta
property="og:url"
content={`https://${process.env.NEXT_PUBLIC_VERCEL_URL}`}
/>
<meta
property="og:image"
content={`https://${process.env.NEXT_PUBLIC_VERCEL_URL}/me.jpg`}
/>
{/* ๊ตฌ๊ธ ํฐํธ */}
{/* "jua" - https://fonts.google.com/specimen/Jua?subset=korean#standard-styles */}
<link
href="https://fonts.googleapis.com/css2?family=Jua&display=swap"
rel="stylesheet"
/>
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
}
export default CustomDocument;
tsconfig.json
{
"compilerOptions": {
// ... ์๋ต
"baseUrl": ".",
"paths": {
// ์ฌ๊ธฐ์ ์ํ๋ ์ด๋ฆ๊ณผ ์ค์ ๊ฒฝ๋ก ๋ฑ๋ก
"@src/*": ["src/*"]
}
},
// ... ์๋ต
}