๐Ÿฅถ css-module ์ž‘์„ฑ ์‹œ classNames ํŒจํ‚ค์ง€ ์„ค์น˜ ํ›„ ๊ธฐ๋Šฅ์†Œ๊ฐœ

leehyunjuยท2021๋…„ 6์›” 20์ผ
0
post-thumbnail

์šฐ๋ฆฌ๊ฐ€ ํ‰์†Œ ์ž‘์—… ํ•  ๋•Œ ํƒœ๊ทธ์— ํด๋ž˜์Šค๋ช…์„ ์ •ํ•ด์„œ css๋ฅผ ์ž…ํž ๋•Œ ์ •๋ง ์ž์ฃผ ์“ฐ๋Š” ๋‹จ์–ด๋“ค์ด ์ค‘๋ณต๋˜์–ด ์Šคํƒ€์ผ์ž‘์—… ์‹œ ๊ณค๋ž€ํ•  ๋•Œ๊ฐ€ ์ข…์ข… ์žˆ๋‹ค. ์ด๊ฑธ ๊ณ ์œ ์˜ ๊ฐ’์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ css-modules์ด๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ css ํŒŒ์ผ์—์„œ ํด๋ž˜์Šค๋ช…์ด ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ ์„ ๊ทน๋ณต ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  css-modules์€ ๊ฐ„๊ฒฐํ•œ ํด๋ž˜์Šค๋ช…์„ ์ด์šฉํ•ด ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ๋•Œ๋„ ์ข‹๋‹ค.

{์ด๋ฆ„}.module.css

CRA์—์„œ๋Š” CSSํŒŒ์ผ ์ด๋ฆ„์„ ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด css-module์ด ๋œ๋‹ค.


import style from './button.module.css';

<button className={`${style.button} ${style.big}`}>ํฐ ๋ฒ„ํŠผ</button>
<button className={`${style.button} ${style.small}`}>์ž‘์€ ๋ฒ„ํŠผ</button>

css-module์€ ํด๋ž˜์Šค๋ช… ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋‚ด๋ณด๋‚ธ๋‹ค. css ํŒŒ์ผ์—์„œ ์ •์˜ํ•œ ํด๋ž˜์Šค๋ช…์ด style๊ฐ์ฒด์˜ ์†์„ฑ ์ด๋ฆ„์œผ๋กœ ์กด์žฌํ•œ๋‹ค. style๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


{
 big:'button_big__1AXxh',
 small:'button_small__1G4lx'
 }

๋ชจ๋“ˆ๋กœ ํด๋ž˜์Šค๋ช…์„ ์ •์˜ํ•จ์œผ๋กœ์„œ ์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค๋ช… ๋’ค์— ํ•ด์‹œ๊ฐ’์ด ์ž๋™์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ cssํŒŒ์ผ์—์„œ ๊ฐ™์€ ์ด๋ฆ„์˜ ํด๋ž˜์Šค๋ช…์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์ด๋ฆ„ ์ถฉ๋Œ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  className์— ์†์„ฑ๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋œ๋‹ค๋ฉด, classnames ํŒจํ‚ค์ง€๋ฅผ ์ด์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.


ํ„ฐ๋ฏธ๋„์ฐฝ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ classnames ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์ฃผ์ž.

$npm install classnames

import style from './box2.module.css';
import cn from 'classnames';

function Box({size}) {
const isBig = size === 'big';
const label = isBig ? 'ํฐ ๋ฐ•์Šค' : '์ž‘์€ ๋ฐ•์Šค';
return (
<div 
  className={cn(style.box, { [style.big]: isBig, [style.small]: !isBig})}
>
  {label}
</div>
);
}
export default Box;

์ด๋ ‡๊ฒŒ cnํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ฑด๋ถ€๋กœ ํด๋ž˜์Šค๋ช…์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐœ์ธ์ ์œผ๋กœ ์ด๊ฒŒ ๋” ์–ด๋ ค์›Œ๋ณด์ด๋Š”๋ฐ ์ง์ ‘ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•ด๋ณด๋ฉด ์ด๊ฒŒ ๋” ์‰ฌ์šธ ์ˆ˜๋„...? ์žˆ์„๋ž‘๊ฐ€ ๐Ÿ™„

profile
์•„๋Š‘ํ•œ ๋‡Œ๊ณต๊ฐ„ ๐Ÿง 

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด