"꾸준하고 완벽한 한 걸음"

PS/Baekjoon Online Judge

[Official Learn Next.js] Learn ‘App Router’ - Chapter 2. CSS Styling

kimyoungrok 2025. 3. 16. 02:06
728x90

App Router: CSS Styling

현재 프로젝트에는 아무런 스타일도 적용되지 않았습니다.

이번 장에서는 Next.js에서 스타일을 지정하는 다양한 방법을 살펴보겠습니다.

  • 전역 CSS 파일 추가하기
  • Tailwind와 CSS 모듈
  • 유틸리티 패키지 clsx를 사용해 조건부로 클래스 이름을 추가하는 방법

전역 스타일

프로젝트 내부의 /app/ui 폴더에 global.css 파일을 사용해 전역 CSS를 설정할 수 있습니다.

⚠️global.css 는 최상위 구성 요소에 추가하는 것이 좋습니다.

/app/layout.tsx파일로 이동해 전역 스타일을 추가합니다.

import '@/app/ui/global.css';
 
export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  );
}

CSS 모듈

/app/ui 폴더에 다음의 home.module.css 를 만듭니다.

.shape {
  height: 0;
  width: 0;
  border-bottom: 30px solid black;
  border-left: 20px solid transparent;
  border-right: 20px solid transparent;
}

그런 다음 /app/page.tsx 의 Tailwind 클래스를 다음과 같이 변경합니다.

import AcmeLogo from '@/app/ui/acme-logo';
import { ArrowRightIcon } from '@heroicons/react/24/outline';
import Link from 'next/link';
import styles from '@/app/ui/home.module.css';
 
export default function Page() {
  return (
    <main className="flex min-h-screen flex-col p-6">
      <div className={styles.shape} />
    // ...
  )
}

라이브러리를 사용하여 clsx 클래스 이름 전환

clsx는 상태나 조건에 따라 클래스 이름을 쉽게 전환할 수 있는 라이브러리 입니다.

import clsx from 'clsx';
 
export default function InvoiceStatus({ status }: { status: string }) {
  return (
    <span
      className={clsx(
        'inline-flex items-center rounded-full px-2 py-1 text-sm',
        {
          'bg-gray-100 text-gray-500': status === 'pending',
          'bg-green-500 text-white': status === 'paid',
        },
      )}
    >
    // ...
)}
728x90

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 05568] 카드 놓기 [Java]  (0) 2025.03.17
[백준 26265] 멘토와 멘티 [Java]  (0) 2025.03.16
[백준 19564] 반복 [Java]  (0) 2025.03.15
[백준 04150] 피보나치 수 [Java]  (0) 2025.03.15
[백준 13419] 탕수육 [Java]  (0) 2025.03.15