๋ฆฌ์กํธ์์๋ ์ปดํฌ๋ํธ๋ฅผ ์คํ์ผ๋งํ ๋ ๋ค์ํ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ ์ค ์์ฃผ ์ฌ์ฉํ๋ Sass์ styled-components์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค.
Sass(Syntactically Awesome Style Sheets)๋ CSS pre-processor๋ก์, ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ๊ฐ๊ณ ์๋ค.
- ๋ณต์กํ ์์ ์ ์ฝ๊ฒ ํ ์ ์๊ฒ ํด์ค๋ค.
- ์ฝ๋์ ์ฌํ์ฉ์ฑ์ ๋์ฌ์ค๋ค.
- ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ฌ์ค ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํด์ค๋ค.
Sass์์๋ ๋๊ฐ์ง ํ์ฅ์ .scss/.sass๋ฅผ ์ง์ํ๋ค. ๊ทธ์ค Scss๋ Sass ์ธ๋ฒ์งธ ๋ฒ์ ์์ ์ถ๊ฐ๋์๋๋ฐ, Sass์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ฉด์ CSS ๊ตฌ๋ฌธ๊ณผ ์์ ํ ํธํ๋๋๋ก ๋ง๋ค์ด์ก๋ค.
// CSS
.wrapper {
width: 100%;
height: 100%;
}
.wrapper div {
width: 500px;
height: 200px;
}
.wrapper div span {
background-color: blue;
}
// SCSS
.wrapper {
width: 100%;
height: 100%;
div {
width: 500px;
height: 200px;
span {
background-color: blue;
}
}
}
$font-color: red;
.content {
color: $font-color;
float:left;
.title {
color: $font-color;
font-size: 18px;
}
}
@mixin box-style {
width: 100px;
height: 50px;
background-color: red;
}
.section {
position: absolute;
top: 0;
.box {
@include box-style;
}
}
// style.scss
@import 'header';
@import 'aside';
@import 'footer';
...
// if
$num: two;
div {
@if $num == one {
color: blue;
} @else if $num == two {
color: red;
} @else {
color: black;
}
}
// .css (..compile)
div{
color: red;
}
// for
@for $i from 1 through 3 {
.item-#{$i} {
width: 2em * $i;
}
}
- ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ํ ๋๊ตฌ๊ฐ ํ์ํ๋ค.
- ์ปดํ์ผ ์๊ฐ์ด ๊ธธ์ด์ง๋ค.
styled-components๋ ํ์กดํ๋ ๋ฆฌ์กํธ css-in-js ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์์ ๊ฐ์ฅ ์๋๊ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. css-in-js๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ๋ด์์ ์คํ์ผ์ ๊ด๋ฆฌํ ์ ์๋๋ก ํด์ค๋ค.
- ํ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ์์ ์คํ์ผ๊น์ง ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ .css/.scss ํ์ผ ๊ฐ์๊ฑธ ๋ง๋ค ๊ณ ๋ฏผ์ ์ํด๋ ๋๋ค.
- ์คํ์ผ๋งํ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ props ๊ฐ์ ์คํ์ผ์ชฝ์์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ด props์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง์ด ๊ฐ๋ฅํ๋ค.
- ์ปดํ์ผ์ ํด๋์ค๋ช ์ ์๋์ผ๋ก ์์ฑํด์ฃผ๊ธฐ ๋๋ฌธ์ ํด๋์ค๋ช ์ด ๊ฒน์น๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. (ํด๋์ค๋ช ์ ๋ํ ๊ณ ๋ฏผ์ ๋์ด์ค ์ ์๋ค)
- css๋ฅผ ์ปดํฌ๋ํธํํ ์ ์์ด ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๊ณ , ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์ css๊ฐ ๋ณต์กํด์ง๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
css ์ ์ฒ๋ฆฌ๊ธฐ๋ nesting์ด ๊ฐ๋ฅํด ๊ฐ๋ ์ฑ๊ณผ ๋๋ฒ๊น ์ด ์ฉ์ดํ์ง๋ง, ํด๋์ค๋ช ์ ๋ํ ๊ณ ๋ฏผ์ ํด์ผํ๋ค.
ํ์ง๋ง css-in-js ๋ฐฉ์์ ์ปดํ์ผ์ ํด๋์ค๋ช ์ ์๋์ผ๋ก ์์ฑํด์ฃผ๊ธฐ ๋๋ฌธ์ ํด๋์ค๋ช ์ ๋ํ ๊ณ ๋ฏผ์ ํ์ง ์์๋ ๋๋ค.
css ์ ์ฒ๋ฆฌ๊ธฐ๋ html ๋ฌธ์์์ ์ด๋ฏธ ์ฝํ์ ธ ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์ฒ์ ์คํ์ผ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์์ด ๋ง๋๋ผ๋ ๊ทธ ์ดํ์ ์ถ๊ฐ์ ์ธ ๋ ๋๋ง์ ์๋์ ์ผ๋ก ์ ๋ค.
ํ์ง๋ง css-in-js ๋ฐฉ์์ ํด๋น ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋์๋ง ํด๋น ์คํ์ผ ์ ๋ณด๋ฅผ ์ผ๊ธฐ ๋๋ฌธ์ ๊ทธ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋๋ง๋ค ์คํ์ผ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค. ๋ฐ๋ผ์ ๋์ ์ธ ์ด๋ฒคํธ๊ฐ ๋ง์ ์ฌ์ดํธ๋ผ๋ฉด ๊ทธ๋งํผ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง์ด ์์ฃผ ๋ฐ์ํด, ์คํ์ผ ์ ๋ณด๋ฅผ ๊ทธ๋๊ทธ๋ ๋ค์ ์ฝ์ด์์ผ ํด์ ์ฑ๋ฅ ์์ ์ด์๊ฐ ์๊ธธ ์ ์๋ค.