대표적인 리액트 컴포넌트 스타일링 방법들에 대해서 자세히 알아봅시다~
리액트에서 컴포넌트를 스타일링하는 다양한 방법들이 있으며, 각각은 특정한 사용 사례와 개발 스타일에 적합합니다.
저도 원래는 가장 기초적인 방법인 CSS 파일 사용, 그리고 Sass 정도만 알고 있었는데 생각보다 많은 방법이 있더라고요! 오늘은 그 중에서 가장 유명한 방법 2가지 Styled-components
와 CSS Module
을 알아보는 시간을 가지겠습니다~
Styled-components
는 React 애플리케이션에 스타일을 적용하기 위한 CSS-in-JS
라이브러리입니다. CSS-in-JS
는 스타일을 자바스크립트 파일 내에 작성하고 컴포넌트와 결합하는 방식을 말합니다. Styled-components
는 이 패러다임을 활용하여 컴포넌트의 스타일을 자바스크립트와 함께 선언적으로 작성하고, 각 컴포넌트에 고유한 클래스 이름을 부여함으로써 스타일의 격리를 달성합니다.
ES6
의 태그된 템플릿 리터럴을 사용하여 스타일을 적용합니다.import styled from 'styled-components';
// Styled-component를 사용하여 스타일링된 버튼 컴포넌트
const StyledButton = styled.button`
background-color: ${props => props.primary ? 'navy' : 'white'};
color: ${props => props.primary ? 'white' : 'navy'};
padding: 10px 20px;
border: none;
border-radius: 5px;
margin: 5px;
cursor: pointer;
&:hover {
background-color: ${props => props.primary ? 'blue' : 'lightgray'};
}
`;
export default function Button({ primary, label }) {
return <StyledButton primary={primary}>{label}</StyledButton>;
}
Styled-components를 사용하면 위 예시 코드처럼 컴포넌트와 스타일이 한 파일 안에서 관리됩니다. 이처럼 JS 파일 안에 CSS 코드가 있는 형식을 CSS-in-JS
라고 부릅니다.
또한, props
를 이용하여 동적으로 스타일을 변경할 수 있습니다.
그리고 또 한가지 특이점이라면 백틱(``)
을 사용한 템플릿 리터럴 방식으로 CSS를 작성한다는 특징이 있습니다.
CSS Module
은 전통적인 CSS 파일을 사용하지만, 빌드 시 고유한 이름을 가진 클래스를 생성하여 스타일의 격리를 제공하는 방식입니다. React 프로젝트를 생성할 때 일반적으로 사용되는 create-react-app
은 기본적으로 CSS Module을 지원합니다.
CSS Module을 사용하면, 스타일 시트의 클래스 이름이 로컬 스코프로 제한되어, 다른 컴포넌트의 같은 이름의 클래스와 충돌하지 않습니다.
.module.css
확장자를 가진 파일로 작성합니다.import
하여 사용하고, 각 클래스를 객체의 프로퍼티처럼 참조합니다./* Button.module.css */
.button {
background-color: blue;
color: white;
}
// Button.js
import React from 'react';
import styles from './Button.module.css';
const Button = () => <button className={styles.button}>Click me</button>;
export default Button;
CSS 모듈을 사용하려면, 다음과 같은 방법으로 CSS 파일을 작성하고 컴포넌트에서 import하면 됩니다.
CSS 모듈 파일 생성
[name].module.css
형식으로 지정합니다.CSS 클래스 정의
리액트 컴포넌트에서 사용
Styled-components
는 JS 파일 내부에 스타일을 포함하지만, CSS Module
은 별도의 CSS 파일을 사용합니다.Styled-components
는 컴포넌트를 생성하여 스타일을 적용하는 반면, CSS Module
은 기존의 클래스 기반 방식을 따릅니다.CSS Module
은 모듈 번들러가 필요하지만, Styled-components
는 라이브러리 자체에서 필요한 기능을 제공합니다.Styled-components
는 JS의 강력한 기능을 활용하여 보다 동적인 스타일링이 가능합니다.