base, utility, component, layer

tailwind์—์„œ ์ œ๊ณตํ•˜๋Š” ์Šคํƒ€์ผ์€ base, utility, component 3๊ฐ€์ง€์˜ ์œ ํ˜•์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

@base

base ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ html ์š”์†Œ์— ๋Œ€ํ•œ css ์†์„ฑ์„ ์ •์˜ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“  span ์š”์†Œ์˜ ๊ธ€์ž ํฌ๊ธฐ๋ฅผ ์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ,

span {
    @apply text-3xl font-bold;
}

์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

@utilities

utility ํ‚ค์›Œ๋“œ๋Š” ํŠน์ • ์Šคํƒ€์ผ ์†์„ฑ์„ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

<div className='flex flex-col items-center'>hi</div>

div {
    display: flex;
    flex-direction: column;
    align-items: center;
}

ํ•˜๋‚˜๋Š” tailwind๋ฅผ ์‚ฌ์šฉํ•ด inline์œผ๋กœ css๋ฅผ ์ ์šฉํ•œ ๊ฒƒ์ด๊ณ , ์•„๋ž˜๋Š” ๊ฐ™์€ ์Šคํƒ€์ผ์„ ๊ธฐ๋ณธ css๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ์šฉํ•œ ๊ฒƒ์ด๋‹ค.

flex-direction: column ์„ flex-col ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋“ค์ด ๋ฐ”๋กœ utility ํด๋ž˜์Šค ๋“ค์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ tailwind ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ css๋ฅผ ์ ์šฉํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ, ๋Œ€๋ถ€๋ถ„์˜ ํด๋ž˜์Šค๊ฐ€ ๋ฐ”๋กœ utility ํด๋ž˜์Šค์— ํ•ด๋‹นํ•œ๋‹ค.

@components

component ํด๋ž˜์Šค๋Š” ์žฌ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ ui๋ฅผ ์ •์˜ํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค. tailwind๋Š” inline์œผ๋กœ css ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ css ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ํ•„์—ฐ์ ์œผ๋กœ html์ด ๊ธธ์–ด์งˆ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” component์— ๋Œ€ํ•ด ํด๋ž˜์Šค๋ฅผ ์ ์šฉํ•ด ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ์ˆ˜ ์žˆ๋‹ค.

@layer components{
    .custom-button {
        @apply p-3 rounded-lg bg-red-300 hover:bg-red-500 cursor-pointer text-center;
    }
}

@layer

์œ„ 2๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ inline ์œผ๋กœ css๋ฅผ ์ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— html์ด ๊ธธ์–ด์ ธ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ์ˆ˜๋ฐ–์— ์—†๋‹ค.

์ด๋Ÿด๋•Œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ๊ฒƒ์ด ๋ฐ”๋กœ layer ํ‚ค์›Œ๋“œ์ธ๋ฐ, ์ด ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํŠน์ • ํด๋ž˜์Šค์— ์ปค์Šคํ…€ css ๋ฅผ ์ง€์ •ํ•˜๋Š”๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

@layer utilities {
    .sort-vertical-flex {
        @apply flex flex-col items-center
    }
    .sort-row-flex {
        display: flex;
        flex-direction: row;
        align-items: center;
    }
}
@layer components {
    .custom-button {
        @apply p-3 rounded-lg bg-red-300 hover:bg-red-500 cursor-pointer text-center;
    }
}
@layer base {
    html {
        font-family: 'sans-serif;
        font-size: 20px;
        font-weight: 100;
        color: #2e2e2e;
    }
}

@layer utilities๋ฅผ ๋ณด๋ฉด flex ๋ฅผ ์ด์šฉํ•ด ์ •๋ ฌํ•˜๋Š” css๋ฅผ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๋ฌถ์–ด ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋œ @apply ํ‚ค์›Œ๋“œ๋Š” tailwind ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ css๋ฅผ ์ •์˜ํ• ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋ฉฐ, ํ•ด๋‹น ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ css๋งŒ ์‚ฌ์šฉํ•ด์„œ ์ •์˜ํ• ์ˆ˜๋„ ์žˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ layer ํ‚ค์›Œ๋“œ๋Š” tailwind์˜ base, utility, component ํด๋ž˜์Šค์—๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Last updated