ํด๋น ๊ฒ์๊ธ์
(1) DaisyUI ๊ฐ์
(2) DaisyUI ์ ์ฉ ๋ฐฉ๋ฒ
์ ๋ํ ๋ด์ฉ์ ๋ด๊ณ ์์ต๋๋ค.
SvelteKit ์ ์์ฆ ์ ์ผ ์ธ๊ธฐ๋ง๋ค๋ TailwindCSS ๋ฅผ ์ ์ฉํด๋ณผ๊น์? #3
ํด๋น ๊ฒ์๊ธ์ (1) TailwindCSS ๊ฐ์ (2) TailwindCSS ์ ์ฉ ๋ฐฉ๋ฒ ์ ๋ํ ๋ด์ฉ์ ๋ด๊ณ ์์ต๋๋ค. ์ด์ ๊ฒ์๊ธ - ์ ์ ์ถ์๋ SvelteKit ์ผ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ฑํด๋ณด๊ฒ ์ต๋๋ค! #2 ์ ์ ์ถ์๋ SvelteKit ์ผ๋ก ๊ฐ๋ฐ
gngb-tech.tistory.com
ch1 - DaisyUI ๋?
DaisyUI ๊ฐ ๋ญ์์? ๊ผญ ์ฌ์ฉํด์ผ ํ๋์?
TailwindCSS Component Library
DaisyUI ๋ ์ด์ ๊ฒ์๊ธ์์ ๋ค๋ฃฌ TailwindCSS Framework ์ ์ข ์๋ Library ์ ๋๋ค. DaisyUI ๋ ์ฌ์ ์ ์๋ฆ๋ต๊ฒ ๋์์ธ๋์ด ์๋ ์ฌ๋ฌ๊ฐ์ง UI Component ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ํ๋๋๋ก ์ฌ์ฉํ ์ ์๋ Utility Tool ์ด๋ฉฐ, (Bootstrap ์ ์ฌ์ฉ ๋ฐฉ์๊ณผ ์ ์ฌํฉ๋๋ค.) TailwindCSS ์ ๊ธฐ๋ฐํ๊ธฐ ๋์ํ๊ธฐ ๋๋ฌธ์ TailwindCSS ๊ฐ ์ค์น๋์ง ์์ ํ๊ฒฝ์์๋ ์ ์์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค. ์ด๋ฌํ ์ธก๋ฉด์์, DaisyUI ๋ฅผ TailwindCSS Component Library ๋ก ๋ถ๋ฅํฉ๋๋ค.
์ฌ์ฉํ๋ ์ด์
(TailwindCSS ๋ฅผ ํฌํจํ์ฌ) ์ธ๋ถ์ ์ธ CSS ๋ฅผ ๋ชจ๋ ์กฐ์ํ๋ฉฐ, Web ๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ UI Component ์ ๋์์ธ์ ์ง์ ๊ตฌํํ์ฌ ํ์ฉํ๋ ๊ฒ์ ํ์ค์ ์ผ๋ก ์ด๋ ต์ต๋๋ค. ๋์์ธ ์์๋ฅผ ๊ตฌํํ๋ ์๊ฐ์ด ๊ธธ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ ์ค์ํ ๋ถ๋ถ์ ๊ฐ๋ฐํ๋ ๊ณผ์ ์ ์ง์คํ์ง ๋ชปํ๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ฉฐ, ๋์์ธ ์ธก๋ฉด์์๋ ์ฌ๋ฌ๊ฐ์ง UI Component ์์ ์ปจ์ ์ ์ธ ์ผ๊ด์ฑ์ ์ ์งํ์ง ๋ชปํ์ฌ ๋์กํ (๋ณด๊ธฐ์ ์ข์ง ์์) Web ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค. ๋ฌด์๋ณด๋ค ์ธ๋ถ์ ์ธ CSS ๋ฅผ ๋ชจ๋ ์ง์ ๊ตฌํํ๋ ๊ณผ์ ์ ์ผ๋ถ Frontend ๊ฐ๋ฐ์๋ฅผ ์ ์ธํ๊ณ , ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ค์๊ฒ๋ ๊ณ ํต๊ณผ ์ธ๋ด์ ์๊ฐ์ผ๋ก ๋ค๊ฐ์ต๋๋ค.
์ ๋ชฉ์ฒ๋ผ, (์ธ๋ด์ฌ์ด ๋ง๊ณ ๋์์ธ ๊ฐ๊ฐ์ด ์ข์ ์ผ๋ถ ๊ฐ๋ฐ์๋ค์ ์ ์ธํ๊ณ ) ๊ทผ๋ณธ์ ์ผ๋ก ๋ชป์๊ธด Web ์ ๋ง๋ค์ง ์๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ฌ์ ์ ์ ์๋ ํ๋ฅญํ ๋์์ธ์ ํ์ฉํ๋ ๊ฒ ์ ๋๋ค. ์ด๋ฌํ ์ธก๋ฉด์์, TailwindCSS ๊ธฐ๋ฐ์ ๋์์ธ ํ ํ๋ฆฟ์ ํ์ฉํ ์ ์๋ ๋ฌด๋ฃ Plugin ์ด ์กด์ฌํ๋ค๋ฉด ์ฌ์ฉํ์ง ์์ ์ด์ ๋ฅผ ์์ต๋๋ค. ํด๋น ๊ฒ์๊ธ์์๋ DaisyUI ๋ฅผ ๊ธฐ์กด SvelteKit (w/ TailwinCSS) ํ๊ฒฝ์ ์ค์นํ๊ณ ๋์์ธ์ ์ ์ฉํ๋ ๋ช ๊ฐ์ง ์์๋ฅผ ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค.
ch2 - SvelteKit (w/ TailwindCSS) ํ๊ฒฝ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ
DaisyUI ๋ฅผ ์ค์นํ๊ณ , ์ ์ฉํ ์์๋ฅผ ๋ณด์ฌ์ฃผ์ธ์!
์ค์น
์ด์ ๊ฒ์๊ธ์์ ์ค์ ํ ๊ฐ๋ฐ ํ๊ฒฝ์ด ์ ์ ๋์ด์ผ ํฉ๋๋ค. ์ฆ, SvelteKit ๊ฐ๋ฐ ํ๊ฒฝ์ TailwinCSS ๊ฐ ์ค์น๋๊ณ ์ ์์ ์ผ๋ก ์ ์ฉ๋ ์ํฉ์ ์ ์ ๋ก ํฉ๋๋ค. DaisyUI ์ ์ค์น ๋ฐฉ๋ฒ์ ๋น๊ต์ ๋จ์ํฉ๋๋ค. ์๋์ ์ด๋ฏธ์ง์ ๊ฐ์ด, npm ์ ํตํด Daisyui ๋ฅผ ์ค์นํ๊ณ tailwind.config.cjs ์ plugins ๋ถ๋ถ์ require("daisyui") ๊ตฌ๋ฌธ์ ์ถ๊ฐํ๋ฉด ํ๊ฒฝ ์ค์ ์ด ์๋ฃ๋ฉ๋๋ค.
๋์์ธ ์ ์ฉ
DaisyUI ๊ณต์ ํํ์ด์ง ์ต์๋จ ํ์ด์ง์์ ์ฌ๋ฌ๊ฐ์ง UI Component ๋ฅผ Preview ํํ๋ก ๋ณด์ฌ์ฃผ๋๋ฐ, ๋น์ฅ ์ ์ฉํด๋ณด๊ณ ์ถ์ ๋งค๋ ฅ์ ์ธ Component ์์๋ค์ด ๋์ ๋๋๋ค.
์กฐ๊ธ ๋ ๋ค์ํ Component ์ข ๋ฅ์ ๊ตฌ์ฒด์ ์ธ ๋์์ธ ์ ์ฉ ๋ฐฉ๋ฒ์ DaisyUI Component ํ์ด์ง์์ ํ์ธํ ์ ์์ต๋๋ค. ํด๋น ๊ฒ์๊ธ์์๋ NavBar (์ต์๋จ ๋ค๋น๊ฒ์ด์ ๋ฐ) ๋์์ธ์ ์ ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
NavBar Component ํ์ด์ง์๋ ๋ค์ํ NavBar ๋์์ธ ์์๊ฐ ์กด์ฌํ๋๋ฐ, ์๋ ์ด๋ฏธ์ง์ ํน์ ๋์์ธ ์์๋ฅผ SvelteKit ์ ์ ์ฉํด๋ณด๊ฒ ์ต๋๋ค. ํน์ ๋์์ธ ํ ํ๋ฆฟ์ Preview ํญ์ UI Component ๋ฅผ Web ์ ์ ์ฉํ์ ๋์ ํํ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด์ฌ์ค๋๋ค.
HTML ํญ์์๋ Preview ํญ์์ ๋ณธ ๋์์ธ์ด HTML (w/ CSS) ํํ๋ก ์ ๋ฆฌ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. (HTML Tag (<div> ๋ฑ) ์ class ๊ตฌ๋ฌธ์ ๋ณด๋ฉด, TailwindCSS ๋ฌธ๋ฒ ํํ๊ฐ ์ ์ฉ๋์ด ์๋ ๊ฒ์ด ๋ณด์ ๋๋ค.)
ํด๋น ์ฝ๋๋ฅผ ๋ณต์ฌํ์ฌ ./src/routes/+layout.svelte ํ์ผ์ ๋ถ์ฌ ๋ฃ์ต๋๋ค.
<script>
import '../app.css';
</script>
<div class="navbar bg-base-100">
<div class="flex-none">
<button class="btn btn-square btn-ghost">
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
class="inline-block w-5 h-5 stroke-current"
><path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4 6h16M4 12h16M4 18h16"
/></svg
>
</button>
</div>
<div class="flex-1">
<!-- svelte-ignore a11y-missing-attribute -->
<a class="btn btn-ghost normal-case text-xl">daisyUI</a>
</div>
<div class="flex-none">
<button class="btn btn-square btn-ghost">
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
class="inline-block w-5 h-5 stroke-current"
><path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0z"
/></svg
>
</button>
</div>
</div>
<slot />
+layout.svelte ํ์ผ์ ์์ฑ๋ ์ฝ๋๋ ์ ์ฒด Web ํ๋ฉด ๊ตฌ์กฐ์ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ๊ธฐ์กด์ ์์ฑํ๋ ํํ์ด์ง ์ปจํ ์ธ ์๋จ์ ๋ค๋น๊ฒ์ด์ ๋ฐ๊ฐ ์๊ธฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋์์ธ ์ปค์คํฐ๋ง์ด์ง
DaisyUI Component ๋ฅผ ์ฌ์ฉํ๋๋ผ๋, TailwindCSS ๋ฌธ๋ฒ ํน์ DaisyUI ์ ๊ณต ์์ฑ์ ์ฌ์ฉํ์ฌ ๋์์ธ์ ์ปค์คํฐ๋ง์ด์ง ํ ์ ์์ต๋๋ค. (DaisyUI ๋ฅผ ํ์ฉํ๋๋ผ๋ ์ํ๋ ๋์์ธ์ ๊ตฌํํ๋ ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก TailwindCSS ๋ฌธ๋ฒ์ ์์งํด์ผ ํ๋ค๋ ๊ฒ์ ๋ค์ ํ๋ฒ ๊นจ๋ฌ์์ต๋๋ค.) ์๋์ ์ฝ๋๋ธ๋ญ์ ./src/routes/+layout.svelte ํ์ผ ์ค, ๋ค๋น๊ฒ์ด์ ๋ฐ์ ์ข์ธก ํํ์ด์ง ์ ๋ชฉ ๋ถ๋ถ์ ๋ํ ๋ณ๊ฒฝ ์์์ ๋๋ค. ๊ณตํต์ ์ผ๋ก, ๊ธฐ๋ณธ ํ ํ๋ฆฟ์์ ์ ๋ชฉ์ 'daisyUI' ์์ 'GNGB-tech-blog' ๋ก ๋ณ๊ฒฝํ์๊ณ ๋ฒํผ ์์์ ๋ถ์ฌํ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์์๋ class ๊ตฌ๋ฌธ์ TailwindCSS ๋ฌธ๋ฒ์ผ๋ก, ๋ ๋ฒ์งธ ์์๋ DaisyUI ์ ๊ณต ์์ฑ์ผ๋ก ์ปค์คํฐ๋ง์ด์ง ํ์์ต๋๋ค. DaisyUI ์ ๋ฒํผ Component ์ ๊ณต ์์ฑ์ ๋งํฌ๋ ํ์ด์ง์์ ์์ธ์ฌํญ์ ํ์ธํ ์ ์์ต๋๋ค.
// ๊ธฐ๋ณธ ํ
ํ๋ฆฟ
<div class="flex-1">
<a class="btn btn-ghost normal-case text-xl">daisyUI</a>
</div>
// ๊ธฐ๋ณธ ํ
ํ๋ฆฟ ์ปค์คํฐ๋ง์ด์ง (w/ TailwindCSS)
<div class="flex-1">
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">GNGB-tech-blog</button>
</div>
// ๊ธฐ๋ณธ ํ
ํ๋ฆฟ ์ปค์คํฐ๋ง์ด์ง (w/ DaisyUI ์ ๊ณต ์์ฑ)
<div class="flex-1">
<button class="btn btn-primary normal-case text-xl">GNGB-tech-blog</button>
</div>
๋น์ ๊ณต์๊ฐ Svelte ๋ฅผ ๊ณต๋ถํ๋ ๊ณผ์ ์์ ๊ฒช๊ฒ ๋ ์ด๋ ค์๊ณผ ์ํ์ฐฉ์ค๋ฅผ ๋จผ์ ๊ฒฝํํ๊ณ , ์ด์ด์ง ๊ฒ์๊ธ์์ ์ต๋ํ ์ฝ๊ฒ ๊ณต์ ํด๋๋ฆฌ๊ณ ์ ํฉ๋๋ค. ์๋ชป๋ ๋ด์ฉ์ ๋ํ ์ง์ ์ฌํญ์ด๋ ๋ฌธ์์ฌํญ์ ์ธ์ ๋ ์ง ํธํ๊ฒ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๊ธธ ๋ฐ๋ผ๊ฒ ์ต๋๋ค.
