웹 문서의 스타일을 담당하는 CSS 문법은 작성하는 데에 있어서 몇몇 문제점이 있었다.
이런 배경으로 문제점을 해결하기 위해 나온 문법으로 scss, styled-components 출시되었다.
Nesting
기능을 활용하여 가독성있게 전환할 수 있으며/*적용 전*/
login-container {
display: flex;
justify-content: center;
align-items: center
}
button {
width: 200px;
height: 100px;
background-color: blue;
}
button:hover {
background-color: red;
cursor: pointer;
}
input {
background-color: blue;
}
input:focus {
background-color: red;
}
/*적용 후*/
$theme-color: blue;
%flex-center {
display: flex;
justify-content: center;
align-items: center
}
login-container {
@extend flex-center;
button {
width: 200px;
height: 100px;
background-color: $theme-color;
&:hover {
background-color: red;
cursor: pointer;
}
}
input {
background-color: $theme-color;
&:focus {
background-color: red;
}
}
}
Mixin
기능과 여러 selector 기능이 존재한다.render(
<Wrapper>
<Title>
Hello World!
</Title>
</Wrapper>
);
const Wrapper = styled.section`
padding: 4em;
background: papayawhip;
`;
const Title = styled.h1`
font-size: 1.5em;
text-align: center;
color: palevioletred;
`;
props
기능을 활용할 수 있어, jsx 에서 넘겨주는 값을 css 문법에서 활용 가능하다.css in css
문법은 기본적으로 js 파일과는 분리되어 있는 구조이다. 그렇기 때문에 어떤 컴포넌트의 상태값이 변하더라도 이에 반응하기 쉽지 않으며, 처음에 렌더링될 때에도 브라우저에 보이지 않는 컴포넌트까지 웹문서의 스타일 정보로 읽히기 때문에 불필요한 컴파일 과정이 추가된다.css in js
방식이기에 해당 컴포넌트가 렌더링될 때에만 해당 스타일 정보를 읽는다.css in csss
는 html 문서에서 이미 읽혀져있는 상태이기 때문에 처음에는 스타일 정보를 가져오는 양이 많더라도 그 이후에 추가적인 렌더링은 상대적으로 적을 것이다.