React
[React] styled-components 의 GlobalStyle 사용하기
zubetcha
2021. 12. 20. 01:49
styled-components 패키지의
createGlobalStyle 사용하기
React를 사용하다 보면 보통 스타일 속성을 컴포넌트 안에서 설정하기 때문에
기본적으로 세팅하는 속성들은 각 컴포넌트마다 중복으로 작성해야 하는 경우가 많다.
이럴 경우 한 컴포넌트 안에서의 코드 양이 길어지고 많아지며 전체적인 가독성이 떨어진다는 단점이 있다.
프로젝트에 공통으로 사용하는 폰트 스타일이나,
box-sizing, button이나 input의 outline과 border 속성, cursor 등
기본적으로 컴포넌트마다 설정해주는 속성들은 GlobalStyle로 적용하면 컴포넌트별 중복 작성을 막아줄 수 있다.
초기 세팅
사용하고 있는 패키지 매니저에 따라 아래와 같이 styled-reset과 styled-components 패키지를 설치한다.
npm install styled-reset styled-components
yarn add styled-reset styled-components
createGlobalStyle() 생성
GlobalStyle.js 파일을 생성하여 아래와 같이 createGlobalStyle() Hook 으로 모든 컴포넌트에 적용할 속성들을 설정한다.
/* GlobalStyle.js */
import { createGlobalStyle } from 'styled-components'
import reset from 'styled-reset'
const GlobalStyle = createGlobalStyle`
${reset};
*, *::before, *::after {
box-sizing : border-box;
}
body {
color: #111;
font-family: -apple-system,BlinkMacSystemFont,San Francisco,Helvetica Neue,Helvetica,Ubuntu,Roboto,Noto,Segoe UI,Arial,sans-serif;
font-size: 15px;
font-weight: 400;
line-height: 1.6;
}
input {
outline: none;
}
input:focus {
outline: none;
border: none;
}
button {
cursor: pointer;
outline: none;
border: none;
background-color: #FFF;
}
a {
cursor: pointer;
}
`
export default GlobalStyle
GlobalStyle.js 적용하기
프로젝트를 실행하는 어플리케이션 파일에서 GlobalStyle.js 파일을 임포트한 후
최상위 컴포넌트로 추가하면 하위의 모든 컴포넌트에 GlobalStyle.js 내의 스타일 속성들이 적용된다.
import React from 'react'
import { Route } from 'react-router-dom'
import Login from '../pages/Login'
import Join from '../pages/Join'
import Detail from '../pages/Detail'
import Edit from '../pages/Edit'
import Main from '../pages/Main'
import Sub from '../pages/Sub'
import Upload from '../pages/Upload'
import Mypage from '../pages/Mypage'
import { ConnectedRouter } from 'connected-react-router'
import { history } from '../redux/configureStore'
import GlobalStyle from './GlobalStyle'
function App() {
return (
<>
<ConnectedRouter history={history}>
<GlobalStyle/>
<Route path="/" exact component={Main}/>
<Route path="/sub/:tag" exact component={Sub}/>
<Route path="/login" exact component={Login}/>
<Route path="/join" exact component={Join}/>
<Route path="/detail/:id" exact component={Detail}/>
<Route path="/edit/:id" exact component={Edit}/>
<Route path="/upload" exact component={Upload}/>
<Route path="/mypage/:nickname" exact component={Mypage}/>
</ConnectedRouter>
</>
)
}
export default App