상세 컨텐츠

본문 제목

NextJS에서 React 컴포넌트 스타일링하기 (NextJS React 프로젝트 04)

개발

by 호박너구리의 블로그 2021. 5. 9. 18:30

본문

이전 글에서 NextJS에서 React 컴포넌트를 추가하여 페이지로 확인하는 법을 살펴보았습니다.

 

이번 글에서는 React 컴포넌트 스타일링에 대해서 다룰 것인데요,

그저 css 스타일 속성 주는 것이 왜 주제가 될만한 내용인지 아마 이해하기 어려우실 수도 있습니다.

 

사실 맞습니다! js (혹은 ts) 파일 내부에서 스타일링을 할 수도 있으니까요.

그러나 NextJS에서 별도의 css(혹은 sass, scss) 파일로 컴포넌트 레벨 스타일링을 한다면,

이 부분을 알아두셔야 할 수도 있습니다.

 

 

왜냐하면,

NextJS는 [name].module.css 형식의  CSSModule 방식을 지원하기 때문입니다.

 

* 전역으로 스타일링을 하고 싶다면 해당 css파일을 pages/_app.tsx 에서 import 하면 됩니다

* 단순 .css 파일 형식의 컴포넌트 레벨 스타일링을 하고 싶다면, 가능하지만 별도의 작업이 필요합니다

* css-in-js 형식 (styled component, styled-jsx 방식)을 선호하시는 분은 이 글을 건너뛰셔도 괜찮습니다.

 

 

 

0. sass/scss 사용하기

(css를 사용하시는 분은 건너뛰어도 되고, 이후 설명에서 스타일시트 파일 확장자를 모두 css라고 생각하시면 됩니다)

 

본격적으로 컴포넌트 레벨 스타일링을 하기 전에,

저는 sass/scss를 사용하기 위해 간단한 설치를 했습니다.

npm install sass

 

NextJS는 sass, scss 역시 내제된 방식(CSS Module)으로 지원하기에

이렇게 패키지만 하나 받으면 이후에는 [name].module.scss 형식을 사용하실 수 있습니다.

 

 

 

1. css 파일 생성하기

그럼 한 번 컴포넌트를 스타일링하기 위한 파일을 만들어보겠습니다.

이전 글에서 HomeContainer.tsx라는 파일을 만들었으니, 해당 컴포넌트와 같은 레벨에서

HomeContainer.module.scss 파일을 만들겠습니다.

 

스타일링 방식은 여타 css와 동일합니다!

.container {
  background-color: #dde0ea;
}

.title {
  color: #7c00ff;
}

 

 

 

2. 컴포넌트에 스타일 적용하기

이제 만든 스타일을 HomeContainer.tsx 컴포넌트에 적용해보겠습니다.

import styles from './HomeContainer.module.scss'

const HomeContainer = () => {
  return (
    <div className={styles.container}>
      <h2 className={styles.title}>
        Hi, this is Pumpkin-Raccoon
      </h2>
    </div>
  )
}

export default HomeContainer

 

CSSModule 방식은 같은 클래스명이라도 특정 컴포넌트에만 영향을 주는 방법입니다.

(어떻게 보면 분리된 블록과 같은 '컴포넌트' 방식과 잘 맞는 셈이죠)

 

방식은 위와 같은데요, 생성한 css 파일을 styles라는 이름으로 import합니다.

(꼭 styles라고 할 필요는 없지만, 보통 그렇게 많이 쓰는 듯 해요)

 

그리고 html 태그의 className에 styles.[만든 클래스명]을 적어주면 됩니다.

저는 container, title이라는 이름의 클래스를 만들어서 

styles.container, styles.title을 적용한 것입니다.

 

실행해보면 이렇게 원하는대로 적용된 것을 확인할 수 있습니다!

 

 

 

 

(참고). css 파일만 모아두고 싶다면?

저는 별도의 css 파일을 해당 컴포넌트 파일과 같은 레벨에 두는 편입니다.

그러나 css 파일을 루트의 styles 폴더와 같은 공간에 모아두고 싶은 분도 있을 수 있죠.

(create-next-app으로 생성된 디폴트 프로젝트도 그렇게 되어있구요)

 

그런 경우에는 루트 디렉토리에 next.config.js라는 파일을 만들어서

sass compiler를 설정해주면 됩니다.

 

다음과 같이 말이죠!

const path = require('path')

module.exports = {
  sassOptions: {
    includePaths: [path.join(__dirname, 'styles')],
  },
}

 

 

이제 NextJS에서 컴포넌트를 만들고, 스타일링하는 방법까지 모두 배웠습니다!

그럼 멋지게 웹사이트를 꾸며볼까요??

728x90

관련글 더보기

댓글 영역