ν΄λΉ κ²μκΈμ
(1) TailwindCSS κ°μ
(2) TailwindCSS μ μ© λ°©λ²
μ λν λ΄μ©μ λ΄κ³ μμ΅λλ€.
μ΄μ κ²μκΈ - μ μ μΆμλ SvelteKit μΌλ‘ κ°λ° νκ²½μ ꡬμ±ν΄λ³΄κ² μ΅λλ€! #2
μ μ μΆμλ SvelteKit μΌλ‘ κ°λ° νκ²½μ ꡬμ±ν΄λ³΄κ² μ΅λλ€! #2
ν΄λΉ κ²μκΈμ (1) SvelteKit κ°μ (2) SvelteKit μ€μΉ λ°©λ² μ λν λ΄μ©μ λ΄κ³ μμ΅λλ€. μ΄μ κ²μκΈ - μ νν Svelte μμ? μ λ 곡λΆν΄λ³ΌκΉμ? #1 μ νν Svelte μμ? μ λ 곡λΆν΄λ³ΌκΉμ? #1 ν΄λΉ κ²μ
gngb-tech.tistory.com
ch1 - TailwindCSS λ?
TailwindCSS κ° λμμ? μ μ¬μ©νλ κ±°μμ?
CSS Framework
Frontend κ°λ°μλΌλ©΄, λ€μν CSS κΈ°λ° Framework μ λν κΈ°λ° μ§μκ³Ό μ¬μ© κ²½νμ΄ μ΄λ―Έ μΆ©λΆν κ²μ΄λΌκ³ μμλ©λλ€. CSS Framework λ HTML κΈ°λ°μ Web λ¬Έμλ₯Ό λμμΈν μ μλ CSS (Cascading Style Sheets) μΈμ΄λ₯Ό λμ± μλ¦λ΅κ², λ³΄λ€ μ½κ² μ¬μ©ν μ μλλ‘ λμμ£Όλ Tool μ λλ€. Frontend κ°λ°μκ° μλλλΌλ, 2011λ μ νΈμν°μ μν΄ κ°λ°λ Bootstrap μ λꡬλ νλ²μ―€ λ€μ΄λ΄€μ μ λλ‘ κ°μ₯ λνμ μΈ CSS Framework μ λλ€. κ·Έλ°λ°, μ΅κ·Ό ν΄λΉ λΆμΌμμ Bootstrap μ μ ν΅μ μΈ μμμ μνν μ λλ‘ MaterializeCSS μ TailwindCSS κ° μΈκΈ°λ₯Ό μ»κ³ μλ κ²μΌλ‘ 보μ¬μ§λλ€. νΉν, TailwindCSS λ μλ 첨λΆλ μ΄λ―Έμ§μμ νμΈν μ μλ―μ΄, μ§λ 4λ κ° μ¬μ© λΉμ€μ΄ κΈκ²©νκ² μ¦κ°νμμ΅λλ€. κ°μΈμ μΌλ‘λ Frontend κ°λ°μκ° μλμλ λΆκ΅¬νκ³ , ν¬κ³ μμ κ°λ° νλ‘μ νΈμμ TailwindCSS κ° μΈκΈλλ κ²μ μμ°¨λ‘ μ΄κΉ¨λλ¨Έλ‘ λ³Έ κ²½νμ΄ μμ΅λλ€. μ΄μ²λΌ, TailwindCSS κ° Frontend μ κ³μμ κΈμλλ‘ μΈκΈ°λ₯Ό λ£μ λ°°κ²½μ κ°λ¨νκ² μ΄ν΄λ³΄κ³ , μ΄μ κ²μκΈμμ ꡬμΆνλ SvelteKit μ μ μ©νλ κ³Όμ μ μ§νν΄λ³΄κ² μ΅λλ€.
TailwindCSS νΉμ§
Frontend κ°λ° μ λ¬Έμλ‘μ CSS μ CSS Framework μ¬μ© κ²½νμ΄ λ§μ§ μκΈ° λλ¬Έμ κΉμ μμ€μΌλ‘ μ΄ν΄νλ€κ³ μμ ν μλ μμ§λ§, μ¬λ¬ λΈλ‘κ·Έ λ° μκ° μμμ ν΅ν΄ νμ ν TailwindCSS μ μ£Όμ νΉμ§μ μλμ κ°μ΅λλ€. (https://webartisan.info/the-pros-and-cons-of-tailwindcss κ²μκΈμ μλΉ λΆλΆ μ°Έκ³ νμμ΅λλ€.)
- Class μ μμ½μ΄λ‘ CSS μ΅μ μ μ§μ μ§μ ν μ μκΈ°λλ¬Έμ, λ³λμ Custom Class λͺ μΉμ μ§μ νλ €λ λ Έλ ₯μ νμ§ μμλ λλ€.
- Class μμ±μ CSS μμ μΈλΌμΈ λ°©μμΌλ‘ μ€νμΌλ§ν μ μκΈ° λλ¬Έμ κ°λ° ν¨μ¨μ΄ ν₯μλλ€. (λ¬Έμ μ νμ νμ§ μμλ λλ€.)
- 쑰건μ μ§μ νμ¬ λ³κ²½λλ μν©μ λ°λΌ μνλ λμμΈ μμμ μ½κ² μ μ©ν μ μλ€. (ex. λ€ν¬λͺ¨λ μ μ© μμ μ§μ λ±)
- μΌκ΄μ± μλ λμμΈ μμ€ν μ μ μ©νκΈ°μ μ 리νλ©°, CSS μ μ© μ°μ μμ (Override μ΄μ) μ λν κ³ λ―Όμ νμ§ μμλ λλ€.
- κ·ΈλΌμλ λΆκ΅¬νκ³ , CSS μ΄μ¬μ μ
μ₯μμλ
- μ§κ΄μ μ΄μ§ μμ λ¬Έλ²μΌλ‘ μΈνμ¬, λ¬λ 컀λΈκ° μ‘΄μ¬νλ€.
- CSS μ λν κΈ°λ³Έ μ리λ₯Ό νμ νλλ° λ°©ν΄κ° λ μ μλ€.
- λν, μ½ν μΈ (HTML) μ μ€νμΌ (CSS) μ κ΄μ¬μ¬ λΆλ¦¬ μμΉμ μλ°°λλ€.
μμ μ¬νλ€μ SvelteKit μ TailwindCSS λ₯Ό μ μ©ν μ΄νμ Web κ°λ° κ³Όμ μμ ꡬ체μ μΌλ‘ λ€λ£¨λλ‘ νκ² μ΅λλ€. (TailwindCSS μ κ°μ΄ Frontend λΆμΌμμ κ΄λ²μνκ² νμ©λ μ μλ μ¬νμ λ³΄λ€ λ©΄λ°νκ² μ 리νμ¬ μΆν, Frontend - Common λΆλ₯μ κ²μκΈμ μ λ‘λν μμ μ λλ€.)
ch2 - SvelteKit νκ²½μ μ μ©νλ λ°©λ²
SvelteKit νκ²½μ TailwindCSS λ₯Ό μ΄λ»κ² μ μ©νλμ?
μ€μΉ
μ΄μ κ²μκΈ (SvelteKit μ€μΉ) κ³Ό λ§μ°¬κ°μ§λ‘, Node.js κ° λ€μ΄λ‘λ λμ΄μλ μνκ° μ μ λ©λλ€. ν°λ―Έλμμ μλμ λͺ λ Ήμ΄λ₯Ό μ λ ₯νλ©΄ TailwindCSS λ₯Ό λ€μ΄λ‘λ λ°μ μ μμ΅λλ€. (κΈ°λ³Έμ μΈ μ€μΉκ³Όμ μ 곡μ λ¬Έμμ κ°μ΄λλΌμΈκ³Ό λμΌν©λλ€.) μ€μΉκ° μ μμ μΌλ‘ μ§νλμλ€λ©΄, μλ 첨λΆλ μ΄λ―Έμ§μ κ°μ΄ μλ‘κ² μκΈ΄ tailwind.config.cjs νμΌμ΄ μΆκ°λ κ²μ νμΈν μ μμ΅λλ€.
cd gngb-app
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init tailwind.config.cjs -p
tailwind.config.cjs μ μλμ μ½λλΈλκ³Ό κ°μ΄ μμ ν©λλ€.
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./src/**/*.{html,js,svelte,ts}'], // μΆκ° (λ³κ²½)
theme: {
extend: {}
},
plugins: []
};
μ΄ν, svelte.config.js νμΌμ μλμ μ½λλΈλκ³Ό κ°μ΄ μμ ν©λλ€. (<style> λΈλμμ PostCSS λ₯Ό μ¬μ©ν μ μλλ‘ λ§λ€λ μ€μ μ΄λ©°, PostCSS λ Javascript μ νλ¬κ·ΈμΈμΌλ‘μ CSS νμ²λ¦¬κΈ° μν μ μνν©λλ€. CSS μ μ²λ¦¬/νμ²λ¦¬μ ꡬλΆμ μ΄ν΄νμκ³ μΆλ€λ©΄, λ§ν¬λ λΈλ‘κ·Έ κ²μκΈμ μ°Έκ³ νμλ©΄ λ κ² κ°μ΅λλ€.)
import adapter from '@sveltejs/adapter-auto';
import { vitePreprocess } from '@sveltejs/kit/vite'; // μΆκ°
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter()
},
preprocess: vitePreprocess() // μΆκ°
};
export default config;
./src/app.css νμΌμ μμ±νκ³ μλμ μ½λλΈλμ μΆκ°ν©λλ€. (Svelte νμΌμ <script> λΈλμμ TailwindCSS λ₯Ό import νμ¬ μ¬μ©ν μ μλλ‘ νκΈ° μν¨μ λλ€.)
@tailwind base;
@tailwind components;
@tailwind utilities;
./src/routes/+layout.svelte νμΌμ μμ±νκ³ μλμ μ½λλΈλμ μΆκ°ν©λλ€. (+layout.svelte λ SvelteKit μ μμ½νμΌλ‘μ, μΉμ¬μ΄νΈμ λͺ¨λ νμ΄μ§μ μ μ©λλ λ μ΄μμμ μλ―Έν©λλ€. μ¦, λ μ΄μμμμ TailwindCSS κ° μ μλ app.css νμΌμ import νμμΌλ―λ‘ κ° νμ΄μ§λ₯Ό μ μν λ μ¬μ©λλ λͺ¨λ +page.svelte νμΌμμ TailwindCSS μμ±μ μ¬μ©ν μ μκ² λ©λλ€.)
<script>
import "../app.css";
</script>
<slot />
μ€ν λ° ν μ€νΈ
μμ <μ€μΉ> κ³Όμ μ΄ λͺ¨λ μλ£λμλ€λ©΄, ν°λ―Έλμ μλμ λͺ λ Ήμ΄λ₯Ό μ λ ₯νκ³ Web μ λμλλ€.
npm run dev
./src/routes/+page.svelte νμΌμ μλμ μ½λλΈλκ³Ό κ°μ΄ μμ ν©λλ€. (Class μμ±μ TailwindCSS μ μ€νμΌλ§μ μ μ©ν κ°λ¨ν μμμ λλ€. μμ μμ±λ TailwindCSS νΉμ§ μ€, μ΄μ¬κ³Ό κ΄μ μμ TailwindCSS λ¬Έλ²μ΄ μ§κ΄μ μ΄μ§ μκ² λ€κ°μ¬ μ μκΈ° λλ¬Έμ λ¬λ 컀λΈκ° μ‘΄μ¬νλ€κ³ μΈκΈνμλλ°, κ°μΈμ μΌλ‘λ μμ§ μ΅μνμ§ μμ λ¨κ³μ λλ€. Web κ°λ°μ μ§ννλ©° μ€κ°μ€κ° λ°λ‘ μκ°μ ν λΉνμ¬ κ³΅λΆν΄μΌ ν κ² κ°μ΅λλ€.)
<h1 class="text-3xl font-bold underline">
Welcome to GNGB
</h1>
<br />
<h2 class="text-sky-500 hover:text-pink-700">
μ΄μ¬ν 곡λΆν΄λ΄
μλ€
</h2>
TailwindCSS κ° μ μ©λμλ€λ©΄, μλμ μ΄λ―Έμ§μ κ°μ μ€ννλ©΄μ λ³Ό μ μμ΅λλ€. λ§μ°μ€ ν¬μΈν°μ μμΉμ λ°λΌ (hover:) μμμ ꡬλΆνλ κ°λ¨ν μ‘°κ±΄λΆ μ€νμΌλ§μ μ μ©ν μ¬νμ΄ μ μμ μΌλ‘ μλνλμ§ ν μ€νΈν΄λ³Ό μ κ²°κ³Όμ λλ€.
λΉμ 곡μκ° Svelte λ₯Ό 곡λΆνλ κ³Όμ μμ κ²ͺκ² λ μ΄λ €μκ³Ό μνμ°©μ€λ₯Ό λ¨Όμ κ²½ννκ³ , μ΄μ΄μ§ κ²μκΈμμ μ΅λν μ½κ² 곡μ ν΄λλ¦¬κ³ μ ν©λλ€. μλͺ»λ λ΄μ©μ λν μ§μ μ¬νμ΄λ λ¬Έμμ¬νμ μΈμ λ μ§ νΈνκ² λκΈλ‘ λ¨κ²¨μ£ΌμκΈΈ λ°λΌκ² μ΅λλ€.
