TailwindCSS - Awesomeํ•œ ๊ธฐ๋Šฅ๋“ค

2025. 5. 26. 11:01ยท๐ŸŒŠ TailwindCSS

TailwindCSS

 

โœ… ๋ฐ˜์‘ํ˜• ๋””์ž์ธ


sm -> @media(min-width: 640px)

md -> @media(min-width: 768px)

lg -> @media(min-width: 1024px)

 

dark -> @media(prefers-color-scheme: dark)

 

lg: grid-cols-2

๋ผ์ง€ ์‚ฌ์ด์ฆˆ ํ™”๋ฉด์—์„œ๋Š” 2๊ฐœ์˜ column์„ ๊ฐ€์ง„๋‹ค.

 

โœ… ring


ring-2

2px์˜ ring border๊ฐ€ ์ƒ๊น€

 

ring-offset-2

ring์— 2px์˜ ๊ฐ„๊ฒฉ์ด ์ƒ๊น€

 

ring-yellow-500

ring ์ƒ‰์ƒ ์„ค์ •

 

focus:ring-2

focus์‹œ ring ์ƒ์„ฑ

 

ring-opacity-20

ring์˜ ๋ถˆํˆฌ๋ช…๋„๋ฅผ 20%๋กœ ์„ค์ •

 

โœ… Transition


className์— transition์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์˜ˆ์œ transition์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

โœ… Modifiers for Lists


first: bg-blue-50, last: bg-blue-50

์ฒซ ๋ฒˆ์งธ child์™€ ๋งˆ์ง€๋ง‰ child

 

only: bg-red-500

child๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ๋•Œ

 

odd:, even:

ํ™€์ˆ˜์™€ ์ง์ˆ˜

 

empty:

๋น„์–ด ์žˆ๋Š” element ์„ ํƒ (๋ณดํ†ต empty์ธ child๋Š” hidden์œผ๋กœ ์ˆจ๊ธด๋‹ค.)

 

List ๋ชจ์–‘ ๋ฐ”๊พธ๊ธฐ

list-decimal -> ๋ฆฌ์ŠคํŠธ์— ์ˆซ์ž๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค. (ol์˜ ๊ธฐ๋ณธ ์Šคํƒ€์ผ)

list-disc -> ๋””์Šคํฌ ๋ชจ์–‘ ์› ์Šคํƒ€์ผ (ul์˜ ๊ธฐ๋ณธ ์Šคํƒ€์ผ)

marker: text-teal-500 -> ๋ฆฌ์ŠคํŠธ ๋ชจ์–‘(marker)์˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝ

 

 

โœ… Group Modifier


<div class="group hover:bg-gray-100">
  <p class="group-hover:text-blue-500">
    ์ด ํ…์ŠคํŠธ๋Š” ๋ถ€๋ชจ์— hoverํ•  ๋•Œ ํŒŒ๋ž€์ƒ‰์ด ๋ผ
  </p>
</div>

 

ํ•ด๋‹น ์š”์†Œ๋งŒ ํƒ€๊ฒŸํŒ…ํ•ด์•ผ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํฌํ•จ๋œ ์˜์—ญ๋งŒ ํƒ€๊ฒŸํŒ…ํ•ด๋„ ํŠน์ • ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ

 

โœ… Peer Modifier


<div>
  <input type="checkbox" class="peer hidden" />
  <label class="peer-checked:text-blue-500">์„ ํƒ๋จ</label>
</div>

 

์ง€์› ์ƒํƒœ modifier

  • peer-hover:
  • peer-focus:
  • peer-checked:
  • peer-disabled:
  • peer-invalid:
  • peer-placeholder-shown:
  • ๋“ฑ๋“ฑ...

๋‹จ, peer๊ฐ€ peer selector๋ณด๋‹ค ์•ž์— ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

(CSS๊ฐ€ top to bottom์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ)

 

๊ทธ๋ฆฌ๊ณ  feer๋Š” ํ˜•์ œ ์š”์†Œ ์‚ฌ์ด์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.

๋ถ€๋ชจ ์ž์‹ ์š”์†Œ ์‚ฌ์ด๋Š” group์„ ์ด์šฉํ•œ๋‹ค.

 

โœ… File modifier


file: border-0

file ๋ฒ„ํŠผ๋งŒ ๋ณ€๊ฒฝ

 

file:hover: text-purple-400

์ค‘์ฒฉ๋„ ๊ฐ€๋Šฅ

 

โœ… Dark Mode


dark: bg-black

className์— dark๋ฅผ ๋„ฃ์œผ๋ฉด ๋จ

 

Tailwind๋Š” dark-mode ์ „ํ™˜ ๋ฒ„ํŠผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์šฐ์„  tailwind.config.js๋กœ ๊ฐ€์„œ ์ปดํ“จํ„ฐ์˜ ๋‹คํฌ๋ชจ๋“œ ์„ค์ •์„ ๋”ฐ๋ผ๊ฐˆ ๊ฑด์ง€, ์•„๋‹ˆ๋ฉด ๋ฆฌ์•กํŠธ๋‚˜ JS๋กœ ์ง์ ‘ ํ† ๊ธ€ ์‹œํ‚ฌ ๊ฑด์ง€๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

๊ธฐ๋ณธ๊ฐ’์œผ๋กœ๋Š” darkMode: "media"

์ด ๊ฐ’์„ class๋กœ ๋ฐ”๊พธ๋ฉด dark-mode์— ๋Œ€ํ•œ media query๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

 

class๋Š” dark-mode๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ™œ์„ฑํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ถ€๋ชจ ์š”์†Œ์— "dark"๋ผ๋Š” className์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

์˜ˆ์‹œ) ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ ์–ด๋”˜๊ฐ€์— ๋ฒ„ํŠผ์„ ๋งŒ๋“ค๊ณ , ์œ ์ €๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด html ํƒœ๊ทธ์— "dark"๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจ๋“  ์š”์†Œ๋“ค์ด ๋‹คํฌ๋ชจ๋“œ๊ฐ€ ๋œ๋‹ค.

<html class = "dark" /> ํ˜น์€ body์— ์ถ”๊ฐ€. (์ด ๋ฐฉ์‹์€ ํฌ๊ฒŒ ์„ ํ˜ธ๋Š” x, ํƒœ๊ทธ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ท€์ฐฎ๋‹ค.)

 

โœ… Just In Time Compiler


์ฝ”๋“œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์‹œํ•˜๋ฉด์„œ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. (V3 ์ดํ›„๋ถ€ํ„ฐ ๊ฐ€๋Šฅ)

 

๋•๋ถ„์— bg-[url(`/vercel.svg`)] ์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (custom ์†์„ฑ)

 

text-[#000]๋„ ๊ฐ€๋Šฅ

 

tailwind.config.ts๋กœ ์ปค์Šคํ…€ class name๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

import type { Config } from "tailwindcss";
import forms from "@tailwindcss/forms";

const config: Config = {
  content: [
    "./pages/**/*.{js,ts,jsx,tsx,mdx}",
    "./components/**/*.{js,ts,jsx,tsx,mdx}",
    "./app/**/*.{js,ts,jsx,tsx,mdx}",
  ],
  theme: {
    extend: {
      margin: {
        tomato: "120px",
      },
      borderRadius: {
        "sexy-name": "11.11px",
      },
    },
  },
  plugins: [forms],
};
export default config;

 

borderRadius์— ์ƒ์„ฑํ•œ ์ปค์Šคํ…€ class name์€ rounded-sexy-name์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

Tailwind v4๋ถ€ํ„ฐ๋Š” tailwind.config.ts ๋Œ€์‹  Tailwind๋ฅผ ๊ฐ€์ ธ์˜จ CSSํŒŒ์ผ(globals.css) (@import "tailwind" ํŒŒ์ผ)์—์„œ ์ง์ ‘ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… ์งœ์ž˜ํ•œ ๋ฉ”๋ชจ


appearance-none

input์ด ๊ฐ–๊ณ  ์žˆ์„์ง€๋„ ๋ชจ๋ฅด๋Š” ๊ธฐ๋ณธ ์Šคํƒ€์ผ์„ reset

 

pointer-events-none

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋ฅผ ์™„์ „ํžˆ ๋ฌด์‹œ

 

select-none

ํ…์ŠคํŠธ ๋“œ๋ž˜๊ทธ/๋ณต์‚ฌ ๋ถˆ๊ฐ€๋Šฅ, ํด๋ฆญ์€ ์ •์ƒ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ธ”๋ก ์ง€์ •(select)๋งŒ ๋ถˆ๊ฐ€

 

flex-1 === flex: 1 1 0%

flex-grow: 1; flex-shrink: 1; flex-basis: 0%;

 

text-base

text๋ฅผ reset ํ•ด์ฃผ๋Š” ์—ญํ• (๊ธฐ๋ณธ๊ฐ’)

 

space-x-5

child์— ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ„๊ฒฉ ์ƒ์„ฑ

 

divide-y-2

child์— ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ๊ตฌ๋ถ„์„  ์ƒ์„ฑ

 

inset-x-0

left: 0px & right: 0px

 

inset-y-0

bottom: 0px & top: 0px

 

mx-auto

margin-left: auto & margin-right: auto

 

max-w-md

์ตœ๋Œ€ width๋ฅผ md ์‚ฌ์ด์ฆˆ๋กœ ์ œํ•œ

 

aspect-video

aspect-ratio: 16/9; (๋น„๋””์˜ค ๋น„์œจ๋กœ ๋งž์ถค)

 

aspect-square

๋น„์œจ์„ 1:1๋กœ ๋งž์ถค

 

invalid:

์ž…๋ ฅ๊ฐ’์ด ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ ์šฉํ•  style ์ง€์ • ๊ฐ€๋Šฅ(์ผ๋ฐ˜ css selector)

 

*:

๋ถ€๋ชจ ์š”์†Œ์— ์ด modifier๋ฅผ ์ฃผ๋ฉด ํ•ด๋‹น ์š”์†Œ์˜ ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋“ค ์„ ํƒ ๊ฐ€๋Šฅ

 

has-[]:

์ž์‹ ์š”์†Œ๊ฐ€ ํŠน์ •ํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ์กด์žฌํ•˜๋ฉด ์Šคํƒ€์ผ ์ ์šฉ ๊ฐ€๋Šฅ

 

empty:

text๊ฐ€ ๋น„์–ด์žˆ๋Š” element๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… Animate


animate-bounce

ํ†ตํ†ต ํŠ€๋Š” ํšจ๊ณผ

ex) notification

 

animate-spin

์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๋„๋Š” ํšจ๊ณผ

ex) spinner

 

animate-pulse

์ฒœ์ฒœํžˆ ๋ฐ˜์ง์ด๋Š” ํšจ๊ณผ, ๋กœ๋”ฉ ํšจ๊ณผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์Œ

ex) loader

 

animate-ping

๋ฌผ๊ฒฐ์ด ํŒŒ๋™์น˜๋Š” ๋“ฏํ•œ ํšจ๊ณผ. ๋˜‘๊ฐ™์€ ํฌ๊ธฐ์˜ ๋„ํ˜•์„ ์ค‘์ฒฉ ์‹œ์ผœ์„œ ๋‚ด๋ถ€์˜ ๋„ํ˜•์— ์ด ํšจ๊ณผ๋ฅผ ๋„ฃ์œผ๋ฉด ์•Œ๋ฆผ ํšจ๊ณผ ๊ฐ™์€ ๋А๋‚Œ์„ ๋‚ผ ์ˆ˜ ์žˆ์Œ

ex) notification

 

โœ… Directives


์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ƒ์„ฑ๋œ CSS๋ฅผ ์–ด๋””์— ๋‘˜๊นŒ?

globals.css ๋‚ด์˜ directives๋“ค(import ๋˜์–ด์žˆ๋Š” 3๊ฐœ) (directive๋“ค์€ placeholder ์ •๋„๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.)

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์‹ค์ œ๋กœ globals.css์— ์™€์„œ ์ด directive๋“ค์„ ์ƒ์„ฑ๋œ class name์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.

 

์™œ 3๊ฐœ์ด๋ฉฐ, ์…‹์˜ ์ฐจ์ด์ ์€?

utilities: ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ชจ๋“  utility class name๋“ค์„ ๋„ฃ๋Š” ๊ณณ

base: ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ tailwind์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์Šคํƒ€์ผ ์ข…๋ฅ˜๋ฅผ ๋‘๋Š” ๊ณณ(reset style ๊ฐ™์€ ๋А๋‚Œ)

components: ๋ง ๊ทธ๋Œ€๋กœ tailwind style์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ className์„ ์ง€์ •ํ•˜์—ฌ ํ•ด๋‹น style๋“ค์„ ์ ์–ด๋‘๊ธฐ ์œ„ํ•จ

 

(ํ•ด๋‹น ํŒŒ์ผ์—์„œ ๊ฒฝ๊ณ  ๋ฐ‘์ค„์ด ๋ณด๊ธฐ ์‹ซ์œผ๋ฉด VSC์˜ ๋ฐ‘ ๋ฉ”๋‰ด์—์„œ ์–ธ์–ด๋ฅผ CSS์—์„œ Tailwind๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.)

 

apply, layer directive

@layer base {
  a {
    @apply text-orange-500;
  }
}

 

Tailwind v4๋Š” @tailwind base; @tailwind components; @tailwind utilities; ์ด 3์ค„์ด 

@import "tailwindcss"; ํ•œ ์ค„๋กœ ์ถ•์•ฝ๋จ.

 

โœ… Plugins


tailwind.config.ts ํŒŒ์ผ์€ plugins array๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

์ด ๊ณณ์— third-party plugin๋“ค์„ ์„ค์น˜ํ•œ๋‹ค.

 

(plugin๋“ค์ด ํ•˜๋Š” ์ผ์€ base layer์™€ utilities layer์™€ components layer๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ.)

 

๋ˆ„๊ตฐ๊ฐ€ ์ปค์Šคํ…€ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ณต๋ถ™ํ•ด์˜ฌ ํ•„์š”์—†์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์„ค์น˜ํ•˜๋ฉด ๋ฐ”๋กœ ๊ธฐ์กด layer์— ๋ฎ์–ด์“ฐ๊ธฐ๊ฐ€ ๋œ๋‹ค.

(daisyUI: tailwind css๋ฅผ ์œ„ํ•œ ๋ฉ‹์ง„ components ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, npm i daisyui@latest, plugins: [require("daisyui"])

 

plugin ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

import forms from "@tailwindcss/forms";

plugins: [forms]

 

Tailwind v4์—์„œ plugin ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

globals.css์—์„œ @plugin "@tailwindcss/forms";

'๐ŸŒŠ TailwindCSS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

TailwindCSS - IntelliSense ์ž๋™์™„์„ฑ์„ ์ฒซ ๋ฌธ์ž์—ด๋ถ€ํ„ฐ ํ™œ์„ฑํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•  (0) 2025.09.17
TailwindCSS - Layer  (0) 2025.09.10
TailwindCSS - ์‹œ์ž‘ํ•˜๊ธฐ  (0) 2025.05.26
'๐ŸŒŠ TailwindCSS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • TailwindCSS - IntelliSense ์ž๋™์™„์„ฑ์„ ์ฒซ ๋ฌธ์ž์—ด๋ถ€ํ„ฐ ํ™œ์„ฑํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • TailwindCSS - Layer
  • TailwindCSS - ์‹œ์ž‘ํ•˜๊ธฐ
j2yonghwa
j2yonghwa
Trying to be a fullstack developer ๐Ÿš€
  • j2yonghwa
    j2yonghwa
    j2yonghwa
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (156)
      • โฐ Daily WakaTime (1)
      • ๐Ÿ–๏ธ ๋…ธ๋งˆ๋“œ์ฝ”๋” (2)
      • ๐Ÿบ Dev Setup (3)
      • ๐Ÿ”ญ Tech Info (1)
      • ๐Ÿšซ Error (1)
      • ๐Ÿ“‚ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (23)
      • ♣๏ธ Next.js 14 (10)
      • ♠๏ธ Next.js 12 (20)
      • ๐Ÿ›ธ React Native (12)
      • ๐Ÿฆ‹ TypeScript (1)
      • ๐Ÿ Python (2)
      • ๐ŸŒŠ TailwindCSS (4)
      • ๐Ÿงฉ SQL (25)
      • ๐Ÿ’Ž Prisma (5)
      • ๐ŸŒฑ MongoDB (4)
      • ๐ŸŽฏ Redis (1)
      • ๐Ÿงฌ GraphQL (2)
      • ๐Ÿ”ฅ Firebase (7)
      • ๐Ÿ’ธ Third-Party Services (2)
      • ๐Ÿ•ธ๏ธ Web (1)
      • ๐Ÿ† ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (23)
      • ๐Ÿ“™ ๋ชจ๋”ฅ๋‹ค (5)
      • ๐Ÿ“— ์ฝ”ํ…Œ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ -JS- (0)
      • ๐Ÿ“˜ ํด๋ฆฐ์ฝ”๋“œ (0)
      • ๐Ÿฏ ๊ฟ€ํŒ ๐Ÿ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • ๊นƒํ—™
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    Python
    react router
    PostgreSQL
    0๋ ˆ๋ฒจ
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ž…๋ฌธ
    ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    API
    mongoDB
    Prisma
    next.js 12
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    React Native
    Firebase
    MySQL
    ๋ชจ๋”ฅ๋‹ค
    SQL
    dev setup
    Next.js
    next.js 14
    tailwindcss
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
j2yonghwa
TailwindCSS - Awesomeํ•œ ๊ธฐ๋Šฅ๋“ค
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”