๐จ Tailwind 4์ฅ: ํ์ดํฌ๊ทธ๋ํผ์ ์์ ์์คํ
๐ ๊ฐ์
Tailwind ์ ํฐํธ, ์์, ํ ์คํธ ์ ํธ๋ฆฌํฐ โ ๋์์ธ ์์คํ ์ ๋ ์ถ์ ํด๋์ค๋ก ์๋ฒฝํ๊ฒ ์ ์ดํ๊ธฐ
๐ ๋ชฉ์ฐจ
- ๐ ์ด ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์ ์
- ๐ค ์ ์์์ผ ํ๋๊ฐ
- ๐จ Tailwind ์์ ํ๋ ํธ ์์คํ
- โ๏ธ ํ์ดํฌ๊ทธ๋ํผ ์ ํธ๋ฆฌํฐ ์์ ์ ๋ณต
- ๐ป ์ค์ : ์์๋ค ์ปค๋ฎค๋ํฐ ํ ์คํธ ๋์์ธ
- ๐ง ์์ ํฌ๋ช ๋ ์กฐ์ (Opacity Modifier)
- ๐ ์ด๋ฒ์ ๋ฐฐ์ด ๋ด์ฉ ์ด์ ๋ฆฌ
- ๐ ๋ง๋ฌด๋ฆฌ ํด์ฆ
- ๐ฃ ์์ฒ ์ด์ ํด๊ทผ ์ผ๊ธฐ
- ๐ ๋ ์์๋ณด๊ธฐ
๐ ์ด ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์ ์
โฑ๏ธ ์์ ์ฝ๊ธฐ ์๊ฐ: 15๋ถ
๐ฏ ์ด ๋ฌธ์๋ฅผ ๋ค ์ฝ์ผ๋ฉด ํ ์ ์๋ ๊ฒ
-
text-gray-500,bg-blue-100,text-blue-700๊ฐ์ ์์ ํด๋์ค ์ฒด๊ณ๋ฅผ ์์ ํ ์ดํดํ๋ค - ํฐํธ ํฌ๊ธฐ, ๊ตต๊ธฐ, ํ๊ฐ, ์๊ฐ์ Tailwind ํด๋์ค๋ก ์ ๊ตํ๊ฒ ์ ์ดํ๋ค
-
bg-blue-500/50๊ฐ์ ํฌ๋ช ๋ ์์ ์(opacity modifier)๋ฅผ ํ์ฉํ๋ค
๐บ๏ธ ์ด ๋ฌธ์์ ๋ฐฐ๊ฒฝ ์ธ๊ณ๊ด: '์์๋ค ์ปค๋ฎค๋ํฐ'
- ๐จ ์์ (๋์์ด๋): "์์ฒ ๋, ํผ๊ทธ๋ง์์ ์ด ์์ด
#1D4ED8์ธ๋ฐ Tailwind ํด๋์ค๋ก๋ ๋ญ์์?" - ๐ฃ ์์ฒ : "์...
text-[#1D4ED8]์ด๋ผ๊ณ ์ฐ๋ฉด ๋ ๊ฒ ๊ฐ์๋ฐ์..." - ๐ฆ ์ํธ (๋ฆฌ๋): "์์ฒ ๋, ๊ทธ๊ฑด Tailwind ๊ธฐ๋ณธ ํ๋ ํธ์ ์์ด์.
text-blue-700์ด์์. ๋์์ธ ์์คํ ํ ํฐ์ ์์๊ฐ์ผ๋ก ๋์ฒดํ๋ฉด ๋์ค์ ์์ ๋ณ๊ฒฝ ์ ๋ํผ๋์ด ์์."
๐ค ์ ์์์ผ ํ๋๊ฐ
UI ์์ ์์๊ณผ ํ์ดํฌ๊ทธ๋ํผ๋ ์๊ฐ์ ์ธ์ด์ผ. ๊ฐ๋ฐ์๊ฐ "๊ทธ๋ฅ ํ๋์" ์ ์ฐ๋ฉด ๋์์ด๋๊ฐ ์ง์ ํ "์ ํํ ํ๋์" ๊ณผ ๋ฌ๋ผ์ ธ์ ๋์์ธ ์๋๊ฐ ๋ฌด๋์ ธ.
์์๋ค ์ปค๋ฎค๋ํฐ์์ ์ค์ ๋ก ๋ฒ์ด์ง ์ผ:
- ์์ฒ ์ด๊ฐ ๋ฒํผ์
bg-[#1e40af]๋ผ๊ณ ์ฐ๊ณ - ์นด๋ ํ
๋๋ฆฌ์
border-[#1d4ed8]์ด๋ผ๊ณ ์ฐ๊ณ - ๋ฑ์ง์
text-[#1e3a8a]๋ผ๊ณ ์จ๋ฒ๋ ธ์ด.
์ ๋ค ํ๋์์ธ๋ฐ ๋ฏธ๋ฌํ๊ฒ ๋ฌ๋ผ. ์์์ด "ํ๋์ ํค ์ข ๋ง์ถฐ์ฃผ์ธ์" ๋ผ๊ณ ํ์ ๋ ์ธ ๊ตฐ๋ฐ๋ฅผ ๊ฐ๊ฐ ์์ ํด์ผ ํ์ด.
Tailwind ํ๋ ํธ ์์คํ
์ ์ฐ๋ฉด blue-700 ํ๋๋ก ํต์ผ๋๊ณ , ์ดํ ์์ ๋ณ๊ฒฝ๋ ํจ์ฌ ์ฌ์.
๐จ Tailwind ์์ ํ๋ ํธ ์์คํ
์์ ์ค์ผ์ผ ๊ตฌ์กฐ
Tailwind ๋ ๊ฐ ์์๋ง๋ค 50๋ถํฐ 950 ๊น์ง 11๋จ๊ณ ์์์ ์ ๊ณตํด.
{์์}-50 โ ๊ฐ์ฅ ๋ฐ์ (๊ฑฐ์ ํฐ์)
{์์}-100
{์์}-200
{์์}-300
{์์}-400
{์์}-500 โ ์ค๊ฐ (๋ํ ์์)
{์์}-600
{์์}-700 โ ์งํจ (ํ
์คํธ์ ์์ฃผ ์)
{์์}-800
{์์}-900
{์์}-950 โ ๊ฐ์ฅ ์ด๋์ (๊ฑฐ์ ๊ฒ์ )
์ฃผ์ ์์ ํ๋ ํธ์ ์ค๋ฌด ์ฉ๋
<!-- Slate (์ฐจ๊ฐ์ด ํ์ ๊ณ์ด) -->
<div class="bg-slate-50"> <!-- ํ์ด์ง ๋ฐฐ๊ฒฝ -->
<div class="bg-slate-100"> <!-- ์น์
๋ฐฐ๊ฒฝ -->
<p class="text-slate-500"> <!-- ๋ณด์กฐ ํ
์คํธ -->
<p class="text-slate-700"> <!-- ๋ณธ๋ฌธ ํ
์คํธ -->
<p class="text-slate-900"> <!-- ์ ๋ชฉ ํ
์คํธ -->
<!-- Gray (์ค๋ฆฝ ํ์) -->
<div class="bg-gray-50"> <!-- ์นด๋ ๋ฐฐ๊ฒฝ ๋์ -->
<div class="border-gray-200"> <!-- ํ
๋๋ฆฌ -->
<p class="text-gray-400"> <!-- ํํธ/ํ๋ ์ด์คํ๋ -->
<p class="text-gray-600"> <!-- ๋ณด์กฐ ์ ๋ณด -->
<!-- Blue (์ฃผ์ ๋ธ๋๋ ์์์ผ๋ก ์์ฃผ ์) -->
<div class="bg-blue-50"> <!-- ํ๋ ๋ฐฐ๊ฒฝ (์๋ฆผ ์์ญ) -->
<div class="bg-blue-100"> <!-- ๋ฐฐ์ง ๋ฐฐ๊ฒฝ -->
<p class="text-blue-600"> <!-- ๋งํฌ ์์ -->
<p class="text-blue-700"> <!-- ๋ฐฐ์ง ํ
์คํธ -->
<button class="bg-blue-600 hover:bg-blue-700"> <!-- CTA ๋ฒํผ -->
<button class="bg-blue-700 hover:bg-blue-800"> <!-- ์งํ ๋ฒํผ -->
<!-- Green (์ฑ๊ณต/์๋ฃ ์ํ) -->
<div class="bg-green-100 text-green-700"> <!-- ์ฑ๊ณต ๋ฐฐ์ง -->
<div class="bg-green-500"> <!-- ์ฑ๊ณต ๋ฒํผ -->
<!-- Red (์๋ฌ/๊ฒฝ๊ณ ์ํ) -->
<div class="bg-red-100 text-red-700"> <!-- ์๋ฌ ๋ฐฐ์ง -->
<p class="text-red-500"> <!-- ์๋ฌ ๋ฉ์์ง -->
<div class="border-red-300"> <!-- ์๋ฌ ์
๋ ฅ ํ๋ ํ
๋๋ฆฌ -->
<!-- Yellow/Amber (์ฃผ์ ์ํ) -->
<div class="bg-amber-100 text-amber-700"> <!-- ๊ฒฝ๊ณ ๋ฐฐ์ง -->
<!-- Purple (ํน๋ณํ ๊ฐ์กฐ) -->
<div class="bg-purple-100 text-purple-700"> <!-- ํ๋ฆฌ๋ฏธ์ ๋ฐฐ์ง -->์์๋ค ์ปค๋ฎค๋ํฐ ์์ ์ฌ์ฉ ํจํด
// ์คํฐ๋ ํ๊ทธ ์ปดํฌ๋ํธ โ ๊ธฐ์ ์คํ๋ณ ์์ ๊ตฌ๋ถ
type Tag = 'react' | 'nextjs' | 'typescript' | 'nodejs';
const tagStyles: Record<Tag, string> = {
react: 'bg-blue-100 text-blue-700',
nextjs: 'bg-slate-100 text-slate-700',
typescript: 'bg-blue-100 text-blue-800',
nodejs: 'bg-green-100 text-green-700',
};
function StudyTag({ tag }: { tag: Tag }) {
return (
<span className={`rounded-full px-3 py-0.5 text-xs font-semibold ${tagStyles[tag]}`}>
{tag}
</span>
);
}โ๏ธ ํ์ดํฌ๊ทธ๋ํผ ์ ํธ๋ฆฌํฐ ์์ ์ ๋ณต
ํฐํธ ํฌ๊ธฐ (font-size)
<!-- text-{size} ํด๋์ค -->
<p class="text-xs"> <!-- 12px / line-height: 1rem -->
<p class="text-sm"> <!-- 14px / line-height: 1.25rem โ UI ๋ณด์กฐ ํ
์คํธ -->
<p class="text-base"> <!-- 16px / line-height: 1.5rem โ ๋ณธ๋ฌธ ๊ธฐ๋ณธ -->
<p class="text-lg"> <!-- 18px / line-height: 1.75rem โ ์นด๋ ์ ๋ชฉ -->
<p class="text-xl"> <!-- 20px / line-height: 1.75rem -->
<p class="text-2xl"> <!-- 24px / line-height: 2rem โ ์น์
์ ๋ชฉ -->
<p class="text-3xl"> <!-- 30px / line-height: 2.25rem โ ํ์ด์ง ์ ๋ชฉ -->
<p class="text-4xl"> <!-- 36px / line-height: 2.5rem โ ํ์ด๋ก ํ
์คํธ -->
<p class="text-5xl"> <!-- 48px / line-height: 1 -->
<p class="text-6xl"> <!-- 60px / line-height: 1 โ ๋๋ฉ ํ์ด์ง ๋ํ ํ
์คํธ -->ํฐํธ ๊ตต๊ธฐ (font-weight)
<p class="font-thin"> <!-- font-weight: 100 -->
<p class="font-extralight"> <!-- font-weight: 200 -->
<p class="font-light"> <!-- font-weight: 300 -->
<p class="font-normal"> <!-- font-weight: 400 โ ๋ณธ๋ฌธ ๊ธฐ๋ณธ -->
<p class="font-medium"> <!-- font-weight: 500 โ ๋ฒํผ, ๋ ์ด๋ธ -->
<p class="font-semibold"> <!-- font-weight: 600 โ ์์ ๋ชฉ, ์นด๋ ์ ๋ชฉ -->
<p class="font-bold"> <!-- font-weight: 700 โ ํ์ด์ง ์ ๋ชฉ, ๊ฐ์กฐ -->
<p class="font-extrabold"> <!-- font-weight: 800 -->
<p class="font-black"> <!-- font-weight: 900 โ ํ์ด๋ก ํ
์คํธ -->ํ๊ฐ (line-height)
<p class="leading-none"> <!-- line-height: 1 โ ์ ๋ชฉ์ tight ํ๊ฒ -->
<p class="leading-tight"> <!-- line-height: 1.25 -->
<p class="leading-snug"> <!-- line-height: 1.375 โ ์นด๋ ์ ๋ชฉ -->
<p class="leading-normal"> <!-- line-height: 1.5 โ ๋ณธ๋ฌธ ๊ธฐ๋ณธ -->
<p class="leading-relaxed"> <!-- line-height: 1.625 โ ๊ธด ๋ณธ๋ฌธ ๊ฐ๋
์ฑ ํฅ์ -->
<p class="leading-loose"> <!-- line-height: 2 โ ๋๊ฒ -->ํ ์คํธ ์ ๋ ฌ
<p class="text-left"> <!-- text-align: left (๊ธฐ๋ณธ) -->
<p class="text-center"> <!-- text-align: center โ ๋ชจ๋ฌ/ํ์ด๋ก ์ ๋ชฉ -->
<p class="text-right"> <!-- text-align: right โ ์ซ์ ๋ฐ์ดํฐ -->
<p class="text-justify"> <!-- text-align: justify โ ๊ธด ๋ฌธ์ฅ ์์ชฝ ์ ๋ ฌ -->ํ ์คํธ ๋ง์ค์ (Truncate)
<!-- ํ ์ค ๋ง์ค์ -->
<p class="truncate">์์ฃผ ๊ธด ํ
์คํธ๊ฐ ํ ์ค๋ก ์๋ฆผ...</p>
<!-- ์ฌ๋ฌ ์ค ๋ง์ค์ (line-clamp) -->
<p class="line-clamp-2">๋ ์ค๊น์ง๋ง ๋ณด์ด๊ณ ๋๋จธ์ง๋ ...์ผ๋ก ์๋ฆผ</p>
<p class="line-clamp-3">์ธ ์ค๊น์ง</p>ํ ์คํธ ๊พธ๋ฏธ๊ธฐ
<p class="uppercase"> <!-- ๋๋ฌธ์ ๋ณํ -->
<p class="lowercase"> <!-- ์๋ฌธ์ ๋ณํ -->
<p class="capitalize"> <!-- ์ฒซ ๊ธ์ ๋๋ฌธ์ -->
<p class="underline"> <!-- ๋ฐ์ค -->
<p class="line-through"> <!-- ์ทจ์์ -->
<p class="no-underline"> <!-- ๋ฐ์ค ์ ๊ฑฐ (๋งํฌ ์คํ์ผ ์ด๊ธฐํ) -->
<p class="tracking-tight"> <!-- letter-spacing: -0.05em โ ์ ๋ชฉ์ -->
<p class="tracking-normal"> <!-- letter-spacing: 0 -->
<p class="tracking-wide"> <!-- letter-spacing: 0.025em -->
<p class="tracking-widest"> <!-- letter-spacing: 0.1em โ ๋ผ๋ฒจ/๋ฑ์ง -->๐ป ์ค์ : ์์๋ค ์ปค๋ฎค๋ํฐ ํ ์คํธ ๋์์ธ
ํ์ด์ง ์ ๋ชฉ ๊ณ์ธต ๊ตฌ์กฐ
// ๐ฆ ์ํธ: "ํ
์คํธ ๊ณ์ธต์ ๋ช
ํํ ํ๋ฉด ์ฌ์ฉ์๊ฐ ์ ๋ณด๋ฅผ ๋ ๋น ๋ฅด๊ฒ ํ์
ํด์."
function StudyDetailPage({ study }: { study: Study }) {
return (
<article className="max-w-3xl mx-auto px-4 py-8">
{/* ์นดํ
๊ณ ๋ฆฌ ๋ ์ด๋ธ: ์๊ณ , ๋๋ฌธ์, ๋์ ์๊ฐ */}
<p className="mb-3 text-xs font-semibold uppercase tracking-widest text-blue-600">
React ยท ์ฃผ 1ํ
</p>
{/* ํ์ด์ง ๋ฉ์ธ ์ ๋ชฉ: ํฌ๊ณ , ๊ตต๊ณ , ์ข์ ํ๊ฐ */}
<h1 className="mb-4 text-4xl font-bold leading-tight tracking-tight text-gray-900">
{study.title}
</h1>
{/* ๋ถ์ ๋ชฉ: ์ค๊ฐ ํฌ๊ธฐ, ๋ณด์กฐ ์์ */}
<p className="mb-6 text-xl font-medium text-gray-500">
{study.subtitle}
</p>
{/* ๋ฉํ ์ ๋ณด: ์๊ณ , ํ๋ฆผ */}
<div className="mb-8 flex items-center gap-4 text-sm text-gray-400">
<span>๐ค {study.hostName}</span>
<span>๐
{study.schedule}</span>
<span>๐ฅ {study.memberCount}๋ช
</span>
</div>
{/* ๋ณธ๋ฌธ: ๊ฐ๋
์ฑ ์ต์ ํ */}
<div className="prose max-w-none text-base leading-relaxed text-gray-700">
{study.description}
</div>
</article>
);
}์ํ ๋ฐฐ์ง ์์คํ
type StudyStatus = 'recruiting' | 'ongoing' | 'completed' | 'closed';
const statusConfig = {
recruiting: {
label: '๋ชจ์ง ์ค',
className: 'bg-green-100 text-green-700',
},
ongoing: {
label: '์งํ ์ค',
className: 'bg-blue-100 text-blue-700',
},
completed: {
label: '์๋ฃ',
className: 'bg-gray-100 text-gray-500',
},
closed: {
label: '๋ง๊ฐ',
className: 'bg-red-100 text-red-600',
},
};
function StatusBadge({ status }: { status: StudyStatus }) {
const { label, className } = statusConfig[status];
return (
<span className={`rounded-full px-3 py-1 text-xs font-semibold ${className}`}>
{label}
</span>
);
}๐ง ์์ ํฌ๋ช ๋ ์กฐ์ (Opacity Modifier)
Tailwind v3+ ๋ถํฐ ์์ ํด๋์ค์ ์ฌ๋์(/)๋ก ํฌ๋ช
๋๋ฅผ ์ง์ ์ง์ ํ ์ ์์ด.
<!-- bg-{color}/{opacity} ํํ -->
<div class="bg-blue-500/10"> <!-- blue-500 ์์, 10% ๋ถํฌ๋ช
๋ -->
<div class="bg-blue-500/50"> <!-- blue-500 ์์, 50% ๋ถํฌ๋ช
๋ -->
<div class="bg-blue-500/75"> <!-- blue-500 ์์, 75% ๋ถํฌ๋ช
๋ -->
<!-- text ์๋ ์ ์ฉ -->
<p class="text-gray-900/60"> <!-- gray-900 ์์, 60% ๋ถํฌ๋ช
๋ -->
<!-- border ์๋ ์ ์ฉ -->
<div class="border border-gray-900/10"> <!-- ํ
๋๋ฆฌ์ ์ฝํ ๋ถํฌ๋ช
๋ -->์ค์ ์ฌ๋ก: ์ค๋ฒ๋ ์ด ๋ฐฐ๊ฒฝ
{/* ๋ชจ๋ฌ ์ค๋ฒ๋ ์ด: ๊ฒ์ ๋ฐฐ๊ฒฝ 50% ํฌ๋ช
*/}
<div className="fixed inset-0 bg-black/50 backdrop-blur-sm">
{/* ์นด๋ ํธ๋ฒ ์ค๋ฒ๋ ์ด */}
<div className="absolute inset-0 rounded-xl bg-blue-600/10 opacity-0 transition-opacity group-hover:opacity-100">
{/* ์ ๋ฆฌ ํจ๊ณผ ์นด๋ */}
<div className="rounded-xl border border-white/20 bg-white/10 p-6 backdrop-blur-md">๐ ์ด๋ฒ์ ๋ฐฐ์ด ๋ด์ฉ ์ด์ ๋ฆฌ
| ์นดํ ๊ณ ๋ฆฌ | ์ฃผ์ ํด๋์ค | ์ฉ๋ |
|---|---|---|
| ์์ ํ ์คํธ | text-gray-900, text-blue-600 | ๊ธ์ ์ |
| ์์ ๋ฐฐ๊ฒฝ | bg-white, bg-blue-100 | ๋ฐฐ๊ฒฝ ์ |
| ํฐํธ ํฌ๊ธฐ | text-sm, text-lg, text-2xl | ๊ธ์ ํฌ๊ธฐ |
| ํฐํธ ๊ตต๊ธฐ | font-medium, font-bold | ๊ตต๊ธฐ |
| ํ๊ฐ | leading-snug, leading-relaxed | ๊ฐ๋ ์ฑ |
| ๋ง์ค์ | truncate, line-clamp-2 | ํ ์คํธ ์๋ฅด๊ธฐ |
| ํฌ๋ช ๋ | bg-blue-500/50, text-gray-900/60 | ์์ ํฌ๋ช ๋ |
๐ ๋ง๋ฌด๋ฆฌ ํด์ฆ
Q1. ์์์ด ํผ๊ทธ๋ง์์ ์์ #1D4ED8 ์ ์ง์ ํ๋ค. ์ด์ ํด๋นํ๋ Tailwind ์์ ํด๋์ค๋?
โ
์ ๋ต: blue-700 (๋ฐฐ๊ฒฝ์ด๋ฉด bg-blue-700, ํ
์คํธ๋ฉด text-blue-700)
๐ก ์์ธ ํด์ค:
- Tailwind ์
blue-700์ hex ๊ฐ์ด ์ ํํ#1d4ed8์ผ. ์ด์ฒ๋ผ Tailwind ๊ธฐ๋ณธ ํ๋ ํธ๋ ์ ์๋ ค์ง ์์ ๊ฐ๋ค์ ์ด๋ฏธ ํฌํจํ๊ณ ์์ด. - ์์๊ฐ
text-[#1D4ED8]๋ก ์ฐ๋ฉด ์์ ์ผ๊ด์ฑ์ Tailwind ์์คํ ์ด ์ถ์ ํ ์ ์์ด. ํ ์ ์ฒด๊ฐblue-700์ ์ด๋ค๋ ์ปจ๋ฒค์ ์ด ์์ผ๋ฉด ์์ ์blue-700 โ blue-600์ผ๋ก ์ ์ญ ๊ต์ฒด๊ฐ ์ฌ์. - ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "์์๊ฐ๋ณด๋ค ํ๋ ํธ ๋จผ์ . ํ๋ ํธ์ ์์ผ๋ฉด @theme ์ ์ถ๊ฐ."
Q2. ์์ฒ ์ด๊ฐ ์นด๋ ์ ๋ชฉ(h3)์ ์ ํฉํ ํ์ดํฌ๊ทธ๋ํผ ์กฐํฉ์ ๋ง๋ค์ด์ผ ํ๋ค. 18px, ๊ตต๊ธฐ 700, ํ๊ฐ ์ข๊ฒ, ์งํ ํ์ โ ์ฌ๋ฐ๋ฅธ ํด๋์ค ์กฐํฉ์?
โ
์ ๋ต: text-lg font-bold leading-snug text-gray-900
๐ก ์์ธ ํด์ค:
text-lg: 18pxfont-bold: font-weight 700leading-snug: line-height 1.375 (์ ๋ชฉ์ ์ ํฉํ ์ข์ ํ๊ฐ)text-gray-900: ๊ฐ์ฅ ์งํ ํ์ (๊ฑฐ์ ๊ฒ์ ์ ๊ฐ๊น์ ์ ๋ชฉ์ ์ ํฉ)- ๋ณธ๋ฌธ ํ
์คํธ๋
text-base leading-relaxed text-gray-700์ด ์ผ๋ฐ์ . ์ ๋ชฉ์ tight, ๋ณธ๋ฌธ์ relaxed. - ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "์ ๋ชฉ์ tight(snug), ๋ณธ๋ฌธ์ relaxed."
Q3. ๋ชจ๋ฌ ๋ฐฐ๊ฒฝ ์ค๋ฒ๋ ์ด๋ฅผ ๊ฒ์ ์ 50% ํฌ๋ช ๋๋ก ๋ง๋ค๊ณ ์ถ๋ค. ์ฌ๋ฐ๋ฅธ Tailwind ์ฝ๋๋?
โ
์ ๋ต: bg-black/50
๐ก ์์ธ ํด์ค:
- Tailwind v3 ์ด์์์๋
{color}/{opacity}ํ์์ผ๋ก ํฌ๋ช ๋๋ฅผ ์ง์ ์ง์ ํ ์ ์์ด. bg-black/50=background-color: rgb(0 0 0 / 0.5)โ ๊ฒ์ ์ 50% ํฌ๋ช ๋.- ์์ ๋ฐฉ์
bg-black bg-opacity-50๋ ๋์ํ์ง๋ง, ์ฌ๋์ ๋ฐฉ์์ด ๋ ๊ฐ๊ฒฐํ๊ณ ๋ชจ๋ํด. - ์ถ๊ฐ๋ก
backdrop-blur-sm์ ๊ฐ์ด ์ฐ๋ฉด ๋ฐฐ๊ฒฝ ํ๋ฆฌ๊ธฐ ํจ๊ณผ๊น์ง ์ค ์ ์์ด. - ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "ํฌ๋ช
๋๋ ์ฌ๋์๋ก โ
bg-black/50."
๐ฃ ์์ฒ ์ด์ ํด๊ทผ ์ผ๊ธฐ
์์ ํ๋ ํธ ๋ฒํธ ์ฒด๊ณ๊ฐ ์ฒ์์ ๋ฏ์ค์๋๋ฐ, 50์ด ์ ์ผ ๋ฐ๊ณ 950์ด ์ ์ผ ์ด๋์ด ๊ฑฐ๋ผ๋ ๊ฑธ ์๊ณ ๋๋๊น ๋ฐ๋ก ์ง๊ด์ด ์๊ฒผ๋ค. ์ด์ ํผ๊ทธ๋ง ๋ณด๋ฉด์ "์ด๊ฑฐ blue-600 ์ด๊ฒ ๋ค" ์ถ์ผ๋ฉด ๊ฑฐ์ ๋ง๋๋ผ.
๊ทธ๋ฆฌ๊ณ bg-black/50 ๊ฐ์ ํฌ๋ช
๋ ์์ ์๊ฐ ์๊ฐ๋ณด๋ค ๊ฐ๋ ฅํ๋ค. ๋ชจ๋ฌ ์ค๋ฒ๋ ์ด ๋ง๋ค ๋ bg-opacity-50 ์ด๋ผ๊ณ ์ฐ๋ ๊ฑธ ์ด๋ ๊ฒ ์ค์ผ ์ ์์ผ๋๊น.
๐ก ์ค๋์ ๊ตํ: "์์์ ํ๋ ํธ ์์คํ ์ผ๋ก, ํฌ๋ช ๋๋ ์ฌ๋์๋ก. ์์๊ฐ์ ๋์์ธ ์์คํ ์ ์ ์ด๋ค."
๋ด์ผ ์์ ๋ํํ "์๋น์ค์ ์์ ํ ํฐ ์ ์ ์ ๋๋ก ํ๋ฉด ๋์์ธ ๋ณ๊ฒฝ ๋น์ฉ์ด ํ ์ค์ด์" ๋ผ๊ณ ํ๋ฒ ์ดํํด๋ด์ผ์ง. ์ค๋ ๋ฐฐ์ด ๊ฑฐ ์จ๋จน์ด์ผ์ง! ํด๊ทผํ๊ณ ์ง์์ ์ปคํผ ํ ์ ๋ง์๋ฉด์ ์์ ์์คํ ์ ๋ฆฌํด๋ด์ผ๊ฒ ๋ค. โ