728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
๐ node-sass ์ค์นํ๊ธฐ
- CSS ๊ฐ ๋๋ฌด ๊ธธ์ด์ง๋ ๊ฒฝ์ฐ SASS ๋ผ๋ preprocessor ๋ฅผ ์ด์ฉํ๋ฉด ์กฐ๊ธ ๋ ์ฝ๊ณ ์งง๊ฒ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ฒ๋ผ CSS ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- ์ฝ๊ฒ ๋งํด SASS ๋ฅผ ์ด์ฉํ๋ฉด ๋ณ์, ๋ฐ๋ณต๋ฌธ, ํจ์ ๋ฑ๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ผ๋ก CSS ์์ฑ์ด ๊ฐ๋ฅํด์ง๋ค๋ ๊ฒ์ด๋ค.
- SASS ๋ก ์์ฑํ ๋ค์ CSS ๋ก ์ปดํ์ผ๋ง ํด์ฃผ๋ฉด ๋๋๋ฐ, ์ด ๋ถ๋ถ์ node-sass ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ค์นํด์ฃผ๋ฉด ํด๊ฒฐ๋๋ค.
๐ค node-sass ์ค์นํ๊ธฐ
// npm ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ
npm install node-sass
// yarn ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ
yarn add node-sass
- ํฐ๋ฏธ๋์ ์ ์ฝ๋ ์ค ํ๋๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด node-sass ๊ฐ ์ค์น๋๋ค.
๐ node-sass ์ค์น ์ ๋ธ๋ผ์ฐ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์์ ์๋ฌ ๋ฐ์ํ ๊ฒฝ์ฐ ์ฐธ๊ณ ํ๊ธฐ
- nodejs 14 ๋ฒ์ ์ ์ฌ์ฉํ๋ค๋ฉด node-sass ๋ฅผ ์ง์ ๋ค๊ฐ 4.14 ๋ฒ์ ์ผ๋ก ์ค์นํด์ค๋ค.
// ์ค์น๋ node-sass ์ง์ฐ๊ธฐ (์๋ ๋ ์ฝ๋ ์ค ํ 1)
npm uninstall node-sass
yarn remove node-sass
// node-sass 4.14 ๋ฒ์ ์ค์นํ๊ธฐ
npm install node-sass@4.14
- nodejs 16 ๋ฒ์ ์ด์์ ์ฌ์ฉํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์งํํด์ค๋ค.
// 1. node-sass ๋ก 6 ๋ฒ์ ์ค์นํ๊ธฐ (์๋ ๋ ์ฝ๋ ์ค ํ 1)
npm install node-sass@6
yarn add node-sass@6
// 2. node_modules ํด๋๋ yarn.lock ํน์ package-lock.json ๋ณด์ด๋๊ฑธ ๋ค ์ญ์ ํ๊ธฐ
// 3. ํฐ๋ฏธ๋์์ node_modules ํด๋ ์ฌ์ค์น ํด์ฃผ๊ธฐ (์๋ ๋ ์ฝ๋ ์ค ํ 1)
npm install
yarn install
๐ค SASS ํ์ผ ์์ฑํ ํ import ํด๋ณด๊ธฐ
- ๊ธฐ์กด์ css ํ์ผ์ ์์ฑํ์ฌ import ํ๋ ๋ฐฉ์๋๋ก ํ๋ ํ์ผ๋ช ๋ง scss ๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค.
import './Detail.scss';
- ๋์ ๊ฒฝ์ฐ Detail.scss ํ์ผ์ ๋ง๋ค์ด์ค ํ Detail.js ํ์ผ์ import ํด์ฃผ์๋ค.
- ์ด์ scss ํ์ผ ๋ด์์ SASS ๋ฌธ๋ฒ์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ฉฐ ์ ์ฅํ๋ฉด ์๋์ผ๋ก css ํ์ผ๋ก ์ปดํ์ผ๋๋ค.
๐ SASS ๋ฌธ๋ฒ ์์๋ณด๊ธฐ
๐ค $ ๋ณ์ ๋ฌธ๋ฒ
- scss ํ์ผ์์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
$main-color : #484848;
.darkgrey {
color : $main-color;
}
- $๋ณ์๋ช : ์ง์ด๋ฃ์ ๊ฐ;
- ์์ ๊ฐ์ด ๋ณ์๋ฅผ ๋ง๋ค๊ณ ์ํ๋ ์๋ฆฌ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ๋ณ์๋ช ์ ํ๊ธ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ์์๋ฟ๋ง ์๋๋ผ px๊ฐ, %๊ฐ ๋ฑ ๋ค์ํ๊ฒ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๐ค @import ๋ฌธ๋ฒ
- ์ฌ์ค css ๋ฌธ๋ฒ์ผ๋ก, css ํ์ผ ๊ฐ import ๋ฅผ ํ ์ ์๋ ๋ฌธ๋ฒ์ด๋ค.
import './Detail.css';
- import ๋ค์ ๋ฐ์ดํ๋ฅผ ๋ฃ์ด ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๐ค nesting ๋ฌธ๋ฒ
- css ๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด ํน์ ์ ๋ ํฐ์ ํ์ ์ ๋ ํฐ์ ์คํ์ผ๋ง์ ์ฃผ๊ธฐ ์ํด ๊ธธ๊ณ ๋ณต์กํ ์ ๋ ํฐ๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- ๊ทธ๋์ scss ํ์ผ ์์์๋ ์๋์ ๊ฐ์ด ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.
// css ํ์ผ์์ ์์ฑํ๋ ๊ฒฝ์ฐ
.my-alert {
background: #eee;
padding: 15px 20px;
max-width: 500px;
width: 100%;
margin: auto;
}
.my-alert p {
margin-bottom: 0;
}
// scss ํ์ผ์์ nesting ๋ฌธ๋ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ
.my-alert {
background: #eee;
padding: 15px 20px;
max-width: 500px;
width: 100%;
margin: auto;
p {
margin-bottom: 0;
}
}
- ์์ ๊ฐ์ด ๊ธฐ์กด์ css ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์ ๋ ํฐ๋ฅผ ์์ ์ ๋ ํฐ ํ์ ์ ๋ ํฐ๋ฅผ ์์ผ๋ก ๊ธธ๊ฒ ๋์ดํ๋ ๋ฐฉ์์ด์๋ค๋ฉด, scss ์์๋ ์์ ์ ๋ ํฐ ์์ชฝ์ ํ์ ์ ๋ ํฐ๋ฅผ ์์ฑํด์ฃผ๋ ๊ฒ์ด๋ค.
- ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ์ ๋ ํฐ์ ํด์์ด ์ฝ๊ณ ๊ด๋ จ๋ class ๋ผ๋ฆฌ ํ ๋ฉ์ด๋ฆฌ๋ก ๊ด๋ฆฌํ๊ธฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค.
๐ค @extend ๋ฌธ๋ฒ
.my-alert {
background: #eee;
padding: 15px 20px;
max-width: 500px;
width: 100%;
margin: auto;
p {
margin-bottom: 0;
}
}
function Detail(){
return (
<div className="container">
<div className="my-alert">
<p>์ฌ๊ณ ๊ฐ ์ผ๋ง ๋จ์ง ์์์ต๋๋ค</p>
</div>
</div>
)
}
- ์์ ๊ฐ์ด Detail.sccs ํ์ผ๊ณผ Detail.js ํ์ผ์ ์์ฑํ๋ฉด ํ์ ์๋ฆผ์ฐฝ์ด ํ๋ ์์ฑ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ด๋ฌํ ์๋ฆผ์ฐฝ์ ๋ฐฐ๊ฒฝ์๋ง ๋ค๋ฅด๊ฒ ์์ฑํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
- .my-alert ๋ผ๋ ํด๋์ค๋ฅผ ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐํ์ฌ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค ์๋ ์์ง๋ง ๊ทธ๋ณด๋ค ๋ ์ข์ ๋ฐฉ๋ฒ์ @extends ๋ฌธ๋ฒ์ ํ์ฉํ๋ ๊ฒ์ด๋ค.
.my-alert {
background: #eee;
padding: 15px 20px;
max-width: 500px;
width: 100%;
margin: auto;
p {
margin-bottom: 0;
}
}
.my-alert-gold {
@extend .my-alert;
background: gold;
}
- ์์ ๊ฐ์ด ์๋ก ๋ง๋ ํด๋์ค ์์ @extend ๋ณต์ฌํด์ฌ ํด๋์ค๋ช ์ ์์ฑํด์ฃผ๋ฉด ํด๋น ํด๋์ค๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํด์จ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์์ ํ ๋ถ๋ถ๋ง ์๋ก ์์ฑํด์ฃผ๋ฉด ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋์ด gold ์์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ์๋ฆผ์ฐฝ์ด ๋ง๋ค์ด์ง๋ค.
๐ค @mixin / @include ๋ฌธ๋ฒ
- mixin ์ ํจ์๋ฅผ ๋ง๋๋ ๋ฌธ๋ฒ์ด๋ค.
- ์๋ ํจ์ ๋ฌธ๋ฒ์ ์ฝ๋๋ฅผ ์ถ์ฝํ๊ณ ์ฌ์ฌ์ฉํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋๋ฐ SASS ์์๋ function ์ด๋ผ๋ ํค์๋ ๋์ ์ @mixin ํจ์๋ช () ์ด๋ผ๊ณ ์ ์ ํ ์ค๊ดํธ ์์ ์ถ์ฝํ๊ณ ์ถ์ ์ฝ๋๋ฅผ ๋ชจ๋ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ํจ์๋ฅผ ๋ถ๋ฌ์ฌ ๋๋ @include ํจ์๋ช () ๊ณผ ๊ฐ์ ํํ๋ก ์ฌ์ฉํ๋ค.
@mixin alert() {
background: #eee;
padding: 15px 20px;
max-width: 500px;
width: 100%;
margin: auto;
}
.my-alert {
@include alert();
p {
margin-bottom: 0;
}
}
.my-alert-gold {
@extend .my-alert;
background: gold;
}
- ๋จ, JavaScript ๋ฌธ๋ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ ํจ์๋ช ์ด ์์ ์ ์ธ์ด ๋์ด์์ด์ผ ๋ฐ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- JavaScript ์์์ ๋์ผํ๊ฒ ํจ์์ ํ๋ผ๋ฏธํฐ๋ ๋ฃ์ ์ ์๊ณ ๋ค์ํ ๊ธฐ๋ฅ์ ๋ง๋ค์ด ๋ด๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] useEffect ๊ณผ์ ํ๊ธฐ (0) | 2022.03.26 |
---|---|
[React] useEffect ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2022.03.25 |
[React] styled-components ๋ก CSS ์คํ์ผ๋งํ๊ธฐ (0) | 2022.03.25 |
[React] React Router 3 : URL ํ๋ผ๋ฏธํฐ๋ก ์์ธ ํ์ด์ง 100๊ฐ ๋ง๋ค๊ธฐ (0) | 2022.03.24 |
[React] React Router 2 : Link, Switch, history ๊ธฐ๋ฅ ์์๋ณด๊ธฐ (0) | 2022.03.24 |