๐ŸŽจ Tailwind 4์žฅ: ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ์™€ ์ƒ‰์ƒ ์‹œ์Šคํ…œ

2026๋…„ 3์›” 5์ผ ์ˆ˜์ •๋จ

๐Ÿ“‹ ๊ฐœ์š”

Tailwind ์˜ ํฐํŠธ, ์ƒ‰์ƒ, ํ…์ŠคํŠธ ์œ ํ‹ธ๋ฆฌํ‹ฐ โ€” ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ๋‘ ์ถ•์„ ํด๋ž˜์Šค๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•˜๊ธฐ

๐Ÿ“‹ ๋ชฉ์ฐจ


๐Ÿ“Œ ์ด ๋ฌธ์„œ๋ฅผ ์ฝ๊ธฐ ์ „์—

โฑ๏ธ ์˜ˆ์ƒ ์ฝ๊ธฐ ์‹œ๊ฐ„: 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: 18px
  • font-bold: font-weight 700
  • leading-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 ์ด๋ผ๊ณ  ์“ฐ๋˜ ๊ฑธ ์ด๋ ‡๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ.

๐Ÿ’ก ์˜ค๋Š˜์˜ ๊ตํ›ˆ: "์ƒ‰์ƒ์€ ํŒ”๋ ˆํŠธ ์‹œ์Šคํ…œ์œผ๋กœ, ํˆฌ๋ช…๋„๋Š” ์Šฌ๋ž˜์‹œ๋กœ. ์ž„์˜๊ฐ’์€ ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ์ ์ด๋‹ค."

๋‚ด์ผ ์˜์ˆ˜ ๋‹˜ํ•œํ…Œ "์„œ๋น„์Šค์— ์ƒ‰์ƒ ํ† ํฐ ์ •์˜ ์ œ๋Œ€๋กœ ํ•˜๋ฉด ๋””์ž์ธ ๋ณ€๊ฒฝ ๋น„์šฉ์ด ํ™• ์ค„์–ด์š”" ๋ผ๊ณ  ํ•œ๋ฒˆ ์–ดํ•„ํ•ด๋ด์•ผ์ง€. ์˜ค๋Š˜ ๋ฐฐ์šด ๊ฑฐ ์จ๋จน์–ด์•ผ์ง€! ํ‡ด๊ทผํ•˜๊ณ  ์ง‘์—์„œ ์ปคํ”ผ ํ•œ ์ž” ๋งˆ์‹œ๋ฉด์„œ ์ƒ‰์ƒ ์‹œ์Šคํ…œ ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค. โ˜•


๐Ÿ”— ๋” ์•Œ์•„๋ณด๊ธฐ