컴포넌트별로 css파일을 따로 만든다고 해도, 범위는 전역적이 된다.
⇒ 다른 css 파일에 같은 클래스 이름을 한다면 클래스 이름 충돌. 그렇다고 매번 다르게 네이밍 하는것도 번거로움
⇒ CSS Modules로 해결!
CSS Modules
- 각 컴포넌트에 국한된 스타일을 작성할 수 있는 방법
- 클래스 이름이 고유하게 생성되어 다른 컴포넌트와의 충돌을 방지
- 즉, 클래스 이름을 여러 컴포넌트와 같게 해도, 고유한 이름으로 매겨줌
- 사용법
이름.module.css
확장자로 파일을 만듦(파일 위치는 아무데나 상관 없음)- css파일에 클래스 이름 당 스타일을 할당
- 해당 파일을 컴포넌트에서 import (js객체 처럼 import :
import style from “~.module.css”
) - 쓰고 싶은 jsx의 class이름으로
2객체.클래스이름
으로 해주면, 고유 클래스 이름
.nav { background-color: red; } .nav ul { display: flex; }
import style from "../../styles/Navigation.module.css"; export default function Navigation() { ... return ( <nav className={style.nav}> <ul>...</ul>
이렇게 하면, 해당 nav의 클래스 이름이
navigation_nav__고유값
같은 형태가 됨참고)
전역 css 파일을 적용하고 싶다면?
- global.css 같이 파일 아무곳에나 만듦
- 최상위 layout, 즉 app/layout.tsx 에 1번을 import