CSS Module: ๋ฆฌ์กํธ ํ๋ก์ ํธ์์ ์ปดํฌ๋ํธ๋ฅผ ์คํ์ผ๋ง ํ ๋ ์ฌ์ฉํ๋ ๊ธฐ์ → CSS ํด๋์ค๊ฐ ์ค์ฒฉ๋๋ ๊ฒ์ ๋ฐฉ์ง
โญ๏ธ CRA(create-react-app)๋ก ๋ง๋ ํ๋ก์ ํธ์์ CSS Module๋ฅผ ์ฌ์ฉํ ๋, CSSํ์ผ ํ์ฅ์๋ฅผ .module.css๋ก ํ๋ฉด ๋จ
์ฌ์ฉ๋ฒ
[Box.module.css]
.Box {
background: black;
color: white;
padding: 2rem;
}
[Box.js]
import React from "react";
import styles from "./Box.module.css";
function Box() {
return <div className={styles.Box}>{styles.Box}</div>;
}
export default Box;
→ className์ ์ค์ ํ ๋์๋, styles.Box ์ฒ๋ผ import๋ก ๋ถ๋ฌ์จ styles๊ฐ์ฒด ์์ ์๋ ๊ฐ์ ์ฐธ์กฐ
→ ํด๋์ค ์ด๋ฆ์ ๋ํ์ฌ ๊ณ ์ ํ ์ด๋ฆ์ ๋ง๋ค๊ธฐ ๋๋ฌธ์, CSS ํด๋์ค ์ด๋ฆ์ด ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ ์ด๋ฆ๊ณผ ์ค๋ณต๋๋ ์ผ์ด ์์
์ฌ์ฉํ๊ธฐ ์ ํฉํ ์ํฉ
- ๋ ๊ฑฐ์ ํ๋ก์ ํธ(ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ํ๋ซํผ ๊ทธ๋ฆฌ๊ณ ๊ธฐ์ ๋ฑ์ ์์ด์ ๊ณผ๊ฑฐ๋ก๋ถํฐ ๋ฌผ๋ ค ๋ด๋ ค์จ ๊ฒ์ ์๋ฏธ)์ ๋ฆฌ์กํธ๋ฅผ ๋์ ํ ๋
- CSS ํด๋์ค๋ฅผ ์ค๋ณต๋์ง ์๊ฒ ์์ฑํ๊ธฐ ์ํ์ฌ CSS ํด๋์ค ๋ค์ด๋ฐ ๊ท์น ๋ง๋ค๊ธฐ ๊ท์ฐฎ์ ๋
CSS ํด๋์ค ๋ค์ด๋ฐ ๊ท์น
1. ์ปดํฌ๋ํธ์ ์ด๋ฆ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ ์ค๋ณต๋์ง ์๊ฒ ํจ.
2. ์ปดํฌ๋ํธ์ ์ต์๋จ CSS ํด๋์ค๋ ์ปดํฌ๋ํธ์ ์ด๋ฆ๊ณผ ์ผ์น์ํด (ex: .Button)
3. ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ณด์ฌ์ง๋ CSS ํด๋์ค๋ CSS Selector๋ฅผ ์ ํ์ฉํ๋ค. (ex: .MyForm .my-input)
CSS Module์ ๋ณ๋๋ก ์ค์นํด์ผ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ โธ webpack(์ฌ๋ฌ๊ฐ ํ์ผ์ ํ๋์ ํ์ผ๋ก ํฉ์ณ์ฃผ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ(Module bundler)์์ ์ฌ์ฉํ๋ css-loader์์ ์ง์
์์ด์ฝ๋ค์ ์ปดํฌ๋ํธ ํํ๋ก ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: react-icons
$ yarn add react-icons
- ํด๋์ค ์ด๋ฆ์ - ๊ฐ ๋ค์ด๊ฐ ์๋ค๋ฉด styles['my-class']๋ก ์์ฑ
- ๋ง์ฝ ์ฌ๋ฌ๊ฐ๊ฐ ์๋ค๋ฉด, ${styles.one} ${styles.two}๋ก ์์ฑ
- ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง์ ${styles.one} ${condition ? styles.two : ''}๋ก ์์ฑ
CSS Module์ธ classnames๋ผ์ด๋ธ๋ฌ๋ฆฌ์ bind๊ธฐ๋ฅ ์ฌ์ฉ
→ CSS ํด๋์ค ์ด๋ฆ ์ง์ ํด์ค ๋, cx('ํด๋์ค ์ด๋ฆ')๊ณผ ๊ฐ์ ํ์์ผ๋ก ํธํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
ex)
cx('one', 'two')
cx('my-component', {
condition: true
})
cx('my-component', ['another','classnames'])
โ๏ธ ์ฐธ๊ณ ๋ด์ฉ
- CSS Module์ Sass์์๋ ์ฌ์ฉ ๊ฐ๋ฅ → ํ์ฅ์๋ฅผ .module.scss๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋จ (๊ทธ ์ ์ node-sass ์ค์นํ์)
- CSS Module์ ์ฌ์ฉํ๊ณ ์๋ ํ์ผ์์ ํด๋์ค ์ด๋ฆ์ ๊ณ ์ ํ ํ์ง ์๊ณ ์ ์ญ์ ํด๋์ค์ด๋ฆ์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ → :global
:global .my-global-name{
}
[Sass์ ๊ฒฝ์ฐ]
:global {
.my-global-name{
}
}
- CSS Module์ ์ฌ์ฉํ์ง ์๋ ๊ณณ์์ ํน์ ํด๋์ค์์๋ง ๊ณ ์ ์ด๋ฆ ๋ง๋ค์ด์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ → :local
:local .make-this-local{
}
[Sass์ ๊ฒฝ์ฐ]
:local {
.make-this-local{
}
}
'ํ๋ก ํธ์๋ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| styled-components (0) | 2022.12.08 |
|---|---|
| Sass (0) | 2022.12.06 |
| ๋ฆฌ์กํธ ๊ฐ๋ฐ ์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํ ๋๊ตฌ (0) | 2022.12.02 |
| LifeCycle Method (0) | 2022.12.02 |
| ํด๋์คํ ์ปดํฌ๋ํธ (0) | 2022.12.02 |