[Next.js] CSS 모듈

2022. 6. 29. 15:51·Next.js/이론
반응형

Next.js에서 CSS를 추가하는 방법은 다양하게 있다. 

 

1. style 속성 사용 

import Link from "next/link";
import { useRouter } from "next/router";

const NavBar = () => {
  // ...
  
  return (
    <nav>
      <Link href="/">
        <a style={{ color: router.pathname === "/" ? "red" : "blue" }}>Home</a>
      </Link>
      <Link href="/about">
        <a style={{ color: router.pathname === "/about" ? "red" : "blue" }}>
          About
        </a>
      </Link>
    </nav>
  );
};

export default NavBar;

태그에 존재하는 style 속성을 사용하면 Next.js에서도 똑같이 style을 줄 수 있다. 

하지만 이 방법은 재사용에 불편함이 있고, 개인적으로 코드 가독성이 떨어진다고 생각한다. 

 

대신 사용할 수 있는 기능 중 하나가 .module.css 패턴이다. 

 

2. .module.css 패턴

먼저 css 파일을 파일명.module.css로 만들어준다. 

 

import Link from "next/link";
import { useRouter } from "next/router";
import style from "./NavBar.module.css";

const NavBar = () => {
  const router = useRouter();

  console.log(router);

  return (
    <nav>
      <Link href="/">
        <a className={router.pathname === "/" ? style.active : ""}>Home</a>
      </Link>
      <Link href="/about">
        <a className={router.pathname === "/about" ? style.active : ""}>
          About
        </a>
      </Link>
    </nav>
  );
};

export default NavBar;

그리고 style 파일로 불러와서 style 속성에 넣어준다. 

 

특징으로는 className에 "active"를 넣는것이 아닌 style.active를 넣어준다. 

이렇게 추가하면 Next.js에서 뒤에 난수값을 넣어줘서 클래스명이 충돌되는 현상을 방지해준다. 

그렇기 때문에 다른 컴포넌트에서 똑같이 active라는 클래스명을 사용해도 서로 충돌이 발생할 일이 없어진다. 

 

import Link from "next/link";
import { useRouter } from "next/router";
import style from "./NavBar.module.css";

const NavBar = () => {
  // ...

  return (
    <nav>
      <Link href="/">
        <a                                                      -- 1
          className={`${style.link} ${
            router.pathname === "/" ? style.active : ""
          }`}
        >
          Home
        </a>
      </Link>
      <Link href="/about">
        <a                                                      -- 2
          className={[
            style.link,
            router.pathname === "/about" ? style.active : "",
          ].join(" ")}
        >
          About
        </a>
      </Link>
    </nav>
  );
};

export default NavBar;

만약 스타일을 2개 이상 주고 싶은 경우 1과 2의 방식으로 사용할 수 있다. 

  1. 텍스트 형식으로 각각의 스타일을 넣어주는 방식
  2. 배열에 넣어 마지막에 join(" ")을 사용해서 넣어주는 방식

둘 중 어떤 방식을 사용해도 문제없다. 

 

그런데, 여기서 하나만 사용할 때는 충돌도 일어나지 않고, 자동으로 뒤에 난수값을 넣어주는 것은 좋다고 생각되나, 

2개 이상의 속성을 넣어주는 방식이 깔끔하다고 생각되지는 않는다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Next.js > 이론' 카테고리의 다른 글

[Next.js] Custom App  (1) 2022.07.01
[Next.js] Styles JSX  (2) 2022.06.30
[Next.js] Routing  (0) 2022.06.28
[Next.js] Next.js 세팅 및 구성 설명  (1) 2022.06.27
[Next.js] Next.js 란?  (1) 2022.06.26
'Next.js/이론' 카테고리의 다른 글
  • [Next.js] Custom App
  • [Next.js] Styles JSX
  • [Next.js] Routing
  • [Next.js] Next.js 세팅 및 구성 설명
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    영어독학
    react
    Docker
    CCNA
    리얼학습일기
    typescript
    Node.js
    타입스크립트
    자바스크립트
    next.js
    타일러영어
    덤프
    다이소
    바질
    Babel
    알고리즘
    바질 키우기
    리얼클래스
    식물
    CSS
    ChatGPT
    네트워크
    javascript
    ReactNative
    영어회화
    redux
    프로그래머스
    리액트
    네이버 부스트캠프
    webpack
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[Next.js] CSS 모듈
상단으로

티스토리툴바