์ง์ง ์ด๋ฐ๊ฒ๋... ํฐ์คํ ๋ฆฌ ์์์ ์ฅ ์ค๋ฅ ๋๋ฌธ์ %_% ํ ๋ฒ ๋ค ๋ ๋ฆฌ๊ณ ๋ค์ ์ด๋ค...
์ง์ง ๋๋ฌด๋๋ฌด๋๋ฌด ์ด๋ฐ์ง๋ง..!!!! ๊ทธ๋๋ ์ด๋ป๊ฒ ํด ๋ค์ ์จ์ผ์ง ใ .,ใ ๋๋ ๋๋ฒ์งธ์ฐ๋๊ฑฐ์ง๋ง ์ฝ๋ ์ฌ๋์ ์ฒ์์ด๋๊น ์ฒ์์ฒ๋ผ ์จ์ผํด.... ์ง์ ํด..... ๋ถ๊ธ๋ถ๊ธ
์ผ๋จ ๋จธ์ฑํ๊ฒ๋ ๋ฐ๋ก ์ ๊ฒ์๊ธ์ chakra ui ๊ฐ ์ข๋ค๋ฉฐ ๊ธ์ ์ผ์ผ๋, (๊ทธ๋๋ ์์ผ๋ก ์ด์ ์ ํ๋ ๊ฒ๋ค์ ์ฐ๊ธด ํ ๊ฒ์.. ์ฐจํฌ๋ผ ์ข์์ฌ)
์๋ก์ด ํ๋ก์ ํธ์์ SSR ๋ฌธ์ ๋ก chakra๋ฅผ ์ฐ์ง ๋ชปํ๊ณ ์ด๋ฐ์ ๋ฐ ์ด์ ๋ก tailwind๋ฅผ ์ฐ๊ธฐ๋ก ํ์๋ค.
SSR(Server Side Rendering): ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง์ ์ ์ํ์ ๋ ์๋ฒ๊ฐ ์ฌ์ฉ์์๊ฒ ๋๋๋ง๋ HTML์ ์๋ตํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ๋ก ๋๋๋งํ ์ ์๊ฒํ๋ค. ๊ทธ ํ CSR๊ณผ ๋์ผํ๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ๊ณ ์คํํ๋ค.
CSR(Client Side Rendering): ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง์ ๋ค์ด์์ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ ํด์ํ ํ ๋๋๋งํ๋ค.
๊ทธ๋ฐ๋ฐ ์ง๊ธ๊น์ง ์จ์๋ styled-component๋, emotion ๊ณผ๋ ๋ค๋ฅด๊ฒ
์กฐ๊ธ ์ ์์ด ํ์ํ ๋ฏ ์ถ์ด ์ผ๋ฅธ ์ ๋ฆฌ๊ธ์ ๊ฐ์ง๊ณ ์๋ค.
์ผ๋จ ํ์ฌ ๊ฐ๋ฐํ๊ฒฝ์ ๋ง๊ฒ next.js ์ typescript๋ฅผ ์ ์ฉํ ์ฐ์ต์ฉ ํ๋ก์ ํธ๋ฅผ ํ๋ ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค.
๐จ ์ค์น
typescript
yarn create next-app --typescript
npx create-next-app@latest --typescript
์ด๋ ๊ฒ ์งํํด์ฃผ๋ฉด, ์ ์ ํด๋ดค๋ฏ ์ด๋ฐ ์ ๋ฐ ์ง๋ฌธ์ด ๋์ค๋๋ฐ, ์ด๋ ๋ tailwind ์ธ๊ฑฐ๋? ํ๊ณ ๋ฌผ์ด๋ดค๋ค.
์ค์ ์๋๋ ๋ฌผ์ด๋ดค์๋? ใ ใ ใ ใ ๊ธฐ์ต์ด ์๋๋๋ฐ ์๋ ๋งํผ ๋ณด์ด๋ ๊ฑด๊ฐ๋ณด๋ค ํ๊ณ yes!ํด์ฃผ์์
์๋๋ npm install -D tailwindcss postcss autoprefixer ์ ์ด์ฉํด์ tailwind๋ฅผ ๊น์์ฃผ์ด์ผ ํ๋๋ฐ,
์๋์กฐ๋ ์์ํ๋๋ ์ ๊น๋ ธ๋ค. ํน์ ๋ชฐ๋ผ ์์ ์ธ์คํจ์ ํด๋ณด์๋๋ ๋๊ฐ์ ๊ฐ์์ ํ์ผ์ update ์ฒดํฌ ํ๋๊ฑฐ ๋ณด๋
์๋ง ์ ๊ฒ๋ง์ผ๋ก๋ ์ ๊น๋ฆฐ ๊ฒ ๊ฐ๋ค.
TailwindCss ๋ก ์ด๊ธฐํ
npx tailwindcss init -p
์ด๋ ๊ฒ ํด์ฃผ๋ฉด, tailwind.config.js ์ postcss.config.js ํ์ผ์ด ์์ฑ๋๋ค.
tailwind.config.js ํ์ผ content ์์ ๊ฒฝ๋ก ์ถ๊ฐ
// ์ฒ์ ์์ฑํ ๋ src๋ก ์ํ์ผ๋ฉด
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./app/**/*.{js,ts,jsx,tsx}",
"./pages/**/*.{js,ts,jsx,tsx}",
"./components/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
//์ฒ์ ์์ฑํ ๋ src๋ก ํ์ผ๋ฉด
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./src/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
globals.css ์๋จ์ ์ถ๊ฐ
@tailwind base;
@tailwind components;
@tailwind utilities;
โ ๏ธ ์ค๋ฅ
tailwindcss๋ฅผ ์ค์นํ๊ณ ๋์ ๊ธฐ๋ณธ์ ์ธ ์ค์ ๋ค์ ํ๊ณ ๋ฌ๋๋ฐ ์๋ ๊ฒฝ๊ณ ๊ฐ ๋ด๋ค.
Unknown at rule @tailwind css
์ฐพ์๋ณด๋ vscode์์๋ ํ๋ฌ๊ทธ์ธ - PostCSS Language Support ๋ฅผ ์ค์นํ๋ฉด ๋ ์ด์ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ๋ณด์ด์ง ์๋๋ค๊ณ .
์์ํ๊ธฐ์ ์, ์ด๊ฒ ์ ๊ฒ ๋ง์ ธ๋ณด๋ฉด์ ์ฝ๋๋ฅผ ์น๋ ์ค์,
์๋์์ฑ์ด ์๋ผ์ ๋ถํธํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.. ๋นจ๋ฆฌ๋ ๊นจ๋ฌ์์ง .. ใ
๋ค๋ฅธ css๋ ์คํ๊ฐ ๋๋ ๋น๊ต์ ํ๋์ ํฐ๊ฐ ๋๋๋ฐ ๊ณ ์ ์ํ๋ฒณ ๋ช ๊ธ์๋ก ์์ฑ์ ํ๋จํ๋ ์ด ์น๊ตฌ๋
๋ฐ์ ์๋์์ฑ์ด ๋ ์ฃผ์ง ์์ผ๋ฉด ๊ณ ํต์ค๋ฝ๋ค๋ ๊ฒ์ ๋๊ผ์... (bg๋ฅผ bd๋ก ์ฐ๊ณ ๋ ํ ๋์ ๋ค์ด์ค์ง๊ฐ ์์๋ค..)
Tailwind CSS IntelliSense ๋ผ๋ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ฃผ๋ฉด,
์ง์ง๋ก ํธ์ํด์ง๋ค......
๐ซฅ ์ฌ์ฉํ๊ธฐ
return (
<>
<nav className="bg-gray-800 p-3 flex justify-start">
<img className="w-10 px-1" src="logo.svg.png" />
<a className=" text-gray-300 p-3">Team</a>
<a className=" text-gray-300 p-3">Projects</a>
<a className=" text-gray-300 p-3">Calendar</a>
</nav>
<div className="p-3">
<input className="p-2 border border-gray-300 rounded-md" placeholder="Email" />
<button className="py-2 px-4 ml-3 rounded-md text-white bg-indigo-600">Sign In</button>
</div>
</>
);
์๋ฐ ๋๋์ผ๋ก ์ ์ด์ฃผ๋ฉด ๋จ.
์๋๋ ํด๋์ค๋ค์ ์ ํ๊ณ , ๋ CSSํ์ผ์๋ค๊ฐ ๋ง๋ค๊ฑฐ๋ ์คํ์ผ์ปดํฌ๋ํธ๋ก ๋ฐ๋ก ๋นผ์ ํด์ฃผ์๊ฒ ์ง๋ง,
์ด๊ฑด className๋ถ๋ถ์๋ค๊ฐ ๋ด๊ฐ ์ํ๋ CSS๋ฅผ ๊ฐ๋จํ ๋ชจ์์ผ๋ก ๊ตฌ๊ตฌ์ ์ (๋ชจ์ใ ใ ) ์ ์ด์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
๋ฑ ๋ณด๋ฉด ๋๋ฌด ์ง๊ด์ ์ด๊ณ ์ด๋์ ์ด๋ค CSS๋ฅผ ์ถ๊ฐํ๋์ง ๋จ๋ฒ์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
๊ทผ๋ฐ ๋ด์ฉ์ด ๋ง์์ง๋ฉด ๋ง์์ง์๋ก ๋ฑ ๋ณด์์ ๋ ์ข ์ง์ ๋ถํด ๋ณด์ผ ์ ์๋ค๋ ๋จ์ ์ด ์์...
๊ทธ๋ด ๋ global.css ์ ์๋์ฒ๋ผ ์ ์ด์ฃผ๊ณ ,
@layer components {
.header_text {
@apply text-yellow-300 p-3 underline;
}
}
...
<a className="header_text">Team</a>
<a className="header_text">Projects</a>
<a className="header_text">Calendar</a>
...
ํด๋น className์ ๋ฃ์ด์ฃผ๋ฉด!
์ฝ๊ฒ ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฌ๋ ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด ์ง์ ๋ถํด์ง๊ฑฐ๋, ์๋๋ฉด ๊ฐ์ css๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ ๋
์ ๋ ๊ฒ ๋ฌถ์ด๋๊ณ ํ์ํ ๋๋ง๋ค ๊บผ๋ด์ฐ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.!
https://tailwindcss.com/docs/flex-basis
Flex Basis - Tailwind CSS
Utilities for controlling the initial size of flex items.
tailwindcss.com
์ฐธ๊ณ !
๐ ํ๋ก์ ํธ
tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
],
theme: {
extend: {
colors: {
'sub-bg-color': '#262634',
'point-color': "#FBAB10",
},
backgroundImage: {
'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
'gradient-conic':
'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
},
},
},
plugins: [],
}
์ฌ๊ธฐ์ ์ ์ญ์ผ๋ก ์ค์ ํด ๋์ css๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ ์ดํด๋ณด๋ฉด
<aside
id={"IssueSideMenu"}
className={" flex flex-col items-center bg-sub-bg-color w-72"}
>
์ด๋ฐ์์ผ๋ก bg์ extend.color ์ ๋ค์์ ์ ์ด์ฃผ์ด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ปค์๋ฅผ ์ฌ๋ ค๋ณด๋ฉด ์ด๋ค ๊ฒ์ ์๋ฏธํ๋์ง ์์ธํ ์ค๋ช ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ ๋๋ ์์ ์๊ฒ ์จ์์
์์ํ์ง๋ง ์ต์ํด์ ธ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ๋๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ...

'TIL > etc.' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] Switch (feat. tanstack table) (0) | 2023.06.28 |
---|---|
[TIL] tailwind๋ฅผ ์ด์ฉํด ์คํ์ผ ์ฌ์ฌ์ฉํ๊ธฐ (feat. @layer, @apply) (0) | 2023.06.19 |
[TIL] Chakra UI (4) | 2023.05.23 |
[TIL] MongoDB (0) | 2023.05.20 |
[TIL] ์ด๋ฏธ์ง ์ ๋ก๋ ๊ตฌํ (0) | 2023.05.20 |