- 현대 웹 앱이 컴포넌트를 기반으로 성숙해가면서 CSS 스타일링 방법론 또한 컴포넌트를 기반으로 재구성되고 있으며 CSS-in-JS가 등장하였고, 그 중 가장 인기 있는 라이브러리가 바로 우리가 다뤄볼 Styled-Components이다.
1. Styled-Component
npm install --save styled-components
import styled from "styled-component"
const title = styled.div`
background-color: red;
margin: 10px 0;
`
1-1. Adapting based on props (가장 기본적이고 많이 쓰이는 항목)
import styled from 'styled-components';
<title check={true} />
const title = styled.div`
background-color: red;
margin: 10px 0;
${props=>{
return props.check ? 'background-color: white' : 'background-color:black'
}}
`
render(
<div>
<Button>Normal</Button>
<Button primary width="100">Primary</Button>
</div>
);
const Button = styled.button`
background: ${props => props.width < 200 ? "palevioletred" : "white"};
color: ${props => props.primary ? "white" : "palevioletred"};
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid palevioletred;
border-radius: 3px;
`;
1-2. Extending Styles
render(
<div>
<Button>Normal Button</Button>
<TomatoAnchorButton>Tomato Button</TomatoAnchorButton>
</div>
);
const Button = styled.button`
color: palevioletred;
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid palevioletred;
border-radius: 3px;
`;
const TomatoAnchorButton = styled(Button.withComponent("a"))`
color: tomato;
border-color: tomato;
`;
1-3. Nesting & Global Style (의미없는 styled-component 지양하기)
render(
<>
<GlobalStyle />
<Thing>
I'm blue, da ba dee da ba daa
</Thing>
</>
)
const Thing = styled.div`
&& {
color: blue;
}
`
const GlobalStyle = createGlobalStyle`
${Thing} {
color: red;
}
`
1-4. mixin
import { css } from "styled-components"
const Navigation = styled.nav`
position: fixed;
${Sticky}
`;
const Sticky = css`
position: fixed !important;
background-color: white;
border-bottom: 1px solid rgba(0, 0, 0, 0.11);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.11);
transition: all 0.6s ease-in-out;
color: black;
`;