
Firebase Authentication UI๋ฅผ ๋ง๋ค๋ฉด์, CSS๋ Tailwind CSS
๋ฅผ ํ์ฉํ๋ค.
์ด๋ฒ ๊ธ์์๋ Tailwind CSS๊ฐ ๋ญ์ง, ๊ทธ๋ฆฌ๊ณ ์ ์ฐ๋ฉด ํธํ์ง ์ง์ ๋๋ ๊ฒฝํ์ ๊ธฐ๋กํด๋๋ค.
.button { color: red; } ์ด๋ฐ ์์ผ๋ก ์ง์ ์คํ์ผ ์ ์class="bg-red-500 text-white p-4 rounded" ์ฒ๋ผ ํด๋์ค ์ด๋ฆ๋ง ๋ถ์ฌ์ ์คํ์ผ ์์ฑ๐ ์ฆ, ๋ฏธ๋ฆฌ ์ค๋น๋ โ์คํ์ผ ์กฐ๊ฐโ๋ค์ ๊ฐ์ ธ๋ค๊ฐ ์กฐ๋ฆฝํ๋ ๋๋์ด๋ค.
<!-- ์ผ๋ฐ CSS -->
<button class="btn">ํ์๊ฐ์
</button>
<style>
.btn {
background: blue;
color: white;
padding: 8px 16px;
border-radius: 8px;
}
</style>
<!-- Tailwind CSS -->
<button class="bg-blue-500 text-white px-4 py-2 rounded-lg">
ํ์๊ฐ์
</button>
โ ์ฐจ์ด์ : CSS ๋ฐ๋ก ์ ์ฐ๊ณ , HTML ํด๋์ค๋ง์ผ๋ก ๋ฐ๋ก ์คํ์ผ๋ง ๊ฐ๋ฅ!
1. ๋น ๋ฅด๋ค
CSS ์ ํ์ผ ์ด๊ณ , ํด๋์ค๋ช ๊ณ ๋ฏผํ ํ์ ์์
๊ทธ๋ฅ ํ์ํ ์คํ์ผ์ class ์์ ์ ์ผ๋ฉด ๋
2. ์ผ๊ด์ฑ ์ ์ง
ํ์์ ์ฐ๋ฉด, ๋ค๋ค ๊ฐ์ ์์/์ฌ๋ฐฑ ๋จ์๋ฅผ ๊ณต์ ํ๊ฒ ๋จ
text-gray-600, p-4, rounded-lg ๊ฐ์ ํ์คํ๋ ๊ท์น
3. ๋ฐ์ํ๋ ์์ฝ๊ฒ
<div class="w-full sm:w-1/2 lg:w-1/3">๋ด์ฉ</div>
โ ํ๋ฉด ํฌ๊ธฐ๋ณ๋ก ์๋ ์คํ์ผ ์ ์ฉ (sm, md, lg ๊ฐ์ prefix ์ฌ์ฉ)

Tailwind๋ ๋ชจ๋ฐ์ผ ์ฐ์ (Mobile-first) ์ด๋ผ์, ๊ธฐ๋ณธ ํด๋์ค๋ ์์ ํ๋ฉด์ ์ ์ฉ๋๊ณ ,
sm:, md:, lg: ๊ฐ์ ํ๋ฆฌํฝ์ค(prefix) ๋ฅผ ๋ถ์ด๋ฉด ๊ทธ ๋๋น ์ด์์์ ๋ฎ์ด์จ์ ์ ์ฉ๋๋ค.
| ์ ๋์ฌ | ์๋ฏธ(์ต์ ๋๋น) |
|---|---|
sm: | โฅ 640px |
md: | โฅ 768px |
lg: | โฅ 1024px |
xl: | โฅ 1280px |
2xl: | โฅ 1536px |
โ ํด์: lg:w-1/3 โ ํ๋ฉด์ด 1024px ์ด์์ผ ๋ ๋๋น๋ฅผ 1/3๋ก.
<div class="w-full sm:w-1/2 lg:w-1/3">๋ด์ฉ</div>
์ฆ, ํ๋ฉด์ด ์ปค์ง์๋ก ๋ ๊ตฌ์ฒด์ ์ธ ๊ท์น์ด ๋ค์ ๊ท์น์ ๋ฎ์ด์ด๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
| ๋ถ๋ฅ | ํด๋์ค | ์๋ฏธ |
|---|---|---|
| ์ปจํ ์ด๋ ํญ | container, max-w-sm/md/lg/xl/2xl, w-full, w-1/2, w-1/3, w-96 | ์ต๋/๊ณ ์ /๋ถ์ ๋๋น |
| ๋์คํ๋ ์ด | block, inline-block, inline, flex, grid, hidden | ํ์ ๋ฐฉ์ |
| ๋ฐฉํฅ/์ ๋ ฌ | flex-row, flex-col, items-center, justify-between, gap-4 | ํ๋ ์ค ์ ๋ ฌ/๊ฐ๊ฒฉ |
| ๊ทธ๋ฆฌ๋ | grid-cols-1/2/3, sm:grid-cols-2, gap-4 | ๊ทธ๋ฆฌ๋ ์ด/๊ฐ๊ฒฉ |
| ๋ถ๋ฅ | ํด๋์ค | ์๋ฏธ |
|---|---|---|
| ๋ง์ง | m-4, mx-4, my-2, mt-6 | ๋ฐ๊นฅ ์ฌ๋ฐฑ |
| ํจ๋ฉ | p-4, px-4, py-2, pt-6 | ์์ชฝ ์ฌ๋ฐฑ |
| ์์๊ฐ ๊ฐ๊ฒฉ | space-x-4, space-y-2 | ํ์ ์ฌ์ด ๊ฐ๊ฒฉ(์์ง/์ํ) |
| ๋ถ๋ฅ | ํด๋์ค | ์๋ฏธ |
|---|---|---|
| ํฌ๊ธฐ | text-xs/sm/base/lg/xl/2xl/โฆ | ๊ธ์ ํฌ๊ธฐ |
| ๋๊ป | font-light/normal/medium/semibold/bold | ํฐํธ ๋๊ป |
| ์์ | text-gray-600, text-blue-600, text-red-500 | ๊ธ์ ์ |
| ์ ๋ ฌ | text-left/center/right | ์ ๋ ฌ |
| ๋ถ๋ฅ | ํด๋์ค | ์๋ฏธ |
|---|---|---|
| ๋ฐฐ๊ฒฝ์ | bg-white, bg-gray-100, bg-blue-600 | ๋ฐฐ๊ฒฝ ์ |
| ํ ๋๋ฆฌ | border, border-0/2, border-gray-300 | ๋ณด๋ ๋๊ป/์ |
| ๋ชจ์๋ฆฌ | rounded, rounded-md/lg/full | ๋ฅ๊ทผ ์ ๋ |
| ๊ทธ๋ฆผ์ | shadow, shadow-md/lg | ๊ทธ๋ฆผ์ ๊ฐ๋ |
| ๋ถ๋ฅ | ํด๋์ค | ์์ |
|---|---|---|
| ํธ๋ฒ | hover:bg-blue-700, hover:underline | ๋ง์ฐ์ค ์ค๋ฒ |
| ํฌ์ปค์ค | focus:outline-none, focus:ring-2, focus:ring-blue-500, focus:ring-offset-2 | ํฌ์ปค์ค ์คํ์ผ |
| ๋นํ์ฑ | disabled:opacity-50, disabled:cursor-not-allowed | ๋นํ์ฑ ์ํ |
| ๋ถ๋ฅ | ํด๋์ค | ์๋ฏธ |
|---|---|---|
| ์์น | relative, absolute, fixed, inset-0, top-0, left-1/2 | ํฌ์ง์ ๋ |
| ์ค๋ฒํ๋ก์ฐ | overflow-hidden/auto | ๋์นจ ์ฒ๋ฆฌ |
| ์ปค์ | cursor-pointer/not-allowed | ์ปค์ |
| ์ ํ | transition, duration-200, ease-in-out | ํธ๋์ง์ |
bg-white shadow-lg rounded-lg p-6๋ง ๋ถ์ฌ๋ ๋ฐ๋ก ์์ ์นด๋ ์์ฑbg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg๋ง ์ฐ๋ฉด ์ฆ์ ํ๋์ ์ธ ๋๋๐ ๋์์ธ ๊ฐ๊ฐ ์์ด๋ ๊น๋ํ UI๋ฅผ ๋ง๋ค ์ ์์๋ค.

Tailwind CSS๋ โ๋์์ธ ์ด๋ณด๋ ์์ ํ๊ฒ ์ธ ์ ์๋ ์คํ์ผ ์ฌ์ โ ๊ฐ์ ์กด์ฌ๋ค.
Utility-first ๊ฐ๋ ์ดํด: Tailwind๋ โ์์ ์ ํธ๋ฆฌํฐ ํด๋์ค ์กฐํฉโ์ผ๋ก ์คํ์ผ๋งํ๋ค๋ ์ฒ ํ.
๋ชจ๋์ฑ: ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ค๋ฅธ ํ์ด์ง์์ ์ฌ์ฌ์ฉํ ๋๋, ๋ณ๋ CSS ์์ ์์ด ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ธ ์ ์๋ค๋ ์ .
CSS๋ฅผ ๋ฐ๋ก ์์ฑํ์ง ์์๋ ๋๋, ๊ฐ๋ฐ ์๋๊ฐ ํ์คํ ๋นจ๋ผ์ง๋ค.
๋ฐ์ํ ๋ ์ด์์๊น์ง ํด๋์ค ํ๋๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
Firebase ๊ฐ์ MVP ๊ฐ๋ฐ์์๋ Tailwind๊ฐ ํนํ ๋น์ ๋ฐํ๋ค โจ