-
[2019.08.23] 오늘의 TIL - [Next.js] global Style의 이해개발 블로깅/오늘의 TIL 2019. 8. 23. 01:10
next.js에서 여러 페이지 및 컴포넌트에 global 방식으로 스타일을 적용할 수 있다.
아래 예시를 봐보자.
components/nav.js
import React from 'react' const Nav = () => ( <div> <a>첫번째 컴포넌트 입니다.</a> </div> ) export default Nav;
a 태그 하나가 들어있는 간단한 컴포넌트이다.
pages/index.js
import React from 'react' import Nav from '../components/nav' const Home = () => ( <div> <a>index 페에지 입니다.</a> <Nav /> <style jsx>{` a { color: #067df7; text-decoration: none; font-size: 13px; text-align: center; margin: 10px 0; } `}</style> </div> ) export default Home;
index.js 페이지에서도 a 태그를 가지고 있다.
그리고 바로 a태그 바로 밑에 nav 컴포넌트를 가져와서 사용하였다.
nav 컴포넌트 하단에는 a태그에 스타일을 적용하고 있다.
결과 화면
결과를 확인해보니, index.js 페이지 파일에 있는 a 태그 요소에만 적용이 되었다.
만약 하위 컴포넌트에도 해당 스타일을 적용하려면 style을 global로 선언해주어야 한다.
# global style 선언 방식
<style jsx global> </style>
index.js 페이지 파일을 수정해보자.
import React from 'react' import Nav from '../components/nav' const Home = () => ( <div> <a>index 페에지 입니다.</a> <Nav /> <style jsx global>{` a { color: #067df7; text-decoration: none; font-size: 13px; text-align: center; margin: 10px 0; } `}</style> </div> ) export default Home;
결과 화면
최상위 index.js 페이지에서 선언한 style이 하위 컴포넌트에도 적용된 것을 확인할 수 있다.
최하위 컴포넌트로 사용할 nav2.js 파일을 하나 더 생성해보자.
components/nav2.js
import React from 'react'; const nav2 = () => ( <div> <a href='/'>최하위 컴포넌트 입니다.</a> </div> ) export default nav2;
똑같이 a태그를 사용한 컴포넌트이다.
components/nav.js
import React from 'react' import Nav2 from './nav2'; const Nav = () => ( <div> <a>첫번째 컴포넌트 입니다.</a> <Nav2 /> </div> ) export default Nav
최하위 컴포넌트 nav2.js 파일을 가져와서 사용한다.
결과 화면
최상위 페이지 index.js 파일에 선언한 style이 nav, nav2 컴포넌트에 전부 적용된 것을 확인할 수 있다.
'<style jsx global>' 태그를 최상위 페이지가 아닌, 중간 컴포넌트에서 선언하면?
최상위 페이지 index.js에 선언한 global style을 삭제하고, 중간 컴포넌트인 nav.js 파일에 선언해보자.
pages/index.js
import React from 'react' import Nav from '../components/nav' const Home = () => ( <div> <a href='/'>index 페이지 입니다.</a> <Nav /> </div> ) export default Home
index.js페이지에서 선언하던 global style을, 하위인 nav컴포넌트로 이동시킨다.
components/nav.js
import React from 'react' import Nav2 from './nav2'; const Nav = () => ( <div> <a>첫번째 컴포넌트 입니다.</a> <Nav2 /> <style jsx global>{` a { color: #067df7; text-decoration: none; font-size: 13px; text-align: center; margin: 10px 0; } `}</style> </div> ) export default Nav
결과화면
중간 컴포넌트인 nav컴포넌트에 선언을 하니, 상위 하위 구분 없이 전부 적용되는 것을 확인할 수 있다.
이러한 특징을 이용해서, 우리는 index.js라는 특정 페이지뿐 아니라, 모든 페이지에도 global하게 적용할 수 있다.
components/Layout.js
import React from 'react' import Header from './Header'; import Title from './Title'; const Layout = ({children}) => ( <div> <Header /> {children} <style jsx global>{` ... `}</style> </div> ) export default Layout;
바로 next.js 에서 흔히 사용하는 Layout 컴포넌트에 직접 global style을 적용하는 것이다.
그러면 모든 페이지는 Layout을 이용하므로, 모든 페이지 및 컴포넌트에 style을 적용시킬 수 있다.
스타일만 선언한 외부 파일을 가져와서 쓰는 방식도 있는데, 이건 다음에 기회 되면 작성해야겠다..!
반응형'개발 블로깅 > 오늘의 TIL' 카테고리의 다른 글
[2019.09.01] 오늘의 TIL - npm install 중, permission denied 에러 해결방법 (2) 2019.09.01 [2019.09.01] 오늘의 TIL - node 버전에 변경하는 방법 (0) 2019.09.01 [2019.08.21] 오늘의 TIL - [Next.js] Style 주의할 점 (0) 2019.08.21 [2019.08.10] 오늘의 TIL - CRA eject란? (0) 2019.08.10 [2019.07.14] 오늘의 TIL - webpack.config.js의 build 설정 시 주의사항 (0) 2019.07.15