๐งธ ๐ ๐ ์๋ก์ด ํ ์ด ํ๋ก์ ํธ์์ ์ฌ์ฉํ css ๋ฐฉ์์ ๊ฒฐ์ ํ๊ธฐ ์ํด
์ง์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์๋ค์ ์กฐ์ฌํ๊ณ ์ฅ๋จ์ ์ ๋น๊ตํด ๋ดค๋ค! ๐๐ปโ๏ธ
๐ ๊ณ ๋ คํ ์ ํ์ง
- css module
- css preprocessor(scss)
- css-in-js(styled-components)
์ปดํฌ๋ํธ๋ฅผ ์ง์ ์ ์ํด๋ณด๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ Tailwind CSS, Bootstrap, Material UI ๋ฑ์ CSS Framework๋ ๊ณ ๋ คํ์ง ์์๋ค.
โ๏ธ ๊ธฐ์กด css๊ฐ ๊ฐ์ง๋ ๋ฌธ์ ์
๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ ๋ฐ๋ก ์ค๋ณต๋ ํด๋์ค๋ช
์ ์๋ค.
css๋ global scope๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์, ํด๋์ค๋ช
์ด ์ค๋ณต๋ ๊ฒฝ์ฐ ์์น์๋ ๊ณณ์ ์คํ์ผ์ด ์ ์ฉ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๊ฒฐ๊ตญ ํด๋์ค๋ช
์ ์ ์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ง์ ์ ๋ฐ์ ์๋ค. ํด๋์ค๋ช
์ ์ ์ ๋ ๊ธธ์ด์ง๊ณ , ์๋ฌด๋ฆฌ ๊ฒน์น์ง ์๊ฒ ์ด๋ฆ์ ๋ถ์ด๋ ค๊ณ ํ ๋ค ํด๋์ค๋ช
์ ์ ์ผ์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
์ธ ๊ฐ์ง ์ ํ์ง ๋ชจ๋, ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
1๏ธโฃ css module
- ๊ธฐ์กด css์ ์ ์ฌํ๋ ํ์ผ์ ํ์ฅ์๋ช
์ด ๋ค๋ฅด๋ค. (
.css
๊ฐ ์๋.css.module.css
) - css module๋ก ์์ฑํ ๊ฒฝ์ฐ ํด๋์ค๋ช ์ด ์๋์ผ๋ก ํด์ฑ๋๋ค! ํด๋์ค๋ช ์ด ์๋์ผ๋ก ๊ณ ์ ํ ๊ฐ์ ๊ฐ๊ฒ ๋๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ css ํ์ผ์์ ๋์ผํ ํด๋์ค๋ช ์ ์ฌ์ฉํ๋๋ผ๋ ์คํ์ผ ์ค์ฒฉํ์์ด ์ผ์ด๋์ง ์๋๋ค.
2๏ธโฃ css pre-processor(sass)
- ๊ธฐ์กด css์ ์๋ก์ด ๋ฌธ๋ฒ์ด ๋ํด์ง ์ธ์ด๋ก์, ์ค์ ๋์ ์์๋ ์์ css๋ก ๋ณํ๋๋ค.
์คํ์ผ ์ค์ฒฉํ์์ ํด๊ฒฐ ๋ฟ ์๋๋ผ ๋ฐ๋ณต์ ์ธ ์คํ์ผ ์์ฑ์ ๋ฐฉ์งํ ์ ์๋ ๋ค์ํ ๋ฌธ๋ฒ๋ค์ ์ ๊ณตํ๋ค. - ๊ธฐ์กด css, css module๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ๋์ css ํ์ผ์ ์คํ์ผ์ ์์ฑํ๋ค.
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ css pre-processor๋ก๋ Sass๊ฐ ์๋ค.
3๏ธโฃ css-in-js(styled-components)
- ๋ณ๋์ css ํ์ผ์ด ์๋ JS ํ์ผ ๋ด์ ์คํ์ผ์ ์์ฑํ๋ค๋ ์ ์ด ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ด๋ค.
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ css-in-js๋ก๋ styled-components๊ฐ ์๋ค.
- ๋ค๋ฅธ ๋ ๋ฐฉ์์ ๋นํด ์๋๊ฐ ๋๋ฆฌ๋ค. JS๋ฅผ ํด์ํ๋ ๊ณผ์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- (styled-components) ํด๋์ค๋ช ์ ํ์ฉํ์ง ์๊ณ , ์คํ์ผ์ด ์ ํ์ง ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด๋ค.
๊ธฐ์กด css
: ์๋ฆฌ๋จผํธ์ ํด๋์ค๋ช
์ ํ์ฉํด ์คํ์ผ์ ์ ์ฉํ๋ค.
function App() {
return <div className="title">Hello</div>;
// style.css
.title {
color: blue;
}
styled-components
: ์คํ์ผ์ด ์
ํ์ง ์๋ฆฌ๋จผํธ ์์ฒด๋ฅผ ์์ฑํด ์ฌ์ฉํ๋ค.
function App() {
return <StyledDiv>Hello</StyledDiv>
const StyledDiv = styled.div`
color: blue;
`
๐๐ปโ๏ธ ๋ด ๊ฒฐ์
๊ฒฐ๋ก ์ ์ผ๋ก ์ด๋ฒ ํ๋ก์ ํธ์์๋ Sass๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ์ด์ ๋ ์๋์ ๊ฐ๋ค.
- styled-components๋ฅผ ์ฌ์ฉํ์์ ๋ ๋๊ผ๋ ๋ถํธํจ
- ์ฌ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๋ค.
์คํ์ผ์ด JS ํ์ผ ์์ ์์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ์คํ์ผ ์ฝ๋๋ฅผ ๋ณด๊ธฐ ์ํด์๋ JS ํ์ผ์ ์ด์ด๋ด์ผ๋ง ํ๋ค. ์คํ์ผ ๊ฐ์ ์๊ณ๋ฅผ ํ ๋์ ํ์ ํ ์ ์์ด์, ํ์ผ์ด ๋ง์์ง์๋ก ๋์ผํ ์คํ์ผ์ด ๋ณ๋์ JS ํ์ผ์ ์ฌ๋ฌ ๋ฒ ์์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค.
- ์๋ฆฌ๋จผํธ ์ด๋ฆ ์ง๋ ๊ฒ ์๊ฐ๋ณด๋ค ์์ฒญ ๊ท์ฐฎ๋ค ๐ ๊ทธ๋ฆฌ๊ณ ์์์๋ค.
- ์ฌ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๋ค.
- styled-components์ ์ฅ์ ์ sass๋ก๋ ์ถฉ๋ถํ ์ปค๋ฒ๊ฐ ๊ฐ๋ฅํ๋ค.
์์ง sass๋ฅผ ์ ๋๋ก ์ฌ์ฉํด๋ณด์ง๋ ์์์ง๋ง, styled-components์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ผ๊ณ ํ ์ ์๋ props๋ฅผ ์ด์ฉํ ์คํ์ผ๋ง์ sass์ mixin์ผ๋ก ์ถฉ๋ถํ ๋์ฒดํ ์ ์์ด ๋ณด์ธ๋ค. - ๋๋ฆฐ ์ฑ๋ฅ์ ์ปค๋ฒํ ๋งํผ css-in-js์ ์ฅ์ ์ด ์๋ฟ์ง ์๋๋ค. ์ธํด ๋์๋ ๋ณ ์กฐ์ฌ ์์ด “๋ฆฌ์กํธ์๋ styled-components๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค๋๋ผ~”๋ผ๊ณ ํด์ styled-components๋ฅผ ์ฌ์ฉํ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฒ์ ์ฐพ์๋ณด๋ ์ ์ฒด ์น์ฌ์ดํธ ์ค์์ css-in-js๋ฅผ ์ฌ์ฉํ๋ ์น์ฌ์ดํธ์ ๋น์จ์ 3% ๋ฐ์ ๋์ง ์๋๋ค๊ณ ํ๋ค.
- ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์คํ์ผ์ด ํ ํ์ผ ์์ ์์ฌ ์๋๊ฒ ๋ฐ๋์งํ์ง ์๊ฒ ๋๊ปด์ง๋ค.
๋ฌผ๋ก ๋ด๊ฐ styled-components์ ์ฌ์ฉ ๋ชฉ์ ์ ์จ์ ํ ์ดํดํ๊ณ ์ ํ์ฉํ๋ค๊ณ ์๊ฐํ์ง ์๋๋ค… ๊ทธ ์ธํด์ํ์ ์ ๋ง ์ฃผ๋จน๊ตฌ๊ตฌ์ ๋์ด์๊ธฐ ๋๋ฌธ์. ๋ค๋ง ์๋ฆฌ๋จผํธ ์ด๋ฆ ์ง๋ ๊ฑด ์ง์ง ๊ท์ฐฎ์๊ณ ์คํธ๋ ์ค ๋ฐ์๋ค. -> ์ฌ์ค ์ด๊ฒ ๊ฐ์ฅ ํผ๐ก ํต์ผ์ฑ ์๋ ๋ค์ด๋ฐ ์ง์ง ์ซ์๋ฐ ์ง๋ค๋ณด๋ฉด ๊ณ์ ๊ธธ์ด์ง๊ณ ๊ท์น๋ ์ฌ๋ผ์ง๋ค.
๊ทธ๋ฅ ๋ค๋ค ์จ์ ์ฐ๋ ๊ฒ ์๋๋ผ ์ง์ ๋น๊ตํด์ ๊ฒฐ์ ํ๋ ์ฌ๋ฐ๋ค. “๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํ๋ ์์ํฌ์ ๋ณธ๋ ์ฉ๋์ ์ฒ ํ์ ๊ณผ์ฐ ์ผ๋งํผ ์ดํดํ๊ณ ๊ทธ์ ๋ง๊ฒ ์ฌ์ฉํ๊ณ ์๋๊ฐ?” ๐ ์ด๊ฒ ์์ฆ ๋ด ์ต๋ ๊ด์ฌ์ฌ๋ค. ๊ฐ ๋๊ตฌ์ ์ฒ ํ์ ์ดํดํ๊ณ ์ ์ฌ์ ์์ ํ์ฉํ ์ ์๋ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ถ๋ค๋ ์๊ฐ์ ํ๋น.
'ํ๋ก์ ํธ ๊ธฐ๋ก > YSS | ์ฐ์ธ๋ํ๊ต ๊ณต๊ฐ๋๊ด ์๋น์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
(์๋ฌ ํด๊ฒฐ) Union type๊ณผ ํ์ ๊ฐ๋ ํจ๊ป ์ฌ์ฉํ๊ธฐ (1) | 2022.09.19 |
---|---|
์ฌ์ด๋๋ฐ ๊ตฌํํ๊ธฐ | UI (0) | 2022.09.18 |