`styled-components`는 React 애플리케이션에서 CSS를 JavaScript 코드로 작성할 수 있게 해주는 강력한 라이브러리입니다. 이를 통해 CSS 코드와 React 컴포넌트를 더욱 긴밀하게 결합할 수 있으며, 스타일링을 모듈화하고 유지 보수성을 높일 수 있습니다. 특히, `css` 함수를 활용하면 조건부 스타일링, 재사용 가능한 스타일 조각, 중첩된 스타일을 더 쉽게 작성할 수 있습니다. 이 기사에서는 `styled-components`와 `css` 함수의 기본 사용법과 활용 사례를 자세히 살펴보겠습니다.
설치하기
먼저, `styled-components`를 설치해야 합니다. npm 또는 yarn을 사용하여 다음 명령어를 실행합니다:
npm install styled-components or yarn add styled-components
기본 사용법
`styled-components`를 사용하여 스타일을 정의하고 이를 React 컴포넌트에 적용할 수 있습니다. 예를 들어, 기본 버튼 스타일을 정의하는 방법은 다음과 같습니다:
import styled from 'styled-components'; const Button = styled.button` background: palevioletred; border-radius: 3px; border: none; color: white; padding: 0.5em 1em; font-size: 1em; cursor: pointer; &:hover { background: darkviolet; } `; const App = () => ( <div> <Button>Click Me</Button> </div> ); export default App;
css 함수의 역할과 활용
`css` 함수는 `styled-components`에서 스타일을 더 유연하고 재사용 가능하게 작성할 수 있게 해줍니다. 이를 통해 스타일링을 모듈화하고 유지 보수성을 높일 수 있습니다.
조건부 스타일링
`css` 함수를 사용하여 조건부 스타일링을 더 간편하게 작성할 수 있습니다. 예를 들어, 버튼의 종류에 따라 다른 스타일을 적용하고자 할 때 유용합니다.
import styled, { css } from 'styled-components'; const buttonStyles = css` background: ${props => props.primary ? 'palevioletred' : 'white'}; color: ${props => props.primary ? 'white' : 'palevioletred'}; `; const Button = styled.button` ${buttonStyles} border: 2px solid palevioletred; border-radius: 3px; padding: 0.5em 1em; font-size: 1em; cursor: pointer; &:hover { background: ${props => props.primary ? 'darkviolet' : 'lightgray'}; } `; const App = () => ( <div> <Button>Normal Button</Button> <Button primary>Primary Button</Button> </div> ); export default App;
스타일 조각 재사용
`css` 함수를 사용하여 여러 컴포넌트에서 재사용할 수 있는 스타일 조각을 정의할 수 있습니다. 이를 통해 코드의 중복을 줄이고 일관성을 유지할 수 있습니다.
import styled, { css } from 'styled-components'; const sharedStyles = css` border-radius: 3px; padding: 0.5em 1em; font-size: 1em; cursor: pointer; `; const Button = styled.button` ${sharedStyles} background: palevioletred; color: white; border: none; &:hover { background: darkviolet; } `; const Input = styled.input` ${sharedStyles} border: 2px solid palevioletred; color: palevioletred; `; const App = () => ( <div> <Button>Click Me</Button> <Input placeholder="Type here..." /> </div> ); export default App;
중첩된 스타일
`css` 함수를 사용하여 중첩된 스타일을 정의할 수도 있습니다. 이는 복잡한 스타일링을 더 간결하고 읽기 쉽게 만듭니다.
import styled, { css } from 'styled-components'; const nestedStyles = css` &:hover { color: darkviolet; span { text-decoration: underline; } } `; const StyledLink = styled.a` color: palevioletred; ${nestedStyles} `; const App = () => ( <div> <StyledLink href="#"> Hover over me <span>and underline me!</span> </StyledLink> </div> ); export default App;
테마 사용하기
`ThemeProvider`를 사용하여 테마를 설정하고, 이를 스타일에 적용할 수 있습니다. 이는 애플리케이션 전반에 걸쳐 일관된 스타일을 적용하는 데 유용합니다.
import styled, { ThemeProvider } from 'styled-components'; const theme = { primary: 'palevioletred', secondary: 'darkviolet', }; const Button = styled.button` background: ${props => props.theme.primary}; color: white; padding: 0.5em 1em; border: none; border-radius: 3px; font-size: 1em; cursor: pointer; &:hover { background: ${props => props.theme.secondary}; } `; const App = () => ( <ThemeProvider theme={theme}> <div> <Button>Themed Button</Button> </div> </ThemeProvider> ); export default App;
글로벌 스타일 정의하기
`createGlobalStyle`을 사용하여 전역 스타일을 정의할 수 있습니다. 이는 애플리케이션의 기본 스타일을 설정하는 데 유용합니다.
import { createGlobalStyle } from 'styled-components'; const GlobalStyle = createGlobalStyle` body { margin: 0; padding: 0; font-family: 'Arial', sans-serif; } `; const App = () => ( <> <GlobalStyle /> <div> <h1>Hello World</h1> </div> </> ); export default App;
결론
`styled-components`는 CSS-in-JS 패러다임을 통해 CSS 코드와 React 컴포넌트를 더욱 긴밀하게 결합할 수 있게 해주는 강력한 도구입니다. `css` 함수는 스타일을 더 유연하고 재사용 가능하게 작성할 수 있게 해주어 조건부 스타일링, 재사용 가능한 스타일 조각, 중첩된 스타일 작성에 매우 유용합니다. 이를 통해 스타일링을 모듈화하고 유지 보수성을 높일 수 있습니다. 위의 예제들을 참고하여 자신만의 스타일을 적용해 보세요!