{"id":5,"date":"2026-06-26T13:10:34","date_gmt":"2026-06-26T13:10:34","guid":{"rendered":"https:\/\/aabbee.cafe24.com\/?p=5"},"modified":"2026-06-26T14:02:47","modified_gmt":"2026-06-26T14:02:47","slug":"tailwind","status":"publish","type":"post","link":"https:\/\/coalacoding.com\/?p=5","title":{"rendered":"Tailwind CSS"},"content":{"rendered":"<h1>Tailwind CSS<\/h1>\n<p>\ubcf4\ud1b5 \uc6f9\uc0ac\uc774\ud2b8\ub97c \uafb8\ubc00 \ub54c\ub294 \ubcc4\ub3c4\uc758 CSS \ud30c\uc77c\uc5d0 \ucf54\ub4dc\ub97c \uae38\uac8c \uc791\uc131\ud574\uc57c \ud55c\ub2e4. \ud558\uc9c0\ub9cc Tailwind\ub294 <strong>&quot;\uc774\ubbf8 \ub9cc\ub4e4\uc5b4\uc9c4 \ud0dc\uadf8(Class)&quot;<\/strong>\ub97c HTML\uc5d0 \ubc14\ub85c \ubd99\uc5ec\uc11c \ub514\uc790\uc778\ud558\ub294 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n<hr>\n<p><a href=\"https:\/\/tailwindcss.com\/\">\ud14c\uc77c\uc708\ub4dc \uacf5\uc2dd<\/a><\/p>\n<p><a href=\"https:\/\/kombai.com\/tailwind\/cheat-sheet\/\">\ud14c\uc77c\uc708\ub4dc \uce58\ud2b8\uc2dc\ud2b8<\/a><br \/>\n<\/p>\n<p><a href=\"https:\/\/www.figma.com\/community\/file\/958383439532195363\/official-tailwind-css-styles\">\uacf5\uc2dd\ud14c\uc77c\uc708\ub4dc \ud53c\uadf8\ub9c8 \uc2a4\ud0c0\uc77c\ud30c\uc77c<\/a><\/p>\n<p><\/p>\n<p><a href=\"https:\/\/www.figma.com\/community\/plugin\/1513618945140968492\/tailwind-tokens-create-tailwind-css-variables-styles\">\ud14c\uc77c\uc708\ub4dc \ub514\uc790\uc778\ud1a0\ud070 \uc0dd\uc131\uae30 \ud53c\uadf8\ub9c8 \ud50c\ub7ec\uadf8\uc778<\/a><\/p>\n<p><\/p>\n<hr>\n<h2>1. Basics \u2014 \uc124\uce58<\/h2>\n<h3>NPM \uc124\uce58 (Vite \uae30\uc900)<\/h3>\n<ol>\n<li>\ud130\ubbf8\ub110\uc5d0 \uc544\ub798 \uba85\ub839\uc5b4 \uc785\ub825<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">npm install tailwindcss @tailwindcss\/vite\n<\/code><\/pre>\n<ol start=\"2\">\n<li><strong>vite.config.js<\/strong> \ud30c\uc77c\uc5d0 \uc544\ub798 \ucf54\ub4dc \ucd94\uac00<\/li>\n<\/ol>\n<pre><code class=\"language-js\">import { defineConfig } from &#39;vite&#39;\nimport react from &#39;@vitejs\/plugin-react&#39;\nimport tailwindcss from &#39;@tailwindcss\/vite&#39;   \/\/ \u2190 \ucd94\uac00\n\nexport default defineConfig({\n  plugins: [react(), tailwindcss()],\n})\n<\/code><\/pre>\n<ol start=\"3\">\n<li><strong>src\/index.css<\/strong> \uc5d0 \uc544\ub798 \ucf54\ub4dc \ucd94\uac00<\/li>\n<\/ol>\n<pre><code class=\"language-css\">@import &quot;tailwindcss&quot;;\n<\/code><\/pre>\n<h3>CDN \uc124\uce58<\/h3>\n<p>HTML\uc758 <code>&lt;head&gt;<\/code> \ud0dc\uadf8 \uc548\uc5d0 \uc544\ub798 \ucf54\ub4dc\ub97c \uc0bd\uc785\ud55c\ub2e4.<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n  &lt;meta charset=&quot;UTF-8&quot;&gt;\n  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n  &lt;script src=&quot;https:\/\/unpkg.com\/@tailwindcss\/browser@4&quot;&gt;&lt;\/script&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;h1 class=&quot;text-3xl font-bold text-blue-600 underline&quot;&gt;\n    Hello, Tailwind!\n  &lt;\/h1&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n<blockquote>\n<p><strong>Tip<\/strong>: <strong>\uc720\ud2f8\ub9ac\ud2f0 \uc6b0\uc120(Utility-First)<\/strong><\/p>\n<ul>\n<li>\uae30\uc874 \ubc29\uc2dd: <code>.btn { background: blue; }<\/code> \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 HTML\uc5d0\uc11c \uc801\uc6a9\ud55c\ub2e4.<\/li>\n<li>Tailwind \ubc29\uc2dd: <code>class=&quot;bg-blue-500 text-white&quot;<\/code>\uc640 \uac19\uc774 \uc774\ubbf8 \uc815\uc758\ub41c \ud074\ub798\uc2a4\ub97c \uc870\ud569\ud55c\ub2e4.<\/li>\n<\/ul>\n<\/blockquote>\n<hr>\n<h2>2. Sizing<\/h2>\n<h3>2.1. Width<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>\uac12<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>w-{n}<\/code><\/td>\n<td>spacing \uc2a4\ucf00\uc77c (w-4 = 16px)<\/td>\n<\/tr>\n<tr>\n<td><code>w-full<\/code><\/td>\n<td>100%<\/td>\n<\/tr>\n<tr>\n<td><code>w-screen<\/code><\/td>\n<td>100vw<\/td>\n<\/tr>\n<tr>\n<td><code>w-auto<\/code><\/td>\n<td>auto<\/td>\n<\/tr>\n<tr>\n<td><code>w-1\/2<\/code>, <code>w-1\/3<\/code>, <code>w-2\/3<\/code><\/td>\n<td>50%, 33.3%, 66.6%<\/td>\n<\/tr>\n<tr>\n<td><code>w-1\/4<\/code>, <code>w-3\/4<\/code><\/td>\n<td>25%, 75%<\/td>\n<\/tr>\n<tr>\n<td><code>w-[200px]<\/code><\/td>\n<td>\uc784\uc758\uac12<\/td>\n<\/tr>\n<tr>\n<td><code>min-w-0<\/code>, <code>min-w-full<\/code><\/td>\n<td>\ucd5c\uc19f\uac12<\/td>\n<\/tr>\n<tr>\n<td><code>max-w-sm<\/code> ~ <code>max-w-7xl<\/code><\/td>\n<td>\ucd5c\ub313\uac12 (sm=24rem~)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>2.2. Height<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>\uac12<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>h-{n}<\/code><\/td>\n<td>spacing \uc2a4\ucf00\uc77c<\/td>\n<\/tr>\n<tr>\n<td><code>h-full<\/code><\/td>\n<td>100%<\/td>\n<\/tr>\n<tr>\n<td><code>h-screen<\/code><\/td>\n<td>100vh<\/td>\n<\/tr>\n<tr>\n<td><code>h-auto<\/code><\/td>\n<td>auto<\/td>\n<\/tr>\n<tr>\n<td><code>min-h-screen<\/code><\/td>\n<td>min-height: 100vh<\/td>\n<\/tr>\n<tr>\n<td><code>min-h-0<\/code><\/td>\n<td>min-height: 0<\/td>\n<\/tr>\n<tr>\n<td><code>h-dvh<\/code><\/td>\n<td>100dvh (\ub3d9\uc801 \ubdf0\ud3ec\ud2b8)<\/td>\n<\/tr>\n<tr>\n<td><code>h-svh<\/code><\/td>\n<td>100svh (\uc18c\ud615 \ubdf0\ud3ec\ud2b8)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>2.3. size \ub2e8\ucd95 \ud074\ub798\uc2a4<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>\uac12<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>size-10<\/code><\/td>\n<td>w-10 h-10<\/td>\n<\/tr>\n<tr>\n<td><code>size-[200px]<\/code><\/td>\n<td>w-200px h-200px<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code class=\"language-jsx\">\/\/ 1\ub2e8\uacc4: w-full, h-16 \u2014 \uace0\uc815 \ud06c\uae30\n&lt;div className=&quot;w-full&quot;&gt;\uac00\ub85c 100%&lt;\/div&gt;\n&lt;div className=&quot;h-16&quot;&gt;\ub192\uc774 64px&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 2\ub2e8\uacc4: \ube44\uc728 \u2014 \ubd80\ubaa8 \uae30\uc900 \ubc31\ubd84\uc728\n&lt;div className=&quot;w-1\/2&quot;&gt;\ubd80\ubaa8\uc758 50%&lt;\/div&gt;\n&lt;div className=&quot;w-1\/3&quot;&gt;\ubd80\ubaa8\uc758 33%&lt;\/div&gt;\n&lt;div className=&quot;w-2\/3&quot;&gt;\ubd80\ubaa8\uc758 66%&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 3\ub2e8\uacc4: max-w \u2014 \ucd5c\ub300 \ub108\ube44 \uc81c\ud55c (\ubc18\uc751\ud615\uc5d0 \uc790\uc8fc \uc0ac\uc6a9)\n&lt;div className=&quot;w-full max-w-xl&quot;&gt;\ucd5c\ub300 576px\uae4c\uc9c0\ub9cc&lt;\/div&gt;\n&lt;div className=&quot;w-full max-w-4xl mx-auto&quot;&gt;\ucd5c\ub300 \ub108\ube44 + \uac00\uc6b4\ub370 \uc815\ub82c&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 4\ub2e8\uacc4: size \u2014 \uac00\ub85c\u00b7\uc138\ub85c \ub3d9\uc2dc \uc9c0\uc815\n&lt;div className=&quot;size-10&quot;&gt;40x40&lt;\/div&gt;\n&lt;div className=&quot;size-16&quot;&gt;64x64&lt;\/div&gt;\n&lt;div className=&quot;size-[200px]&quot;&gt;200x200&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<h2>3. Typography \u2014 \ud0c0\uc774\ud3ec\uadf8\ub798\ud53c<\/h2>\n<h3>3.1. Font Size (text-*)<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>\ud06c\uae30<\/th>\n<th>line-height<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>text-xs<\/code><\/td>\n<td>12px<\/td>\n<td>1rem<\/td>\n<\/tr>\n<tr>\n<td><code>text-sm<\/code><\/td>\n<td>14px<\/td>\n<td>1.25rem<\/td>\n<\/tr>\n<tr>\n<td><code>text-base<\/code><\/td>\n<td>16px<\/td>\n<td>1.5rem<\/td>\n<\/tr>\n<tr>\n<td><code>text-lg<\/code><\/td>\n<td>18px<\/td>\n<td>1.75rem<\/td>\n<\/tr>\n<tr>\n<td><code>text-xl<\/code><\/td>\n<td>20px<\/td>\n<td>1.75rem<\/td>\n<\/tr>\n<tr>\n<td><code>text-2xl<\/code><\/td>\n<td>24px<\/td>\n<td>2rem<\/td>\n<\/tr>\n<tr>\n<td><code>text-3xl<\/code><\/td>\n<td>30px<\/td>\n<td>2.25rem<\/td>\n<\/tr>\n<tr>\n<td><code>text-4xl<\/code><\/td>\n<td>36px<\/td>\n<td>2.5rem<\/td>\n<\/tr>\n<tr>\n<td><code>text-5xl<\/code><\/td>\n<td>48px<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td><code>text-6xl<\/code><\/td>\n<td>60px<\/td>\n<td>1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>3.2. Font Weight<\/h3>\n<pre><code class=\"language-css\">font-thin       \/* 100 *\/\nfont-extralight \/* 200 *\/\nfont-light      \/* 300 *\/\nfont-normal     \/* 400 *\/\nfont-medium     \/* 500 *\/\nfont-semibold   \/* 600 *\/\nfont-bold       \/* 700 *\/\nfont-extrabold  \/* 800 *\/\nfont-black      \/* 900 *\/\n<\/code><\/pre>\n<h3>3.3. Text \uc0c9\uc0c1<\/h3>\n<pre><code class=\"language-css\">text-white        text-black\ntext-gray-500     text-gray-900\ntext-yellow-300   text-yellow-400\ntext-blue-600     text-red-500\ntext-white\/80     \/* \ud22c\uba85\ub3c4 \ud3ec\ud568 *\/\n<\/code><\/pre>\n<h3>3.4. Text \uc815\ub82c \u00b7 \ubcc0\ud658 \u00b7 \uc7a5\uc2dd<\/h3>\n<pre><code class=\"language-css\">\/* \uc815\ub82c *\/\ntext-left   text-center   text-right   text-justify\n\n\/* \ubcc0\ud658 *\/\nuppercase   lowercase   capitalize   normal-case\n\n\/* \uc7a5\uc2dd *\/\nunderline   line-through   no-underline   overline\n\n\/* \uc624\ubc84\ud50c\ub85c \ucc98\ub9ac *\/\ntruncate          \/* \ud55c \uc904 \ub9d0\uc904\uc784 *\/\nline-clamp-2      \/* 2\uc904 \ub9d0\uc904\uc784 *\/\nline-clamp-3      \/* 3\uc904 \ub9d0\uc904\uc784 *\/\nwhitespace-nowrap \/* \uc904\ubc14\uafc8 \uae08\uc9c0 *\/\n<\/code><\/pre>\n<h3>3.5. Letter Spacing \u00b7 Line Height<\/h3>\n<pre><code class=\"language-css\">\/* \uc790\uac04 *\/\ntracking-tight    tracking-normal    tracking-wide    tracking-widest\n\n\/* \ud589\uac04 *\/\nleading-none      \/* 1 *\/\nleading-tight     \/* 1.25 *\/\nleading-normal    \/* 1.5 *\/\nleading-loose     \/* 2 *\/\nleading-[1.8]     \/* \uc784\uc758\uac12 *\/\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 1\ub2e8\uacc4: text-size \u2014 \uae00\uc790 \ud06c\uae30\n&lt;p className=&quot;text-sm&quot;&gt;\uc791\uc740 \ud14d\uc2a4\ud2b8 (14px)&lt;\/p&gt;\n&lt;p className=&quot;text-base&quot;&gt;\uae30\ubcf8 \ud14d\uc2a4\ud2b8 (16px)&lt;\/p&gt;\n&lt;p className=&quot;text-xl&quot;&gt;\ud070 \ud14d\uc2a4\ud2b8 (20px)&lt;\/p&gt;\n&lt;p className=&quot;text-4xl&quot;&gt;\uc81c\ubaa9\uc6a9 \ud14d\uc2a4\ud2b8 (36px)&lt;\/p&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 2\ub2e8\uacc4: font-weight \u2014 \uad75\uae30\n&lt;p className=&quot;font-normal&quot;&gt;\uc77c\ubc18 \uad75\uae30&lt;\/p&gt;\n&lt;p className=&quot;font-bold&quot;&gt;\uad75\uac8c&lt;\/p&gt;\n&lt;p className=&quot;font-black&quot;&gt;\uac00\uc7a5 \uad75\uac8c&lt;\/p&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 3\ub2e8\uacc4: text-color \u2014 \uc0c9\uc0c1\n&lt;p className=&quot;text-white&quot;&gt;\ud770\uc0c9&lt;\/p&gt;\n&lt;p className=&quot;text-gray-400&quot;&gt;\ud68c\uc0c9&lt;\/p&gt;\n&lt;p className=&quot;text-yellow-400&quot;&gt;\ub178\ub780\uc0c9&lt;\/p&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 4\ub2e8\uacc4: text-align \u2014 \uc815\ub82c\n&lt;p className=&quot;text-left&quot;&gt;\uc67c\ucabd \uc815\ub82c&lt;\/p&gt;\n&lt;p className=&quot;text-center&quot;&gt;\uac00\uc6b4\ub370 \uc815\ub82c&lt;\/p&gt;\n&lt;p className=&quot;text-right&quot;&gt;\uc624\ub978\ucabd \uc815\ub82c&lt;\/p&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 5\ub2e8\uacc4: truncate \/ line-clamp \u2014 \ub118\uce58\ub294 \ud14d\uc2a4\ud2b8 \ucc98\ub9ac\n&lt;p className=&quot;truncate&quot;&gt;\ud55c \uc904\uc744 \ub118\uc73c\uba74 \ub9d0\uc904\uc784\ud45c\ub85c \uc798\ub9bc...&lt;\/p&gt;\n&lt;p className=&quot;line-clamp-2&quot;&gt;\ub450 \uc904\uc744 \ub118\uc73c\uba74 \uc798\ub9bc. \uae34 \ud14d\uc2a4\ud2b8 \uae34 \ud14d\uc2a4\ud2b8 \uae34 \ud14d\uc2a4\ud2b8 \uae34 \ud14d\uc2a4\ud2b8...&lt;\/p&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>4. Backgrounds \u2014 \ubc30\uacbd<\/h2>\n<h3>4.1. \uae30\ubcf8 \uc0c9\uc0c1 \ud314\ub808\ud2b8<\/h3>\n<p>Tailwind\uc758 \uc0c9\uc0c1\uc740 <strong>\uc0c9\uc0c1\uba85-\uc22b\uc790<\/strong> \ud615\ud0dc\uc774\ub2e4. \uc22b\uc790\uac00 \ud074\uc218\ub85d \uc5b4\ub450\uc6cc\uc9c4\ub2e4 (50 \uac00\uc7a5 \ubc1d\uc74c, 950 \uac00\uc7a5 \uc5b4\ub450\uc6c0).<\/p>\n<table>\n<thead>\n<tr>\n<th>\uc0c9\uc0c1\uba85<\/th>\n<th>\ub300\ud45c \ud074\ub798\uc2a4 \uc608\uc2dc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>slate, gray, zinc, neutral, stone<\/td>\n<td>\ubb34\ucc44\uc0c9 \uacc4\uc5f4<\/td>\n<\/tr>\n<tr>\n<td>red, orange, amber, yellow<\/td>\n<td>\ub530\ub73b\ud55c \uacc4\uc5f4<\/td>\n<\/tr>\n<tr>\n<td>lime, green, emerald, teal<\/td>\n<td>\ucd08\ub85d \uacc4\uc5f4<\/td>\n<\/tr>\n<tr>\n<td>cyan, sky, blue, indigo<\/td>\n<td>\ud30c\ub780 \uacc4\uc5f4<\/td>\n<\/tr>\n<tr>\n<td>violet, purple, fuchsia, pink, rose<\/td>\n<td>\ubcf4\ub77c\u00b7\ubd84\ud64d \uacc4\uc5f4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>4.2. \ubc30\uacbd\uc0c9 \uc801\uc6a9<\/h3>\n<pre><code class=\"language-css\">\/* \ubc30\uacbd\uc0c9 *\/\nbg-white          bg-black\nbg-gray-900       bg-gray-800\nbg-yellow-400     bg-blue-600\n\n\/* \ud22c\uba85\ub3c4 (\uc2ac\ub798\uc2dc \ubb38\ubc95) *\/\nbg-black\/50       \/* background: rgba(0,0,0,0.5) *\/\nbg-white\/10       \/* background: rgba(255,255,255,0.1) *\/\nbg-black\/90       \/* GOFLIX \ud5e4\ub354\uc5d0 \uc0ac\uc6a9 *\/\n<\/code><\/pre>\n<h3>4.3. \ud14c\ub450\ub9ac \uc0c9\uc0c1<\/h3>\n<pre><code class=\"language-css\">border-gray-200   border-yellow-400   border-transparent\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 1\ub2e8\uacc4: bg-color \u2014 \ub2e8\uc0c9 \ubc30\uacbd\n&lt;div className=&quot;bg-black&quot;&gt;\uac80\uc740 \ubc30\uacbd&lt;\/div&gt;\n&lt;div className=&quot;bg-gray-800&quot;&gt;\uc5b4\ub450\uc6b4 \ud68c\uc0c9 \ubc30\uacbd&lt;\/div&gt;\n&lt;div className=&quot;bg-yellow-400&quot;&gt;\ub178\ub780 \ubc30\uacbd&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 2\ub2e8\uacc4: bg-color + text-color \u2014 \ubc30\uacbd\uacfc \ud14d\uc2a4\ud2b8 \uc0c9\uc0c1 \ud568\uaed8\n&lt;div className=&quot;bg-gray-900 text-white&quot;&gt;\uc5b4\ub450\uc6b4 \ubc30\uacbd\uc5d0 \ud770 \ud14d\uc2a4\ud2b8&lt;\/div&gt;\n&lt;div className=&quot;bg-yellow-400 text-black&quot;&gt;\ub178\ub780 \ubc30\uacbd\uc5d0 \uac80\uc740 \ud14d\uc2a4\ud2b8&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 3\ub2e8\uacc4: bg-color\/\ud22c\uba85\ub3c4 \u2014 \uc2ac\ub798\uc2dc\ub85c \ubd88\ud22c\uba85\ub3c4 \uc870\uc808\n&lt;div className=&quot;bg-black\/50&quot;&gt;50% \ud22c\uba85\ud55c \uac80\uc740 \ubc30\uacbd&lt;\/div&gt;\n&lt;div className=&quot;bg-black\/90&quot;&gt;90% \ubd88\ud22c\uba85\ud55c \uac80\uc740 \ubc30\uacbd&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">\/\/ 4\ub2e8\uacc4: bg-gradient \u2014 \uadf8\ub77c\ub514\uc5b8\ud2b8 \ubc30\uacbd\n&lt;div className=&quot;bg-gradient-to-r from-black to-gray-800&quot;&gt;\uc88c \u2192 \uc6b0&lt;\/div&gt;\n&lt;div className=&quot;bg-gradient-to-t from-black to-transparent&quot;&gt;\uc544\ub798 \u2192 \uc704(\ud22c\uba85)&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<h2>5. Borders \u2014 \ud14c\ub450\ub9ac &amp; Ring<\/h2>\n<h3>5.1. Border Width \u00b7 Color \u00b7 Style<\/h3>\n<pre><code class=\"language-html\">\n&lt;div class=&quot;border border-gray-200&quot;&gt;1px \ud14c\ub450\ub9ac&lt;\/div&gt;\n&lt;div class=&quot;border-2 border-blue-500&quot;&gt;2px \ud30c\ub780 \ud14c\ub450\ub9ac&lt;\/div&gt;\n&lt;div class=&quot;border-4 border-dashed border-red-400&quot;&gt;4px \uc810\uc120&lt;\/div&gt;\n\n\n&lt;div class=&quot;border-b border-gray-200&quot;&gt;\ud558\ub2e8\ub9cc&lt;\/div&gt;\n&lt;div class=&quot;border-t-2 border-l-2 border-blue-300&quot;&gt;\uc0c1\ub2e8+\uc88c\uce21&lt;\/div&gt;\n\n\n&lt;div class=&quot;rounded-sm&quot;&gt;\uc57d\uac04&lt;\/div&gt;\n&lt;div class=&quot;rounded-lg&quot;&gt;\uc911\uac04&lt;\/div&gt;\n&lt;div class=&quot;rounded-2xl&quot;&gt;\ud070 (\uce74\ub4dc)&lt;\/div&gt;\n&lt;div class=&quot;rounded-full&quot;&gt;\uc6d0\ud615&lt;\/div&gt;\n<\/code><\/pre>\n<blockquote>\n<p><strong>None<\/strong>: 1: <code>border<\/code> \u2014 \uae30\ubcf8 1px \ud68c\uc0c9 \ud14c\ub450\ub9ac<br \/>\n2: <code>border-2<\/code> \u2014 2px, <code>border-blue-500<\/code> \u2014 \ud30c\ub780\uc0c9<br \/>\n3: <code>border-dashed<\/code> \u2014 \uc810\uc120 \uc2a4\ud0c0\uc77c<br \/>\n5: <code>border-b<\/code> \u2014 \uc544\ub798\ucabd\ub9cc, <code>border-t-2 border-l-2<\/code> \u2014 \uc704\ucabd\uacfc \uc67c\ucabd 2px<br \/>\n9~12: <code>rounded-*<\/code> \u2014 \ubaa8\uc11c\ub9ac \ubc18\uc9c0\ub984 (sm <code>&lt;<\/code> lg <code>&lt;<\/code> 2xl, full=50%)<\/p>\n<\/blockquote>\n<hr>\n<h2>18. GOFLIX \ud504\ub85c\uc81d\ud2b8 \uc801\uc6a9 \uc608\uc2dc<\/h2>\n<p>Tailwind\ub85c \uc601\ud654 \uc815\ubcf4 \uc0ac\uc774\ud2b8\ub97c \ub9cc\ub4dc\ub294 \uc2e4\uc804 \uc608\uc2dc\uc785\ub2c8\ub2e4.<\/p>\n<h3>18.1. Header \ubd84\uc11d<\/h3>\n<pre><code class=\"language-jsx\">&lt;header className=&quot;fixed top-0 left-0 w-full py-4 px-2 bg-black\/90 z-50&quot;&gt;\n  {\/* fixed: \uc2a4\ud06c\ub864\ud574\ub3c4 \uace0\uc815 *\/}\n  {\/* top-0 left-0: \ud654\uba74 \ucd5c\uc0c1\ub2e8 \uc88c\uce21 *\/}\n  {\/* w-full: \uc804\uccb4 \ub108\ube44 *\/}\n  {\/* py-4 px-2: \uc0c1\ud558 16px, \uc88c\uc6b0 8px \ud328\ub529 *\/}\n  {\/* bg-black\/90: \uac80\uc740\uc0c9 \ubc30\uacbd 90% \ubd88\ud22c\uba85 *\/}\n  {\/* z-50: \ub2e4\ub978 \uc694\uc18c \uc704\uc5d0 \ud45c\uc2dc *\/}\n  &lt;div className=&quot;container mx-auto&quot;&gt;\n    &lt;Link to=&quot;\/&quot;&gt;\n      &lt;h1 className=&quot;text-3xl text-yellow-300 font-bold&quot;&gt;\n        {\/* text-3xl: 30px \ud14d\uc2a4\ud2b8 *\/}\n        {\/* text-yellow-300: \uc5f0\ud55c \ub178\ub780\uc0c9 *\/}\n        {\/* font-bold: \uad75\uc740 \uae00\uc528 *\/}\n        GOFLIX\n      &lt;\/h1&gt;\n    &lt;\/Link&gt;\n  &lt;\/div&gt;\n&lt;\/header&gt;\n<\/code><\/pre>\n<h3>18.2. \uc601\ud654 \uce74\ub4dc \ucef4\ud3ec\ub10c\ud2b8 \ud328\ud134<\/h3>\n<pre><code class=\"language-jsx\">function MovieCard({ movie }) {\n  return (\n    &lt;div className=&quot;group relative rounded-lg overflow-hidden cursor-pointer\n                    transition-transform duration-300 hover:scale-105\n                    shadow-lg hover:shadow-yellow-400\/30&quot;&gt;\n      {\/* \ud3ec\uc2a4\ud130 \uc774\ubbf8\uc9c0 *\/}\n      &lt;img\n        src={`https:\/\/image.tmdb.org\/t\/p\/w500${movie.poster_path}`}\n        alt={movie.title}\n        className=&quot;w-full aspect-[2\/3] object-cover&quot;\n      \/&gt;\n      {\/* \ud638\ubc84 \uc624\ubc84\ub808\uc774 *\/}\n      &lt;div className=&quot;absolute inset-0 bg-black\/70 opacity-0 group-hover:opacity-100\n                      transition-opacity duration-300 flex flex-col justify-end p-4&quot;&gt;\n        &lt;h3 className=&quot;text-white font-bold text-sm line-clamp-2&quot;&gt;{movie.title}&lt;\/h3&gt;\n        &lt;p className=&quot;text-yellow-300 text-xs mt-1&quot;&gt;\u2b50 {movie.vote_average.toFixed(1)}&lt;\/p&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  );\n}\n<\/code><\/pre>\n<h3>18.3. \uc804\uccb4 \ud398\uc774\uc9c0 \ub808\uc774\uc544\uc6c3<\/h3>\n<pre><code class=\"language-jsx\">\/\/ App.jsx\n&lt;main className=&quot;bg-black text-white min-h-screen pt-16&quot;&gt;\n  {\/* bg-black: \uac80\uc740 \ubc30\uacbd *\/}\n  {\/* text-white: \uae30\ubcf8 \ud14d\uc2a4\ud2b8 \ud770\uc0c9 *\/}\n  {\/* min-h-screen: \ucd5c\uc18c \uc804\uccb4 \ub192\uc774 *\/}\n  {\/* pt-16: \uc0c1\ub2e8 64px (fixed \ud5e4\ub354 \ub192\uc774\ub9cc\ud07c) *\/}\n  &lt;Outlet \/&gt;\n&lt;\/main&gt;\n\n\/\/ \ud648 \ud398\uc774\uc9c0\n&lt;section className=&quot;container mx-auto px-4 py-8&quot;&gt;\n  &lt;h2 className=&quot;text-2xl font-bold mb-6 text-yellow-300&quot;&gt;\uc778\uae30 \uc601\ud654&lt;\/h2&gt;\n  &lt;div className=&quot;grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4&quot;&gt;\n    {movies.map(movie =&gt; &lt;MovieCard key={movie.id} movie={movie} \/&gt;)}\n  &lt;\/div&gt;\n&lt;\/section&gt;\n<\/code><\/pre>\n<h3>18.4. \ubc84\ud2bc \uc2a4\ud0c0\uc77c \ud328\ud134<\/h3>\n<pre><code class=\"language-jsx\">{\/* \uc8fc\uc694 \uc561\uc158 \ubc84\ud2bc *\/}\n&lt;button className=&quot;bg-yellow-400 text-black font-bold px-6 py-2 rounded-lg\n                   hover:bg-yellow-300 active:scale-95\n                   transition-all duration-200 cursor-pointer&quot;&gt;\n  \uc790\uc138\ud788 \ubcf4\uae30\n&lt;\/button&gt;\n\n{\/* \ubcf4\uc870 \ubc84\ud2bc (\uc544\uc6c3\ub77c\uc778) *\/}\n&lt;button className=&quot;border-2 border-white text-white font-semibold px-6 py-2 rounded-lg\n                   hover:bg-white hover:text-black\n                   transition-all duration-200 cursor-pointer&quot;&gt;\n  \ubaa9\ub85d \ucd94\uac00\n&lt;\/button&gt;\n<\/code><\/pre>\n<h3>18.5. \uc601\ud654 \uc0c1\uc138 \ud398\uc774\uc9c0<\/h3>\n<pre><code class=\"language-jsx\">function MovieDetail({ movie }) {\n  return (\n    &lt;div className=&quot;relative min-h-screen bg-black text-white&quot;&gt;\n      {\/* \ubc30\uacbd \uc774\ubbf8\uc9c0 *\/}\n      &lt;div className=&quot;relative h-[60vh]&quot;&gt;\n        &lt;img\n          src={`https:\/\/image.tmdb.org\/t\/p\/original${movie.backdrop_path}`}\n          className=&quot;w-full h-full object-cover&quot;\n        \/&gt;\n        &lt;div className=&quot;absolute inset-0 bg-gradient-to-t from-black via-black\/40 to-transparent&quot; \/&gt;\n      &lt;\/div&gt;\n\n      {\/* \ucf58\ud150\uce20 *\/}\n      &lt;div className=&quot;container mx-auto px-4 -mt-32 relative z-10&quot;&gt;\n        &lt;div className=&quot;flex flex-col md:flex-row gap-8&quot;&gt;\n          &lt;img\n            src={`https:\/\/image.tmdb.org\/t\/p\/w300${movie.poster_path}`}\n            className=&quot;w-40 md:w-56 rounded-xl shadow-2xl flex-none mx-auto md:mx-0&quot;\n          \/&gt;\n          &lt;div className=&quot;flex-1&quot;&gt;\n            &lt;h1 className=&quot;text-3xl md:text-5xl font-black&quot;&gt;{movie.title}&lt;\/h1&gt;\n            &lt;div className=&quot;flex items-center gap-3 mt-3 text-sm text-gray-400&quot;&gt;\n              &lt;span className=&quot;text-yellow-400 font-bold&quot;&gt;\u2b50 {movie.vote_average.toFixed(1)}&lt;\/span&gt;\n              &lt;span&gt;{movie.release_date.slice(0, 4)}&lt;\/span&gt;\n            &lt;\/div&gt;\n            &lt;p className=&quot;mt-4 text-gray-300 leading-relaxed max-w-2xl line-clamp-4 md:line-clamp-none&quot;&gt;\n              {movie.overview}\n            &lt;\/p&gt;\n            &lt;div className=&quot;flex gap-3 mt-6&quot;&gt;\n              &lt;button className=&quot;bg-yellow-400 text-black font-bold px-6 py-3 rounded-lg\n                                 hover:bg-yellow-300 active:scale-95 transition-all duration-200&quot;&gt;\n                \u25b6 \uc7ac\uc0dd\n              &lt;\/button&gt;\n              &lt;button className=&quot;border border-white\/40 text-white px-6 py-3 rounded-lg\n                                 hover:bg-white\/10 transition-all duration-200&quot;&gt;\n                + \ub0b4 \ubaa9\ub85d\n              &lt;\/button&gt;\n            &lt;\/div&gt;\n          &lt;\/div&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  )\n}\n<\/code><\/pre>\n<blockquote>\n<p><strong>Tip<\/strong>: <strong>\ud074\ub798\uc2a4 \uc870\ud569 \ud301<\/strong><\/p>\n<p>\ubcf5\uc7a1\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uad00\uc2ec\uc0ac\ubcc4\ub85c \uc904\uc744 \ub098\ub220 \uc77d\uae30 \uc88b\uac8c \uc791\uc131\ud55c\ub2e4.<\/p>\n<p><strong>\ub808\uc774\uc544\uc6c3 \u2192 \ud06c\uae30 \u2192 \uc0c9\uc0c1 \u2192 \uc0c1\ud0dc<\/strong> \uc21c\uc73c\ub85c \ubc30\uce58\ud558\uba74 \uc720\uc9c0\ubcf4\uc218\uac00 \ud3b8\ud558\ub2e4.<\/p>\n<\/blockquote>\n<blockquote>\n<p><strong>Warning<\/strong>: <strong>\uc790\uc8fc \ud558\ub294 \uc2e4\uc218<\/strong><\/p>\n<ul>\n<li><code>hover:scale-105<\/code>\ub9cc \uc4f0\uba74 \uc560\ub2c8\uba54\uc774\uc158\uc774 \uc5c6\uc74c \u2192 <code>transition-transform duration-300<\/code> \ud544\uc218<\/li>\n<li><code>opacity-0 group-hover:opacity-100<\/code>\uc744 \uc4f8 \ub54c \ubd80\ubaa8\uc5d0 <code>group<\/code> \ud074\ub798\uc2a4 \ube60\ub728\ub9ac\uc9c0 \uc54a\uae30<\/li>\n<li><code>fixed<\/code> \ud5e4\ub354\uac00 \uc788\uc73c\uba74 main\uc5d0 <code>pt-{\ud5e4\ub354\ub192\uc774}<\/code> \ud544\uc218 (\uacb9\uce68 \ubc29\uc9c0)<\/li>\n<\/ul>\n<\/blockquote>\n<hr>\n<h2>6. Layout \u2014 \ub808\uc774\uc544\uc6c3 (Display \u00b7 Position)<\/h2>\n<h3>6.1. Display<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>CSS<\/th>\n<th>\uc124\uba85<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>block<\/code><\/td>\n<td><code>display: block<\/code><\/td>\n<td>\ube14\ub85d \uc694\uc18c<\/td>\n<\/tr>\n<tr>\n<td><code>inline<\/code><\/td>\n<td><code>display: inline<\/code><\/td>\n<td>\uc778\ub77c\uc778 \uc694\uc18c<\/td>\n<\/tr>\n<tr>\n<td><code>inline-block<\/code><\/td>\n<td><code>display: inline-block<\/code><\/td>\n<td>\uc778\ub77c\uc778 \ube14\ub85d<\/td>\n<\/tr>\n<tr>\n<td><code>flex<\/code><\/td>\n<td><code>display: flex<\/code><\/td>\n<td>\ud50c\ub809\uc2a4 \ucee8\ud14c\uc774\ub108<\/td>\n<\/tr>\n<tr>\n<td><code>inline-flex<\/code><\/td>\n<td><code>display: inline-flex<\/code><\/td>\n<td>\uc778\ub77c\uc778 \ud50c\ub809\uc2a4<\/td>\n<\/tr>\n<tr>\n<td><code>grid<\/code><\/td>\n<td><code>display: grid<\/code><\/td>\n<td>\uadf8\ub9ac\ub4dc \ucee8\ud14c\uc774\ub108<\/td>\n<\/tr>\n<tr>\n<td><code>hidden<\/code><\/td>\n<td><code>display: none<\/code><\/td>\n<td>\uc228\uae40<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code class=\"language-js\">&lt;div className=&quot;block&quot;&gt;block \u2014 \ud55c \uc904 \uc804\uccb4\ub97c \ucc28\uc9c0&lt;\/div&gt;\n&lt;span className=&quot;inline&quot;&gt;inline \u2014 \ub0b4\uc6a9 \ud06c\uae30\ub9cc\ud07c, \uc904\ubc14\uafc8 \uc5c6\uc74c&lt;\/span&gt;\n&lt;span className=&quot;inline-block&quot;&gt;inline-block \u2014 \uc904\ubc14\uafc8 \uc5c6\uc774 \ub098\ub780\ud788&lt;\/span&gt;\n&lt;div className=&quot;hidden&quot;&gt;hidden \u2014 \ud654\uba74\uc5d0\uc11c \uc644\uc804\ud788 \uc0ac\ub77c\uc9d0&lt;\/div&gt;\n<\/code><\/pre>\n<h3>6.2. Position<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>CSS<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>static<\/code><\/td>\n<td><code>position: static<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>relative<\/code><\/td>\n<td><code>position: relative<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>absolute<\/code><\/td>\n<td><code>position: absolute<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>fixed<\/code><\/td>\n<td><code>position: fixed<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>sticky<\/code><\/td>\n<td><code>position: sticky<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>6.3. \uc704\uce58 \uc9c0\uc815 (inset)<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>\uc758\ubbf8<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>top-0<\/code><\/td>\n<td>\uc704\uc5d0\uc11c 0<\/td>\n<\/tr>\n<tr>\n<td><code>left-0<\/code><\/td>\n<td>\uc67c\ucabd\uc5d0\uc11c 0<\/td>\n<\/tr>\n<tr>\n<td><code>inset-0<\/code><\/td>\n<td>\uc0c1\ud558\uc88c\uc6b0 \ubaa8\ub450 0<\/td>\n<\/tr>\n<tr>\n<td><code>inset-x-0<\/code><\/td>\n<td>\uc88c\uc6b0\ub9cc 0<\/td>\n<\/tr>\n<tr>\n<td><code>inset-y-0<\/code><\/td>\n<td>\uc0c1\ud558\ub9cc 0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: relative \u2014 \uc790\uc2dd\uc758 \uae30\uc900\uc810 \uc5ed\ud560\n&lt;div className=&quot;relative&quot;&gt;\n  \uae30\uc900\uc774 \ub418\ub294 \ubd80\ubaa8\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: absolute + top\/left \u2014 \ubd80\ubaa8 \uae30\uc900\uc73c\ub85c \uc704\uce58 \uc9c0\uc815\n&lt;div className=&quot;relative&quot;&gt;\n  &lt;div className=&quot;absolute top-0 left-0&quot;&gt;\uc67c\ucabd \uc704\uc5d0 \ubc30\uce58&lt;\/div&gt;\n  &lt;div className=&quot;absolute top-0 right-0&quot;&gt;\uc624\ub978\ucabd \uc704\uc5d0 \ubc30\uce58&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: inset-0 \u2014 \ubd80\ubaa8 \uc804\uccb4\ub97c \uaf49 \ucc44\uc6c0\n&lt;div className=&quot;relative&quot;&gt;\n  &lt;div className=&quot;absolute inset-0&quot;&gt;\ubd80\ubaa8 \uc804\uccb4 \ud06c\uae30\ub85c \ucc44\uc6c0&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: fixed \u2014 \uc2a4\ud06c\ub864\ud574\ub3c4 \ud654\uba74\uc5d0 \uace0\uc815\n&lt;header className=&quot;fixed top-0 left-0&quot;&gt;\uc2a4\ud06c\ub864\ud574\ub3c4 \uace0\uc815\ub418\ub294 \ud5e4\ub354&lt;\/header&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 5\ub2e8\uacc4: sticky \u2014 \uc2a4\ud06c\ub864 \uc2dc \ud2b9\uc815 \uc704\uce58\uc5d0 \ub2ec\ub77c\ubd99\uc74c\n&lt;h2 className=&quot;sticky top-0&quot;&gt;\uc2a4\ud06c\ub864\ud558\uba74 \uc0c1\ub2e8\uc5d0 \uace0\uc815\ub418\ub294 \uc81c\ubaa9&lt;\/h2&gt;\n<\/code><\/pre>\n<h3>6.4. z-index<\/h3>\n<pre><code class=\"language-js\">\/\/ \uc22b\uc790\uac00 \ud074\uc218\ub85d \uc704\uc5d0 \ud45c\uc2dc\ub428\n&lt;div className=&quot;z-0&quot;&gt;\ub9e8 \uc544\ub798&lt;\/div&gt;\n&lt;div className=&quot;z-10&quot;&gt;\uadf8 \uc704&lt;\/div&gt;\n&lt;div className=&quot;z-50&quot;&gt;\uac00\uc7a5 \uc704&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>7. Flexbox<\/h2>\n<p>\uac00\uc7a5 \ub9ce\uc774 \uc4f0\ub294 \ub808\uc774\uc544\uc6c3 \ubc29\uc2dd. \ubc29\ud5a5, \uc904\ubc14\uafc8, \uc790\uc2dd \ud06c\uae30\ub97c \ud074\ub798\uc2a4 \uc870\ud569\uc73c\ub85c \uc81c\uc5b4\ud55c\ub2e4.<\/p>\n<h3>7.1. \ubc29\ud5a5 (flex-direction)<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>CSS<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>flex-row<\/code><\/td>\n<td><code>flex-direction: row<\/code> (\uae30\ubcf8\uac12)<\/td>\n<\/tr>\n<tr>\n<td><code>flex-row-reverse<\/code><\/td>\n<td><code>flex-direction: row-reverse<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>flex-col<\/code><\/td>\n<td><code>flex-direction: column<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>flex-col-reverse<\/code><\/td>\n<td><code>flex-direction: column-reverse<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>7.2. \uc904\ubc14\uafc8 \u00b7 \uc790\uc2dd \ud06c\uae30<\/h3>\n<pre><code class=\"language-css\">\/* \uc904\ubc14\uafc8 *\/\nflex-wrap      flex-nowrap      flex-wrap-reverse\n\n\/* \uc790\uc2dd \uc694\uc18c \ud06c\uae30 \uc81c\uc5b4 *\/\nflex-1         \/* flex: 1 1 0% \u2014 \uacf5\uac04\uc744 \uade0\ub4f1 \ubd84\ud560 *\/\nflex-auto      \/* flex: 1 1 auto *\/\nflex-none      \/* flex: none \u2014 \ud06c\uae30 \uace0\uc815 *\/\n\n\/* \uac1c\ubcc4 \ud06c\uae30 *\/\ngrow           \/* flex-grow: 1 *\/\ngrow-0         \/* flex-grow: 0 *\/\nshrink         \/* flex-shrink: 1 *\/\nshrink-0       \/* flex-shrink: 0 *\/\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: flex \u2014 \uc790\uc2dd\uc744 \uac00\ub85c\ub85c \ub098\uc5f4\n&lt;div className=&quot;flex&quot;&gt;\n  &lt;div&gt;\uc544\uc774\ud15c 1&lt;\/div&gt;\n  &lt;div&gt;\uc544\uc774\ud15c 2&lt;\/div&gt;\n  &lt;div&gt;\uc544\uc774\ud15c 3&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: flex-col \u2014 \uc138\ub85c\ub85c \ub098\uc5f4\n&lt;div className=&quot;flex flex-col&quot;&gt;\n  &lt;div&gt;\uc704&lt;\/div&gt;\n  &lt;div&gt;\uc911\uac04&lt;\/div&gt;\n  &lt;div&gt;\uc544\ub798&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: gap \u2014 \uc790\uc2dd \uc0ac\uc774 \uac04\uaca9\n&lt;div className=&quot;flex gap-4&quot;&gt;\n  &lt;div&gt;\uc544\uc774\ud15c 1&lt;\/div&gt;\n  &lt;div&gt;\uc544\uc774\ud15c 2&lt;\/div&gt;\n  &lt;div&gt;\uc544\uc774\ud15c 3&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: flex-1 \/ flex-none \u2014 \uc790\uc2dd \ud06c\uae30 \uc81c\uc5b4\n&lt;div className=&quot;flex&quot;&gt;\n  &lt;div className=&quot;flex-none&quot;&gt;\uace0\uc815 \ud06c\uae30&lt;\/div&gt;\n  &lt;div className=&quot;flex-1&quot;&gt;\ub0a8\uc740 \uacf5\uac04\uc744 \ubaa8\ub450 \ucc28\uc9c0&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 5\ub2e8\uacc4: flex-wrap \u2014 \ub118\uce58\uba74 \uc904\ubc14\uafc8\n&lt;div className=&quot;flex flex-wrap gap-2&quot;&gt;\n  &lt;div&gt;\ud0dc\uadf8 1&lt;\/div&gt;\n  &lt;div&gt;\ud0dc\uadf8 2&lt;\/div&gt;\n  &lt;div&gt;\ud0dc\uadf8 3&lt;\/div&gt;\n  &lt;div&gt;\ud0dc\uadf8 4&lt;\/div&gt;\n  &lt;div&gt;\ud0dc\uadf8 5&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<h3>7.3. Container<\/h3>\n<p><code>container<\/code>\ub294 \ud654\uba74 \ud06c\uae30\uc5d0 \ub530\ub77c <code>max-width<\/code>\ub97c \uc790\ub3d9\uc73c\ub85c \ub9de\ucdb0\uc8fc\ub294 \ud074\ub798\uc2a4\ub2e4. \ub2e8\ub3c5\uc73c\ub85c\ub294 \uc67c\ucabd \uc815\ub82c\uc774\ubbc0\ub85c, <code>mx-auto<\/code>\ub97c \ud568\uaed8 \uc368\uc11c \uac00\uc6b4\ub370 \uc815\ub82c\ud55c\ub2e4.<\/p>\n<table>\n<thead>\n<tr>\n<th>\ube0c\ub808\uc774\ud06c\ud3ec\uc778\ud2b8<\/th>\n<th>\uc801\uc6a9\ub418\ub294 max-width<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\uae30\ubcf8 (\ubaa8\ubc14\uc77c)<\/td>\n<td>100%<\/td>\n<\/tr>\n<tr>\n<td>sm (640px~)<\/td>\n<td>640px<\/td>\n<\/tr>\n<tr>\n<td>md (768px~)<\/td>\n<td>768px<\/td>\n<\/tr>\n<tr>\n<td>lg (1024px~)<\/td>\n<td>1024px<\/td>\n<\/tr>\n<tr>\n<td>xl (1280px~)<\/td>\n<td>1280px<\/td>\n<\/tr>\n<tr>\n<td>2xl (1536px~)<\/td>\n<td>1536px<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: container \uae30\ubcf8 \u2014 \ubc18\uc751\ud615 max-width \uc790\ub3d9 \uc801\uc6a9\n&lt;div className=&quot;container&quot;&gt;\ucf58\ud150\uce20&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: mx-auto \ucd94\uac00 \u2014 \uac00\uc6b4\ub370 \uc815\ub82c\n&lt;div className=&quot;container mx-auto&quot;&gt;\ucf58\ud150\uce20&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: \uc2e4\uc804 \u2014 \ud398\uc774\uc9c0 \uc804\uccb4 \ub808\uc774\uc544\uc6c3\uc5d0 \uc801\uc6a9\n&lt;main&gt;\n  &lt;section className=&quot;container mx-auto&quot;&gt;\n    &lt;h2&gt;\uc778\uae30 \uc601\ud654&lt;\/h2&gt;\n    ...\n  &lt;\/section&gt;\n\n  &lt;section className=&quot;container mx-auto&quot;&gt;\n    &lt;h2&gt;\ucd5c\uc2e0 \uc601\ud654&lt;\/h2&gt;\n    ...\n  &lt;\/section&gt;\n&lt;\/main&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>8. Grid<\/h2>\n<p>2\ucc28\uc6d0 \ub808\uc774\uc544\uc6c3. \uc601\ud654 \uce74\ub4dc \ubaa9\ub85d\ucc98\ub7fc \uc5f4\uc744 \uace0\uc815\ud558\uac70\ub098 \ubc18\uc751\ud615\uc73c\ub85c \ubc30\uce58\ud560 \ub54c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n<h3>8.1. \uc5f4(Column) \uc815\uc758<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>CSS<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>grid-cols-1<\/code><\/td>\n<td><code>grid-template-columns: repeat(1, 1fr)<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>grid-cols-2<\/code> ~ <code>12<\/code><\/td>\n<td>2~12 \ub4f1\ubd84<\/td>\n<\/tr>\n<tr>\n<td><code>grid-cols-none<\/code><\/td>\n<td>\uceec\ub7fc \uc815\uc758 \uc5c6\uc74c<\/td>\n<\/tr>\n<tr>\n<td><code>grid-cols-[200px_1fr]<\/code><\/td>\n<td>\uc784\uc758\uac12 \uc9c0\uc815<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>8.2. \uac04\uaca9<\/h3>\n<pre><code class=\"language-css\">gap-4          \/* row-gap + column-gap: 1rem *\/\ngap-x-6        \/* column-gap: 1.5rem *\/\ngap-y-4        \/* row-gap: 1rem *\/\n<\/code><\/pre>\n<h3>8.3. \uc790\uc2dd \uc694\uc18c \ubcd1\ud569 (span)<\/h3>\n<pre><code class=\"language-css\">col-span-2     \/* \uc5f4 2\uce78 \ucc28\uc9c0 *\/\ncol-span-full  \/* \uc804\uccb4 \uc5f4 \ucc28\uc9c0 *\/\nrow-span-2     \/* \ud589 2\uce78 \ucc28\uc9c0 *\/\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: grid + grid-cols \u2014 \uc5f4 \uac1c\uc218 \uc9c0\uc815\n&lt;div className=&quot;grid grid-cols-3&quot;&gt;\n  &lt;div&gt;1&lt;\/div&gt;\n  &lt;div&gt;2&lt;\/div&gt;\n  &lt;div&gt;3&lt;\/div&gt;\n  &lt;div&gt;4&lt;\/div&gt;\n  &lt;div&gt;5&lt;\/div&gt;\n  &lt;div&gt;6&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: gap \u2014 \uc140 \uc0ac\uc774 \uac04\uaca9 \ucd94\uac00\n&lt;div className=&quot;grid grid-cols-3 gap-4&quot;&gt;\n  &lt;div&gt;1&lt;\/div&gt;\n  &lt;div&gt;2&lt;\/div&gt;\n  &lt;div&gt;3&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: col-span \u2014 \ud2b9\uc815 \uc140\uc774 \uc5ec\ub7ec \uce78\uc744 \ucc28\uc9c0\n&lt;div className=&quot;grid grid-cols-3 gap-4&quot;&gt;\n  &lt;div className=&quot;col-span-2&quot;&gt;\ub113\uc740 \uc140 (2\uce78)&lt;\/div&gt;\n  &lt;div&gt;1\uce78&lt;\/div&gt;\n  &lt;div&gt;1\uce78&lt;\/div&gt;\n  &lt;div className=&quot;col-span-full&quot;&gt;\uc804\uccb4 \ub108\ube44 \uc140&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: \ubc18\uc751\ud615 \u2014 \ud654\uba74 \ud06c\uae30\uc5d0 \ub530\ub77c \uc5f4 \uc218 \ubcc0\uacbd\n&lt;div className=&quot;grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4&quot;&gt;\n  {movies.map(movie =&gt; (\n    &lt;MovieCard key={movie.id} movie={movie} \/&gt;\n  ))}\n&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>9. Alignment \u2014 \uc815\ub82c (Justify \u00b7 Align)<\/h2>\n<p>Flexbox\uc640 Grid\uc5d0\uc11c \uc544\uc774\ud15c\uc744 \uc815\ub82c\ud558\ub294 \uc720\ud2f8\ub9ac\ud2f0\uc774\ub2e4.<\/p>\n<h3>9.1. \uc8fc\ucd95 \uc815\ub82c (justify-content)<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>CSS<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>justify-start<\/code><\/td>\n<td><code>justify-content: flex-start<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>justify-center<\/code><\/td>\n<td><code>justify-content: center<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>justify-end<\/code><\/td>\n<td><code>justify-content: flex-end<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>justify-between<\/code><\/td>\n<td><code>justify-content: space-between<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>justify-around<\/code><\/td>\n<td><code>justify-content: space-around<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>justify-evenly<\/code><\/td>\n<td><code>justify-content: space-evenly<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>9.2. \uad50\ucc28\ucd95 \uc815\ub82c (align-items)<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>CSS<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>items-start<\/code><\/td>\n<td><code>align-items: flex-start<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>items-center<\/code><\/td>\n<td><code>align-items: center<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>items-end<\/code><\/td>\n<td><code>align-items: flex-end<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>items-stretch<\/code><\/td>\n<td><code>align-items: stretch<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>items-baseline<\/code><\/td>\n<td><code>align-items: baseline<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>9.3. Grid \uc815\ub82c<\/h3>\n<pre><code class=\"language-css\">place-items-center    \/* align-items + justify-items: center *\/\nplace-content-center\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: justify-center \u2014 \uac00\ub85c \uc911\uc559 \uc815\ub82c\n&lt;div className=&quot;flex justify-center&quot;&gt;\n  &lt;div&gt;\uac00\uc6b4\ub370 \ubc30\uce58\ub428&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: justify-between \u2014 \uc591 \ub05d\uc73c\ub85c \ubc30\uce58\n&lt;div className=&quot;flex justify-between&quot;&gt;\n  &lt;div&gt;\uc67c\ucabd&lt;\/div&gt;\n  &lt;div&gt;\uc624\ub978\ucabd&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: items-center \u2014 \uc138\ub85c \uc911\uc559 \uc815\ub82c\n&lt;div className=&quot;flex items-center&quot;&gt;\n  &lt;div&gt;\uc138\ub85c \uc911\uc559\uc5d0 \ubc30\uce58\ub428&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: justify + items \uc870\ud569 \u2014 \uc644\uc804 \uc911\uc559\n&lt;div className=&quot;flex justify-center items-center&quot;&gt;\n  &lt;div&gt;\uc815\uc911\uc559\uc5d0 \ubc30\uce58\ub428&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 5\ub2e8\uacc4: place-items-center \u2014 grid\uc5d0\uc11c \uc140 \uc548 \uc815\uc911\uc559\n&lt;div className=&quot;grid grid-cols-3 place-items-center&quot;&gt;\n  &lt;div&gt;\u2605&lt;\/div&gt;\n  &lt;div&gt;\u2605&lt;\/div&gt;\n  &lt;div&gt;\u2605&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>10. Spacing \u2014 \uac04\uaca9 (Margin \u00b7 Padding \u00b7 Gap)<\/h2>\n<p>\uae30\ubcf8 \ub2e8\uc704: <code>1 = 4px (0.25rem)<\/code>. <code>4 = 16px<\/code>, <code>8 = 32px<\/code>\ucc98\ub7fc 4\ubc30\uc218\ub85c \uacc4\uc0b0\ud55c\ub2e4.<\/p>\n<h3>10.1. Margin<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4<\/th>\n<th>\ubc29\ud5a5<\/th>\n<th>\uc608\uc2dc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>m-{n}<\/code><\/td>\n<td>\uc804\uccb4<\/td>\n<td><code>m-4<\/code> \u2192 16px \uc0ac\ubc29<\/td>\n<\/tr>\n<tr>\n<td><code>mx-{n}<\/code><\/td>\n<td>\uc88c\uc6b0<\/td>\n<td><code>mx-auto<\/code> \u2192 \uac00\uc6b4\ub370 \uc815\ub82c<\/td>\n<\/tr>\n<tr>\n<td><code>my-{n}<\/code><\/td>\n<td>\uc0c1\ud558<\/td>\n<td><code>my-8<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>mt-{n}<\/code><\/td>\n<td>\uc704<\/td>\n<td><code>mt-16<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>mr-{n}<\/code><\/td>\n<td>\uc624\ub978\ucabd<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>mb-{n}<\/code><\/td>\n<td>\uc544\ub798<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>ml-{n}<\/code><\/td>\n<td>\uc67c\ucabd<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>-m-{n}<\/code><\/td>\n<td>\uc74c\uc218 \ub9c8\uc9c4<\/td>\n<td><code>-mt-4<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>10.2. Padding (\uac19\uc740 \ud328\ud134)<\/h3>\n<pre><code class=\"language-css\">p-4   px-6   py-3   pt-2   pr-4   pb-6   pl-2\n<\/code><\/pre>\n<h3>10.3. \uc790\uc8fc \uc4f0\ub294 \uac12 \ucc38\uace0\ud45c<\/h3>\n<table>\n<thead>\n<tr>\n<th>\ud074\ub798\uc2a4 \uc22b\uc790<\/th>\n<th>rem<\/th>\n<th>px<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>0.25rem<\/td>\n<td>4px<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>0.5rem<\/td>\n<td>8px<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>0.75rem<\/td>\n<td>12px<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>1rem<\/td>\n<td>16px<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>1.25rem<\/td>\n<td>20px<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>1.5rem<\/td>\n<td>24px<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td>2rem<\/td>\n<td>32px<\/td>\n<\/tr>\n<tr>\n<td>10<\/td>\n<td>2.5rem<\/td>\n<td>40px<\/td>\n<\/tr>\n<tr>\n<td>12<\/td>\n<td>3rem<\/td>\n<td>48px<\/td>\n<\/tr>\n<tr>\n<td>16<\/td>\n<td>4rem<\/td>\n<td>64px<\/td>\n<\/tr>\n<tr>\n<td>20<\/td>\n<td>5rem<\/td>\n<td>80px<\/td>\n<\/tr>\n<tr>\n<td>24<\/td>\n<td>6rem<\/td>\n<td>96px<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: p \u2014 \uc0ac\ubc29 \ud328\ub529\n&lt;div className=&quot;p-4&quot;&gt;\uc0ac\ubc29 16px \uc5ec\ubc31&lt;\/div&gt;\n&lt;div className=&quot;p-8&quot;&gt;\uc0ac\ubc29 32px \uc5ec\ubc31&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: px \/ py \u2014 \ubc29\ud5a5\ubcc4 \ud328\ub529\n&lt;div className=&quot;px-6&quot;&gt;\uc88c\uc6b0\ub9cc 24px&lt;\/div&gt;\n&lt;div className=&quot;py-3&quot;&gt;\uc0c1\ud558\ub9cc 12px&lt;\/div&gt;\n&lt;div className=&quot;px-6 py-3&quot;&gt;\uc88c\uc6b0 24px + \uc0c1\ud558 12px&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: mt \/ mb \u2014 \uc704\uc544\ub798 \ub9c8\uc9c4\n&lt;div className=&quot;mt-8&quot;&gt;\uc704\uc5d0 32px \uc5ec\ubc31&lt;\/div&gt;\n&lt;div className=&quot;mb-4&quot;&gt;\uc544\ub798\uc5d0 16px \uc5ec\ubc31&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: mx-auto \u2014 \uac00\uc6b4\ub370 \uc815\ub82c\n&lt;div className=&quot;mx-auto&quot;&gt;\uac00\uc6b4\ub370 \uc815\ub82c&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 5\ub2e8\uacc4: space-y \u2014 \uc790\uc2dd \uc694\uc18c \uc0ac\uc774 \uc138\ub85c \uac04\uaca9\n&lt;div className=&quot;space-y-4&quot;&gt;\n  &lt;div&gt;\uccab \ubc88\uc9f8 \ud56d\ubaa9&lt;\/div&gt;\n  &lt;div&gt;\ub450 \ubc88\uc9f8 \ud56d\ubaa9&lt;\/div&gt;\n  &lt;div&gt;\uc138 \ubc88\uc9f8 \ud56d\ubaa9&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>11. Effects \u2014 \uadf8\ub9bc\uc790 &amp; \ubd88\ud22c\uba85\ub3c4<\/h2>\n<h3>11.1. Box Shadow<\/h3>\n<pre><code class=\"language-css\">shadow-sm      \/* \uc791\uc740 \uadf8\ub9bc\uc790 *\/\nshadow         \/* \uae30\ubcf8 \uadf8\ub9bc\uc790 *\/\nshadow-md      \/* \uc911\uac04 \uadf8\ub9bc\uc790 *\/\nshadow-lg      \/* \ud070 \uadf8\ub9bc\uc790 *\/\nshadow-xl      \/* \ub354 \ud070 \uadf8\ub9bc\uc790 *\/\nshadow-2xl     \/* \uac00\uc7a5 \ud070 \uadf8\ub9bc\uc790 *\/\nshadow-none    \/* \uadf8\ub9bc\uc790 \uc81c\uac70 *\/\n\n\/* \uc0c9\uc0c1 \uadf8\ub9bc\uc790 *\/\nshadow-lg shadow-black\/50\n<\/code><\/pre>\n<h3>11.2. Opacity (\ubd88\ud22c\uba85\ub3c4)<\/h3>\n<pre><code class=\"language-css\">opacity-0         \/* \uc644\uc804 \ud22c\uba85 *\/\nopacity-50        \/* \ubc18\ud22c\uba85 *\/\nopacity-100       \/* \ubd88\ud22c\uba85 *\/\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: shadow \u2014 \uadf8\ub9bc\uc790 \ud06c\uae30\n&lt;div className=&quot;shadow&quot;&gt;\uae30\ubcf8 \uadf8\ub9bc\uc790&lt;\/div&gt;\n&lt;div className=&quot;shadow-md&quot;&gt;\uc911\uac04 \uadf8\ub9bc\uc790&lt;\/div&gt;\n&lt;div className=&quot;shadow-xl&quot;&gt;\ud070 \uadf8\ub9bc\uc790&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: shadow-color \u2014 \uc0c9\uc0c1 \uadf8\ub9bc\uc790\n&lt;div className=&quot;shadow-lg shadow-black\/50&quot;&gt;\uac80\uc740 \uadf8\ub9bc\uc790&lt;\/div&gt;\n&lt;div className=&quot;shadow-lg shadow-yellow-400\/30&quot;&gt;\ub178\ub780 \uadf8\ub9bc\uc790&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: opacity \u2014 \uc694\uc18c \uc804\uccb4 \ud22c\uba85\ub3c4\n&lt;div className=&quot;opacity-100&quot;&gt;\uc644\uc804 \ubd88\ud22c\uba85&lt;\/div&gt;\n&lt;div className=&quot;opacity-50&quot;&gt;\ubc18\ud22c\uba85&lt;\/div&gt;\n&lt;div className=&quot;opacity-0&quot;&gt;\uc644\uc804 \ud22c\uba85 (\uacf5\uac04\uc740 \ucc28\uc9c0)&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>12. Filters \u2014 \ud544\ud130 (Blur \u00b7 Backdrop)<\/h2>\n<pre><code class=\"language-css\">blur-none    blur-sm    blur    blur-md    blur-lg    blur-xl\n\n\/* \ubc30\uacbd \ube14\ub7ec (\uc720\ub9ac \ud6a8\uacfc) *\/\nbackdrop-blur-sm    backdrop-blur-md    backdrop-blur-lg\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: blur \u2014 \uc694\uc18c \uc790\uccb4\ub97c \ud750\ub9ac\uac8c\n&lt;img className=&quot;blur-none&quot; src={img} alt=&quot;&quot; \/&gt;\n&lt;img className=&quot;blur-sm&quot; src={img} alt=&quot;&quot; \/&gt;\n&lt;img className=&quot;blur-lg&quot; src={img} alt=&quot;&quot; \/&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: backdrop-blur \u2014 \uc694\uc18c \ub4a4 \ubc30\uacbd\uc744 \ud750\ub9ac\uac8c\n&lt;div className=&quot;backdrop-blur-sm&quot;&gt;\uc57d\ud558\uac8c \ud750\ub9b0 \ubc30\uacbd&lt;\/div&gt;\n&lt;div className=&quot;backdrop-blur-md&quot;&gt;\uc911\uac04 \ud750\ub9b0 \ubc30\uacbd&lt;\/div&gt;\n&lt;div className=&quot;backdrop-blur-lg&quot;&gt;\ub9ce\uc774 \ud750\ub9b0 \ubc30\uacbd&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: backdrop-blur + bg-*\/\ud22c\uba85\ub3c4 \u2014 \uc720\ub9ac \ud6a8\uacfc\n&lt;div className=&quot;backdrop-blur-md bg-white\/10&quot;&gt;\uc720\ub9ac\ucc98\ub7fc \ubc18\ud22c\uba85\ud55c \uce74\ub4dc&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>13. Transitions &amp; Animation \u2014 \ud2b8\ub79c\uc9c0\uc158<\/h2>\n<pre><code class=\"language-css\">transition          \/* all \uc18d\uc131 *\/\ntransition-colors   \/* \uc0c9\uc0c1\ub9cc *\/\ntransition-transform\ntransition-opacity\nduration-150        \/* 150ms *\/\nduration-300        \/* 300ms *\/\nease-in    ease-out    ease-in-out\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: transition \u2014 \ubcc0\ud654\ub97c \ubd80\ub4dc\ub7fd\uac8c (hover\uc640 \ud568\uaed8)\n&lt;div className=&quot;transition hover:opacity-50&quot;&gt;\ud638\ubc84 \uc2dc \uc11c\uc11c\ud788 \ubc18\ud22c\uba85&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: duration \u2014 \uc560\ub2c8\uba54\uc774\uc158 \uc2dc\uac04\n&lt;div className=&quot;transition duration-150 hover:opacity-50&quot;&gt;\ube60\ub984 (150ms)&lt;\/div&gt;\n&lt;div className=&quot;transition duration-500 hover:opacity-50&quot;&gt;\ub290\ub9bc (500ms)&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: transition-colors \u2014 \uc0c9\uc0c1\ub9cc \uc804\ud658\n&lt;div className=&quot;transition-colors duration-200 hover:bg-yellow-400&quot;&gt;\n  \ud638\ubc84 \uc2dc \ubc30\uacbd\uc0c9\ub9cc \uc804\ud658\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: transition-transform \u2014 \ud06c\uae30\u00b7\uc704\uce58 \uc804\ud658\n&lt;div className=&quot;transition-transform duration-300 hover:scale-105&quot;&gt;\n  \ud638\ubc84 \uc2dc \ud06c\uae30\ub9cc \uc804\ud658\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 5\ub2e8\uacc4: ease \u2014 \uac00\uc18d\ub3c4 \uace1\uc120\n&lt;div className=&quot;transition duration-300 ease-in hover:opacity-0&quot;&gt;\ucc9c\ucc9c\ud788 \uc2dc\uc791&lt;\/div&gt;\n&lt;div className=&quot;transition duration-300 ease-out hover:opacity-0&quot;&gt;\ucc9c\ucc9c\ud788 \ub05d&lt;\/div&gt;\n&lt;div className=&quot;transition duration-300 ease-in-out hover:opacity-0&quot;&gt;\uc591\ucabd \ucc9c\ucc9c\ud788&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>14. Transforms \u2014 \ubcc0\ud615<\/h2>\n<pre><code class=\"language-css\">scale-95    scale-100    scale-105    scale-110\n-translate-y-1    translate-x-2\nrotate-45    rotate-90    rotate-180\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: scale \u2014 \ud06c\uae30 \ubcc0\ud615\n&lt;div className=&quot;scale-75&quot;&gt;75% \ucd95\uc18c&lt;\/div&gt;\n&lt;div className=&quot;scale-100&quot;&gt;\uae30\ubcf8 \ud06c\uae30&lt;\/div&gt;\n&lt;div className=&quot;scale-110&quot;&gt;110% \ud655\ub300&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: translate \u2014 \uc704\uce58 \uc774\ub3d9 (\uacf5\uac04\uc740 \uc720\uc9c0)\n&lt;div className=&quot;translate-x-4&quot;&gt;\uc624\ub978\ucabd\uc73c\ub85c 16px&lt;\/div&gt;\n&lt;div className=&quot;-translate-y-2&quot;&gt;\uc704\ub85c 8px&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: rotate \u2014 \ud68c\uc804\n&lt;div className=&quot;rotate-45&quot;&gt;45\ub3c4 \ud68c\uc804&lt;\/div&gt;\n&lt;div className=&quot;rotate-90&quot;&gt;90\ub3c4 \ud68c\uc804&lt;\/div&gt;\n&lt;div className=&quot;rotate-180&quot;&gt;180\ub3c4 \ud68c\uc804&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: transition + transform \u2014 \ubd80\ub4dc\ub7ec\uc6b4 \ubcc0\ud615\n&lt;div className=&quot;transition-transform duration-300 hover:scale-110&quot;&gt;\n  \ud638\ubc84 \uc2dc \uc11c\uc11c\ud788 \ud655\ub300\n&lt;\/div&gt;\n&lt;div className=&quot;transition-transform duration-300 hover:-translate-y-1&quot;&gt;\n  \ud638\ubc84 \uc2dc \uc11c\uc11c\ud788 \uc704\ub85c \uc774\ub3d9\n&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>15. Interactivity \u2014 \uc0c1\ud638\uc791\uc6a9 (State Variants \u00b7 Cursor)<\/h2>\n<h3>15.1. Cursor<\/h3>\n<pre><code class=\"language-css\">cursor-pointer    cursor-default    cursor-not-allowed    cursor-wait\n<\/code><\/pre>\n<h3>15.2. \uc8fc\uc694 State Variants<\/h3>\n<p>\ud074\ub798\uc2a4 \uc55e\uc5d0 <code>\uc0c1\ud0dc:<\/code>\ub97c \ubd99\uc774\uba74 \ud574\ub2f9 \uc0c1\ud0dc\uc77c \ub54c\ub9cc \uc801\uc6a9\ub41c\ub2e4.<\/p>\n<table>\n<thead>\n<tr>\n<th>Variant<\/th>\n<th>\uc124\uba85<\/th>\n<th>\uc608\uc2dc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>hover:<\/code><\/td>\n<td>\ub9c8\uc6b0\uc2a4 \uc62c\ub9bc<\/td>\n<td><code>hover:bg-yellow-400<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>focus:<\/code><\/td>\n<td>\ud3ec\ucee4\uc2a4<\/td>\n<td><code>focus:ring-2<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>active:<\/code><\/td>\n<td>\ud074\ub9ad \uc911<\/td>\n<td><code>active:scale-95<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>disabled:<\/code><\/td>\n<td>\ube44\ud65c\uc131\ud654<\/td>\n<td><code>disabled:opacity-50<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>checked:<\/code><\/td>\n<td>\uccb4\ud06c\ub428<\/td>\n<td><code>checked:bg-blue-600<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>group-hover:<\/code><\/td>\n<td>\ubd80\ubaa8 hover \uc2dc<\/td>\n<td><code>group-hover:opacity-100<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>peer-focus:<\/code><\/td>\n<td>\ud615\uc81c \ud3ec\ucee4\uc2a4 \uc2dc<\/td>\n<td><code>peer-focus:text-blue-500<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>first:<\/code><\/td>\n<td>\uccab \ubc88\uc9f8 \uc790\uc2dd<\/td>\n<td><code>first:mt-0<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>last:<\/code><\/td>\n<td>\ub9c8\uc9c0\ub9c9 \uc790\uc2dd<\/td>\n<td><code>last:mb-0<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>odd:<\/code> \/ <code>even:<\/code><\/td>\n<td>\ud640\uc218\/\uc9dd\uc218<\/td>\n<td><code>odd:bg-gray-50<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: hover: \u2014 \ub9c8\uc6b0\uc2a4\ub97c \uc62c\ub838\uc744 \ub54c\n&lt;div className=&quot;hover:opacity-50&quot;&gt;\ud638\ubc84 \uc2dc \ubc18\ud22c\uba85&lt;\/div&gt;\n&lt;div className=&quot;hover:bg-yellow-400&quot;&gt;\ud638\ubc84 \uc2dc \ub178\ub780 \ubc30\uacbd&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: focus: \u2014 \ud3ec\ucee4\uc2a4 \ubc1b\uc558\uc744 \ub54c (\uc785\ub825 \ud544\ub4dc \ub4f1)\n&lt;input className=&quot;focus:outline-none&quot; \/&gt;\n&lt;input className=&quot;focus:ring-2 focus:ring-yellow-400&quot; \/&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: active: \u2014 \ud074\ub9ad\ud558\ub294 \uc21c\uac04\n&lt;button className=&quot;active:scale-95&quot;&gt;\ud074\ub9ad \uc2dc \uc904\uc5b4\ub4e6&lt;\/button&gt;\n&lt;button className=&quot;active:opacity-70&quot;&gt;\ud074\ub9ad \uc2dc \ubc18\ud22c\uba85&lt;\/button&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: disabled: \u2014 \ube44\ud65c\uc131\ud654 \uc0c1\ud0dc\n&lt;button disabled className=&quot;disabled:opacity-50&quot;&gt;\ube44\ud65c\uc131 (\ud750\ub9ac\uac8c)&lt;\/button&gt;\n&lt;button disabled className=&quot;disabled:cursor-not-allowed&quot;&gt;\ube44\ud65c\uc131 (\ucee4\uc11c \uae08\uc9c0)&lt;\/button&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 5\ub2e8\uacc4: group-hover: \u2014 \ubd80\ubaa8\uc5d0 hover \uc2dc \uc790\uc2dd\uc5d0 \uc801\uc6a9\n&lt;div className=&quot;group&quot;&gt;\n  &lt;p className=&quot;group-hover:text-yellow-400&quot;&gt;\ubd80\ubaa8\uc5d0 \ud638\ubc84\ud558\uba74 \uc0c9\uc0c1 \ubcc0\uacbd&lt;\/p&gt;\n&lt;\/div&gt;\n\n\/\/ \ubd80\ubaa8 hover \uc2dc \uc228\uaca8\uc9c4 \uc624\ubc84\ub808\uc774 \ud45c\uc2dc\n&lt;div className=&quot;group relative&quot;&gt;\n  &lt;img src={poster} \/&gt;\n  &lt;div className=&quot;absolute inset-0 opacity-0 group-hover:opacity-100&quot;&gt;\n    \uc624\ubc84\ub808\uc774\n  &lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 6\ub2e8\uacc4: odd: \/ even: \u2014 \ud640\uc9dd \ubc88\uc9f8 \uc2a4\ud0c0\uc77c\n&lt;ul&gt;\n  &lt;li className=&quot;odd:bg-gray-900 even:bg-gray-800&quot;&gt;\ud56d\ubaa9 1 (\ud640\uc218 \u2192 \uc5b4\ub450\uc6b4)&lt;\/li&gt;\n  &lt;li className=&quot;odd:bg-gray-900 even:bg-gray-800&quot;&gt;\ud56d\ubaa9 2 (\uc9dd\uc218 \u2192 \ubc1d\uc740)&lt;\/li&gt;\n  &lt;li className=&quot;odd:bg-gray-900 even:bg-gray-800&quot;&gt;\ud56d\ubaa9 3 (\ud640\uc218 \u2192 \uc5b4\ub450\uc6b4)&lt;\/li&gt;\n&lt;\/ul&gt;\n<\/code><\/pre>\n<hr>\n<hr>\n<h2>16. \ubc18\uc751\ud615 (Breakpoint)<\/h2>\n<p>Tailwind\ub294 <strong>\ubaa8\ubc14\uc77c \ud37c\uc2a4\ud2b8<\/strong>\uc774\ub2e4. \uae30\ubcf8\uac12\uc774 \ubaa8\ubc14\uc77c\uc774\uace0, \uc811\ub450\uc0ac\ub85c \ub354 \ud070 \ud654\uba74\uc744 \uc9c0\uc815\ud55c\ub2e4.<\/p>\n<h3>16.1. \uae30\ubcf8 \ube0c\ub808\uc774\ud06c\ud3ec\uc778\ud2b8<\/h3>\n<table>\n<thead>\n<tr>\n<th>\uc811\ub450\uc0ac<\/th>\n<th>\ucd5c\uc18c \ub108\ube44<\/th>\n<th>\uae30\uae30<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>(\uc5c6\uc74c)<\/td>\n<td>0px~<\/td>\n<td>\ubaa8\ubc14\uc77c (\uae30\ubcf8)<\/td>\n<\/tr>\n<tr>\n<td><code>sm:<\/code><\/td>\n<td>640px~<\/td>\n<td>\uc18c\ud615 \ud0dc\ube14\ub9bf<\/td>\n<\/tr>\n<tr>\n<td><code>md:<\/code><\/td>\n<td>768px~<\/td>\n<td>\ud0dc\ube14\ub9bf<\/td>\n<\/tr>\n<tr>\n<td><code>lg:<\/code><\/td>\n<td>1024px~<\/td>\n<td>\ub178\ud2b8\ubd81<\/td>\n<\/tr>\n<tr>\n<td><code>xl:<\/code><\/td>\n<td>1280px~<\/td>\n<td>\ub370\uc2a4\ud06c\ud0d1<\/td>\n<\/tr>\n<tr>\n<td><code>2xl:<\/code><\/td>\n<td>1536px~<\/td>\n<td>\ub300\ud615 \ubaa8\ub2c8\ud130<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: \ube0c\ub808\uc774\ud06c\ud3ec\uc778\ud2b8 \ud558\ub098 \u2014 md \uc774\uc0c1\uc5d0\uc11c \uc801\uc6a9\n&lt;p className=&quot;text-sm md:text-xl&quot;&gt;md \uc774\uc0c1\uc5d0\uc11c \ucee4\uc9d0&lt;\/p&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: \ube0c\ub808\uc774\ud06c\ud3ec\uc778\ud2b8 \ub450 \uac1c \u2014 \ub2e8\uacc4\uc801\uc73c\ub85c \ubcc0\uacbd\n&lt;p className=&quot;text-sm md:text-lg lg:text-2xl&quot;&gt;\ud654\uba74\uc774 \ucee4\uc9c8\uc218\ub85d \ud14d\uc2a4\ud2b8\ub3c4 \ucee4\uc9d0&lt;\/p&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: hidden \/ block \uc870\ud569 \u2014 \ud2b9\uc815 \ud654\uba74\uc5d0\uc11c \ubcf4\uc774\uae30\/\uc228\uae30\uae30\n&lt;div className=&quot;hidden md:block&quot;&gt;md \uc774\uc0c1\uc5d0\uc11c\ub9cc \ubcf4\uc784&lt;\/div&gt;\n&lt;div className=&quot;block md:hidden&quot;&gt;md \ubbf8\ub9cc\uc5d0\uc11c\ub9cc \ubcf4\uc784 (\ubaa8\ubc14\uc77c \uc804\uc6a9)&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: flex-col \u2192 flex-row \u2014 \ubaa8\ubc14\uc77c: \uc138\ub85c, \ub370\uc2a4\ud06c\ud0d1: \uac00\ub85c\n&lt;div className=&quot;flex flex-col md:flex-row&quot;&gt;\n  &lt;div&gt;\uccab \ubc88\uc9f8&lt;\/div&gt;\n  &lt;div&gt;\ub450 \ubc88\uc9f8&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 5\ub2e8\uacc4: grid-cols \ubc18\uc751\ud615 \u2014 \ud654\uba74 \ud06c\uae30\uc5d0 \ub530\ub77c \uc5f4 \uc218 \ubcc0\uacbd\n&lt;div className=&quot;grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4&quot;&gt;\n  &lt;div&gt;\uce74\ub4dc 1&lt;\/div&gt;\n  &lt;div&gt;\uce74\ub4dc 2&lt;\/div&gt;\n  &lt;div&gt;\uce74\ub4dc 3&lt;\/div&gt;\n  &lt;div&gt;\uce74\ub4dc 4&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<hr>\n<h2>17. Dark Mode<\/h2>\n<h3>17.1. \uc124\uc815 (media \ubaa8\ub4dc \u2014 OS \uc790\ub3d9)<\/h3>\n<pre><code class=\"language-js\">\/\/ OS \ub2e4\ud06c\ubaa8\ub4dc \uc124\uc815\uc5d0 \ub530\ub77c \uc790\ub3d9 \uc804\ud658\n&lt;div className=&quot;bg-white dark:bg-gray-900&quot;&gt;\n  \ub77c\uc774\ud2b8: \ud770 \ubc30\uacbd \/ \ub2e4\ud06c: \uc5b4\ub450\uc6b4 \ubc30\uacbd\n&lt;\/div&gt;\n<\/code><\/pre>\n<h3>17.2. \uc218\ub3d9 \ud1a0\uae00 \ubc29\uc2dd (class \ubaa8\ub4dc)<\/h3>\n<pre><code class=\"language-css\">\/* src\/index.css *\/\n@import &quot;tailwindcss&quot;;\n\n@custom-variant dark (&amp;:where(.dark, .dark *));\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ HTML \ub8e8\ud2b8\uc5d0 dark \ud074\ub798\uc2a4 \ucd94\uac00\/\uc81c\uac70\ub85c \uc81c\uc5b4\ndocument.documentElement.classList.toggle(&#39;dark&#39;)\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 1\ub2e8\uacc4: dark: \ud14d\uc2a4\ud2b8 \uc0c9\uc0c1\n&lt;p className=&quot;text-black dark:text-white&quot;&gt;\ub77c\uc774\ud2b8: \uac80\uc740\uc0c9 \/ \ub2e4\ud06c: \ud770\uc0c9&lt;\/p&gt;\n&lt;p className=&quot;text-gray-700 dark:text-gray-300&quot;&gt;\ub77c\uc774\ud2b8: \uc9c4\ud55c \ud68c\uc0c9 \/ \ub2e4\ud06c: \ubc1d\uc740 \ud68c\uc0c9&lt;\/p&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 2\ub2e8\uacc4: dark: \ubc30\uacbd \uc0c9\uc0c1\n&lt;div className=&quot;bg-white dark:bg-gray-900&quot;&gt;\ub77c\uc774\ud2b8: \ud770 \ubc30\uacbd \/ \ub2e4\ud06c: \uc5b4\ub450\uc6b4 \ubc30\uacbd&lt;\/div&gt;\n&lt;div className=&quot;bg-gray-100 dark:bg-gray-800&quot;&gt;\ub77c\uc774\ud2b8: \ubc1d\uc740 \ud68c\uc0c9 \/ \ub2e4\ud06c: \uc9d9\uc740 \ud68c\uc0c9&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 3\ub2e8\uacc4: \ud14d\uc2a4\ud2b8 + \ubc30\uacbd \uc870\ud569\n&lt;div className=&quot;bg-white dark:bg-gray-900 text-black dark:text-white&quot;&gt;\n  \ub2e4\ud06c\ubaa8\ub4dc \ub300\uc751 \uce74\ub4dc\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-js\">\/\/ 4\ub2e8\uacc4: \ud1a0\uae00 \ubc84\ud2bc\uc73c\ub85c \uc9c1\uc811 \uc81c\uc5b4\nfunction DarkToggle() {\n  const [dark, setDark] = useState(false)\n\n  const toggle = () =&gt; {\n    setDark(prev =&gt; !prev)\n    document.documentElement.classList.toggle(&#39;dark&#39;)\n  }\n\n  return (\n    &lt;button onClick={toggle}&gt;\n      {dark ? &#39;\ud83c\udf19 \ub2e4\ud06c&#39; : &#39;\u2600\ufe0f \ub77c\uc774\ud2b8&#39;}\n    &lt;\/button&gt;\n  )\n}\n<\/code><\/pre>\n<h3>18.1. Header \ubd84\uc11d<\/h3>\n<pre><code class=\"language-jsx\">&lt;header className=&quot;fixed top-0 left-0 w-full py-4 px-2 bg-black\/90 z-50&quot;&gt;\n  {\/* fixed: \uc2a4\ud06c\ub864\ud574\ub3c4 \uace0\uc815 *\/}\n  {\/* top-0 left-0: \ud654\uba74 \ucd5c\uc0c1\ub2e8 \uc88c\uce21 *\/}\n  {\/* w-full: \uc804\uccb4 \ub108\ube44 *\/}\n  {\/* py-4 px-2: \uc0c1\ud558 16px, \uc88c\uc6b0 8px \ud328\ub529 *\/}\n  {\/* bg-black\/90: \uac80\uc740\uc0c9 \ubc30\uacbd 90% \ubd88\ud22c\uba85 *\/}\n  {\/* z-50: \ub2e4\ub978 \uc694\uc18c \uc704\uc5d0 \ud45c\uc2dc *\/}\n  &lt;div className=&quot;container mx-auto&quot;&gt;\n    &lt;Link to=&quot;\/&quot;&gt;\n      &lt;h1 className=&quot;text-3xl text-yellow-300 font-bold&quot;&gt;\n        {\/* text-3xl: 30px \ud14d\uc2a4\ud2b8 *\/}\n        {\/* text-yellow-300: \uc5f0\ud55c \ub178\ub780\uc0c9 *\/}\n        {\/* font-bold: \uad75\uc740 \uae00\uc528 *\/}\n        GOFLIX\n      &lt;\/h1&gt;\n    &lt;\/Link&gt;\n  &lt;\/div&gt;\n&lt;\/header&gt;\n<\/code><\/pre>\n<h3>18.2. \uc601\ud654 \uce74\ub4dc \ucef4\ud3ec\ub10c\ud2b8 \ud328\ud134<\/h3>\n<pre><code class=\"language-jsx\">function MovieCard({ movie }) {\n  return (\n    &lt;div className=&quot;group relative rounded-lg overflow-hidden cursor-pointer\n                    transition-transform duration-300 hover:scale-105\n                    shadow-lg hover:shadow-yellow-400\/30&quot;&gt;\n      {\/* \ud3ec\uc2a4\ud130 \uc774\ubbf8\uc9c0 *\/}\n      &lt;img\n        src={`https:\/\/image.tmdb.org\/t\/p\/w500${movie.poster_path}`}\n        alt={movie.title}\n        className=&quot;w-full aspect-[2\/3] object-cover&quot;\n      \/&gt;\n      {\/* \ud638\ubc84 \uc624\ubc84\ub808\uc774 *\/}\n      &lt;div className=&quot;absolute inset-0 bg-black\/70 opacity-0 group-hover:opacity-100\n                      transition-opacity duration-300 flex flex-col justify-end p-4&quot;&gt;\n        &lt;h3 className=&quot;text-white font-bold text-sm line-clamp-2&quot;&gt;{movie.title}&lt;\/h3&gt;\n        &lt;p className=&quot;text-yellow-300 text-xs mt-1&quot;&gt;\u2b50 {movie.vote_average.toFixed(1)}&lt;\/p&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  );\n}\n<\/code><\/pre>\n<h3>18.3. \uc804\uccb4 \ud398\uc774\uc9c0 \ub808\uc774\uc544\uc6c3<\/h3>\n<pre><code class=\"language-jsx\">\/\/ App.jsx\n&lt;main className=&quot;bg-black text-white min-h-screen pt-16&quot;&gt;\n  {\/* bg-black: \uac80\uc740 \ubc30\uacbd *\/}\n  {\/* text-white: \uae30\ubcf8 \ud14d\uc2a4\ud2b8 \ud770\uc0c9 *\/}\n  {\/* min-h-screen: \ucd5c\uc18c \uc804\uccb4 \ub192\uc774 *\/}\n  {\/* pt-16: \uc0c1\ub2e8 64px (fixed \ud5e4\ub354 \ub192\uc774\ub9cc\ud07c) *\/}\n  &lt;Outlet \/&gt;\n&lt;\/main&gt;\n\n\/\/ \ud648 \ud398\uc774\uc9c0\n&lt;section className=&quot;container mx-auto px-4 py-8&quot;&gt;\n  &lt;h2 className=&quot;text-2xl font-bold mb-6 text-yellow-300&quot;&gt;\uc778\uae30 \uc601\ud654&lt;\/h2&gt;\n  &lt;div className=&quot;grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4&quot;&gt;\n    {movies.map(movie =&gt; &lt;MovieCard key={movie.id} movie={movie} \/&gt;)}\n  &lt;\/div&gt;\n&lt;\/section&gt;\n<\/code><\/pre>\n<h3>18.4. \ubc84\ud2bc \uc2a4\ud0c0\uc77c \ud328\ud134<\/h3>\n<pre><code class=\"language-jsx\">{\/* \uc8fc\uc694 \uc561\uc158 \ubc84\ud2bc *\/}\n&lt;button className=&quot;bg-yellow-400 text-black font-bold px-6 py-2 rounded-lg\n                   hover:bg-yellow-300 active:scale-95\n                   transition-all duration-200 cursor-pointer&quot;&gt;\n  \uc790\uc138\ud788 \ubcf4\uae30\n&lt;\/button&gt;\n\n{\/* \ubcf4\uc870 \ubc84\ud2bc (\uc544\uc6c3\ub77c\uc778) *\/}\n&lt;button className=&quot;border-2 border-white text-white font-semibold px-6 py-2 rounded-lg\n                   hover:bg-white hover:text-black\n                   transition-all duration-200 cursor-pointer&quot;&gt;\n  \ubaa9\ub85d \ucd94\uac00\n&lt;\/button&gt;\n<\/code><\/pre>\n<h3>18.5. \uc601\ud654 \uc0c1\uc138 \ud398\uc774\uc9c0<\/h3>\n<pre><code class=\"language-jsx\">function MovieDetail({ movie }) {\n  return (\n    &lt;div className=&quot;relative min-h-screen bg-black text-white&quot;&gt;\n      {\/* \ubc30\uacbd \uc774\ubbf8\uc9c0 *\/}\n      &lt;div className=&quot;relative h-[60vh]&quot;&gt;\n        &lt;img\n          src={`https:\/\/image.tmdb.org\/t\/p\/original${movie.backdrop_path}`}\n          className=&quot;w-full h-full object-cover&quot;\n        \/&gt;\n        &lt;div className=&quot;absolute inset-0 bg-gradient-to-t from-black via-black\/40 to-transparent&quot; \/&gt;\n      &lt;\/div&gt;\n\n      {\/* \ucf58\ud150\uce20 *\/}\n      &lt;div className=&quot;container mx-auto px-4 -mt-32 relative z-10&quot;&gt;\n        &lt;div className=&quot;flex flex-col md:flex-row gap-8&quot;&gt;\n          &lt;img\n            src={`https:\/\/image.tmdb.org\/t\/p\/w300${movie.poster_path}`}\n            className=&quot;w-40 md:w-56 rounded-xl shadow-2xl flex-none mx-auto md:mx-0&quot;\n          \/&gt;\n          &lt;div className=&quot;flex-1&quot;&gt;\n            &lt;h1 className=&quot;text-3xl md:text-5xl font-black&quot;&gt;{movie.title}&lt;\/h1&gt;\n            &lt;div className=&quot;flex items-center gap-3 mt-3 text-sm text-gray-400&quot;&gt;\n              &lt;span className=&quot;text-yellow-400 font-bold&quot;&gt;\u2b50 {movie.vote_average.toFixed(1)}&lt;\/span&gt;\n              &lt;span&gt;{movie.release_date.slice(0, 4)}&lt;\/span&gt;\n            &lt;\/div&gt;\n            &lt;p className=&quot;mt-4 text-gray-300 leading-relaxed max-w-2xl line-clamp-4 md:line-clamp-none&quot;&gt;\n              {movie.overview}\n            &lt;\/p&gt;\n            &lt;div className=&quot;flex gap-3 mt-6&quot;&gt;\n              &lt;button className=&quot;bg-yellow-400 text-black font-bold px-6 py-3 rounded-lg\n                                 hover:bg-yellow-300 active:scale-95 transition-all duration-200&quot;&gt;\n                \u25b6 \uc7ac\uc0dd\n              &lt;\/button&gt;\n              &lt;button className=&quot;border border-white\/40 text-white px-6 py-3 rounded-lg\n                                 hover:bg-white\/10 transition-all duration-200&quot;&gt;\n                + \ub0b4 \ubaa9\ub85d\n              &lt;\/button&gt;\n            &lt;\/div&gt;\n          &lt;\/div&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  )\n}\n<\/code><\/pre>\n<hr>\n<blockquote>\n<p><strong>Tip<\/strong>: <strong>\ud074\ub798\uc2a4 \uc870\ud569 \ud301<\/strong><\/p>\n<p>\ubcf5\uc7a1\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uad00\uc2ec\uc0ac\ubcc4\ub85c \uc904\uc744 \ub098\ub220 \uc77d\uae30 \uc88b\uac8c \uc791\uc131\ud55c\ub2e4.<\/p>\n<p><strong>\ub808\uc774\uc544\uc6c3 \u2192 \ud06c\uae30 \u2192 \uc0c9\uc0c1 \u2192 \uc0c1\ud0dc<\/strong> \uc21c\uc73c\ub85c \ubc30\uce58\ud558\uba74 \uc720\uc9c0\ubcf4\uc218\uac00 \ud3b8\ud558\ub2e4.<\/p>\n<\/blockquote>\n<blockquote>\n<p><strong>Warning<\/strong>: <strong>\uc790\uc8fc \ud558\ub294 \uc2e4\uc218<\/strong><\/p>\n<ul>\n<li><code>hover:scale-105<\/code>\ub9cc \uc4f0\uba74 \uc560\ub2c8\uba54\uc774\uc158\uc774 \uc5c6\uc74c \u2192 <code>transition-transform duration-300<\/code> \ud544\uc218<\/li>\n<li><code>opacity-0 group-hover:opacity-100<\/code>\uc744 \uc4f8 \ub54c \ubd80\ubaa8\uc5d0 <code>group<\/code> \ud074\ub798\uc2a4 \ube60\ub728\ub9ac\uc9c0 \uc54a\uae30<\/li>\n<li><code>fixed<\/code> \ud5e4\ub354\uac00 \uc788\uc73c\uba74 main\uc5d0 <code>pt-{\ud5e4\ub354\ub192\uc774}<\/code> \ud544\uc218 (\uacb9\uce68 \ubc29\uc9c0)<\/li>\n<\/ul>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Tailwind CSS \ubcf4\ud1b5 \uc6f9\uc0ac\uc774\ud2b8\ub97c \uafb8\ubc00 \ub54c\ub294 \ubcc4\ub3c4\uc758 CSS \ud30c\uc77c\uc5d0 \ucf54\ub4dc\ub97c \uae38\uac8c \uc791\uc131\ud574\uc57c \ud55c\ub2e4. \ud558\uc9c0\ub9cc Tailwind\ub294 &quot;\uc774\ubbf8 \ub9cc\ub4e4\uc5b4\uc9c4 \ud0dc\uadf8(Class)&quot;\ub97c HTML\uc5d0 \ubc14\ub85c \ubd99\uc5ec\uc11c \ub514\uc790\uc778\ud558\ub294 \ubc29\uc2dd\uc774\ub2e4. \ud14c\uc77c\uc708\ub4dc \uacf5\uc2dd \ud14c\uc77c\uc708\ub4dc \uce58\ud2b8\uc2dc\ud2b8 \uacf5\uc2dd\ud14c\uc77c\uc708\ub4dc \ud53c\uadf8\ub9c8 \uc2a4\ud0c0\uc77c\ud30c\uc77c \ud14c\uc77c\uc708\ub4dc \ub514\uc790\uc778\ud1a0\ud070 \uc0dd\uc131\uae30 \ud53c\uadf8\ub9c8 \ud50c\ub7ec\uadf8\uc778 1. Basics \u2014 \uc124\uce58 NPM \uc124\uce58 (Vite \uae30\uc900) \ud130\ubbf8\ub110\uc5d0 \uc544\ub798 \uba85\ub839\uc5b4 \uc785\ub825 npm install tailwindcss @tailwindcss\/vite vite.config.js \ud30c\uc77c\uc5d0 \uc544\ub798 \ucf54\ub4dc &#8230; <a title=\"Tailwind CSS\" class=\"read-more\" href=\"https:\/\/coalacoding.com\/?p=5\" aria-label=\"Tailwind CSS\uc5d0 \ub300\ud574 \ub354 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694\">\ub354 \uc77d\uae30<\/a><\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-5","post","type-post","status-publish","format-standard","hentry","category-tailwind"],"_links":{"self":[{"href":"https:\/\/coalacoding.com\/index.php?rest_route=\/wp\/v2\/posts\/5","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coalacoding.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/coalacoding.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/coalacoding.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5"}],"version-history":[{"count":1,"href":"https:\/\/coalacoding.com\/index.php?rest_route=\/wp\/v2\/posts\/5\/revisions"}],"predecessor-version":[{"id":2260,"href":"https:\/\/coalacoding.com\/index.php?rest_route=\/wp\/v2\/posts\/5\/revisions\/2260"}],"wp:attachment":[{"href":"https:\/\/coalacoding.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/coalacoding.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/coalacoding.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}