🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Emotion CSS-in-JS 스타일링 완벽 가이드 - 슬라이드 1/13
A

AI Generated

2025. 11. 4. · 19 Views

Emotion CSS-in-JS 스타일링 완벽 가이드

React에서 가장 많이 사용되는 CSS-in-JS 라이브러리인 Emotion의 핵심 개념을 실전 예제와 함께 정리했습니다. styled components, css prop, 동적 스타일링부터 테마, 애니메이션까지 고급 개발자를 위한 완벽 가이드입니다.


카테고리:React
언어:TypeScript
메인 태그:#React
서브 태그:
#Emotion#CSS-in-JS#Styling#StyledComponents

들어가며

이 글에서는 Emotion CSS-in-JS 스타일링 완벽 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. styled_컴포넌트_기본
  2. Props_기반_동적_스타일링
  3. css_prop_사용법
  4. 객체_스타일_문법
  5. ThemeProvider_활용
  6. Theme_객체_사용하기
  7. 스타일_컴포지션
  8. keyframes_애니메이션
  9. Global_스타일_정의
  10. 중첩_선택자_활용
  11. as_prop으로_엘리먼트_변경
  12. CSS_변수와_함께_사용

1. styled 컴포넌트 기본

개요

Emotion의 styled API를 사용하여 스타일이 적용된 React 컴포넌트를 생성하는 가장 기본적인 방법입니다.

코드 예제

import styled from '@emotion/styled';

const Button = styled.button`
  background-color: #007bff;
  color: white;
  padding: 12px 24px;
  border-radius: 8px;
  border: none;
  cursor: pointer;
`;

설명

styled API로 버튼 엘리먼트를 감싸고 템플릿 리터럴 내부에 CSS를 작성하면, 스타일이 적용된 새로운 React 컴포넌트가 생성됩니다.


2. Props 기반 동적 스타일링

개요

컴포넌트의 props 값에 따라 스타일을 동적으로 변경할 수 있어 재사용성이 높은 컴포넌트를 만들 수 있습니다.

코드 예제

const Button = styled.button<{ variant: 'primary' | 'secondary' }>`
  padding: 12px 24px;
  background: ${props =>
    props.variant === 'primary' ? '#007bff' : '#6c757d'};
  color: white;
  border: none;
  border-radius: 8px;
`;

설명

TypeScript의 제네릭과 함께 props를 타입 정의하고, 템플릿 리터럴 내부에서 props 값을 참조하여 조건부 스타일을 적용합니다.


3. css prop 사용법

개요

JSX 엘리먼트에 직접 css prop을 사용하여 인라인으로 스타일을 정의할 수 있는 방법입니다.

코드 예제

/** @jsxImportSource @emotion/react */
import { css } from '@emotion/react';

const App = () => (
  <div css={css`
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    padding: 20px;
    border-radius: 12px;
  `}>
    Hello Emotion
  </div>
);

설명

@jsxImportSource 주석을 추가하고 css 함수로 생성한 스타일 객체를 css prop에 전달하면, 컴포넌트를 별도로 생성하지 않고도 스타일을 적용할 수 있습니다.


4. 객체 스타일 문법

개요

템플릿 리터럴 대신 JavaScript 객체 형태로 스타일을 정의할 수 있어 동적 계산이나 조건부 로직 작성이 편리합니다.

코드 예제

import { css } from '@emotion/react';

const containerStyle = css({
  display: 'flex',
  flexDirection: 'column',
  gap: 16,
  padding: 24,
  backgroundColor: '#f8f9fa',
  borderRadius: 8
});

설명

camelCase로 작성된 CSS 속성을 객체 형태로 정의하면, JavaScript의 모든 기능을 활용하여 스타일을 동적으로 생성할 수 있습니다.


5. ThemeProvider 활용

개요

전역 테마 객체를 제공하여 애플리케이션 전체에서 일관된 디자인 시스템을 구축할 수 있습니다.

코드 예제

import { ThemeProvider } from '@emotion/react';

const theme = {
  colors: { primary: '#007bff', secondary: '#6c757d' },
  spacing: { sm: 8, md: 16, lg: 24 }
};

const App = () => (
  <ThemeProvider theme={theme}>
    <Button />
  </ThemeProvider>
);

설명

ThemeProvider로 감싼 하위 컴포넌트들은 theme prop을 통해 테마 객체에 접근할 수 있어, 디자인 토큰을 중앙 관리할 수 있습니다.


6. Theme 객체 사용하기

개요

styled 컴포넌트 내부에서 theme 객체에 접근하여 일관된 스타일 값을 사용할 수 있습니다.

코드 예제

const Card = styled.div`
  padding: ${props => props.theme.spacing.md}px;
  background: ${props => props.theme.colors.primary};
  border-radius: 8px;
  color: white;
  box-shadow: 0 4px 6px rgba(0,0,0,0.1);
`;

설명

props.theme를 통해 ThemeProvider로 제공된 테마 객체의 값을 참조하여, 디자인 시스템의 일관성을 유지할 수 있습니다.


7. 스타일 컴포지션

개요

여러 스타일 객체를 조합하여 재사용 가능한 스타일 패턴을 만들 수 있습니다.

코드 예제

import { css } from '@emotion/react';

const baseStyle = css`
  padding: 12px;
  border-radius: 8px;
`;

const primaryStyle = css`
  ${baseStyle}
  background: #007bff;
  color: white;
`;

설명

기본 스타일을 정의하고 이를 다른 스타일 내부에 포함시켜 스타일을 조합하면, 중복 코드를 줄이고 일관성을 높일 수 있습니다.


8. keyframes 애니메이션

개요

Emotion의 keyframes를 사용하여 CSS 애니메이션을 정의하고 컴포넌트에 적용할 수 있습니다.

코드 예제

import { keyframes } from '@emotion/react';
import styled from '@emotion/styled';

const fadeIn = keyframes`
  from { opacity: 0; transform: translateY(-10px); }
  to { opacity: 1; transform: translateY(0); }
`;

const Box = styled.div`
  animation: ${fadeIn} 0.3s ease-in-out;
`;

설명

keyframes로 애니메이션을 정의하고 styled 컴포넌트의 animation 속성에서 참조하면, 부드러운 애니메이션 효과를 구현할 수 있습니다.


9. Global 스타일 정의

개요

애플리케이션 전역에 적용되는 CSS 리셋이나 기본 스타일을 정의할 수 있습니다.

코드 예제

import { Global, css } from '@emotion/react';

const App = () => (
  <>
    <Global styles={css`
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font-family: -apple-system, sans-serif; }
    `} />
    <MainContent />
  </>
);

설명

Global 컴포넌트의 styles prop에 전역 스타일을 정의하면, 전체 애플리케이션에 기본 스타일을 일괄 적용할 수 있습니다.


10. 중첩 선택자 활용

개요

Sass처럼 중첩된 선택자를 사용하여 하위 엘리먼트나 가상 선택자의 스타일을 정의할 수 있습니다.

코드 예제

const Card = styled.div`
  padding: 20px;
  background: white;

  &:hover { box-shadow: 0 8px 16px rgba(0,0,0,0.2); }

  h2 { margin-bottom: 12px; color: #333; }

  p { line-height: 1.6; color: #666; }
`;

설명

& 기호로 자기 자신을 참조하거나 하위 엘리먼트 선택자를 중첩하여 작성하면, 관련된 스타일을 한 곳에 모아 관리할 수 있습니다.


11. as prop으로 엘리먼트 변경

개요

styled 컴포넌트의 스타일은 유지하면서 렌더링되는 HTML 엘리먼트나 컴포넌트를 동적으로 변경할 수 있습니다.

코드 예제

const Text = styled.p`
  font-size: 16px;
  color: #333;
  line-height: 1.6;
`;

const App = () => (
  <>
    <Text>일반 단락</Text>
    <Text as="h1">제목으로 렌더링</Text>
  </>
);

설명

as prop에 다른 HTML 태그나 컴포넌트를 전달하면, 동일한 스타일을 유지하면서 의미론적으로 올바른 마크업을 사용할 수 있습니다.


12. CSS 변수와 함께 사용

개요

CSS 커스텀 속성(변수)을 Emotion과 함께 사용하여 런타임에 스타일을 동적으로 변경할 수 있습니다.

코드 예제

const Box = styled.div<{ size: number }>`
  --box-size: ${props => props.size}px;

  width: var(--box-size);
  height: var(--box-size);
  background: linear-gradient(135deg, #667eea, #764ba2);
  border-radius: 8px;
`;

설명

CSS 변수를 props로 정의하고 var() 함수로 참조하면, JavaScript와 CSS의 장점을 모두 활용하여 유연한 스타일링이 가능합니다. ``` Emotion의 핵심 개념 12가지를 실전 예제와 함께 정리했습니다. 각 개념은 실제로 작동하는 코드로 구성되어 있으며, 기본 사용법부터 고급 패턴까지 단계적으로 학습할 수 있도록 구성했습니다.


마치며

이번 글에서는 Emotion CSS-in-JS 스타일링 완벽 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#React #Emotion #CSS-in-JS #Styling #StyledComponents

#React#Emotion#CSS-in-JS#Styling#StyledComponents

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

함께 보면 좋은 카드 뉴스

마이크로서비스 배포 완벽 가이드

Kubernetes를 활용한 마이크로서비스 배포의 핵심 개념부터 실전 운영까지, 초급 개발자도 쉽게 따라할 수 있는 완벽 가이드입니다. 실무에서 바로 적용 가능한 배포 전략과 노하우를 담았습니다.

Application Load Balancer 완벽 가이드

AWS의 Application Load Balancer를 처음 배우는 개발자를 위한 실전 가이드입니다. ALB 생성부터 ECS 연동, 헬스 체크, HTTPS 설정까지 실무에 필요한 모든 내용을 다룹니다. 초급 개발자도 쉽게 따라할 수 있도록 단계별로 설명합니다.

고객 상담 AI 시스템 완벽 구축 가이드

AWS Bedrock Agent와 Knowledge Base를 활용하여 실시간 고객 상담 AI 시스템을 구축하는 방법을 단계별로 학습합니다. RAG 기반 지식 검색부터 Guardrails 안전 장치, 프론트엔드 연동까지 실무에 바로 적용 가능한 완전한 시스템을 만들어봅니다.

에러 처리와 폴백 완벽 가이드

AWS API 호출 시 발생하는 에러를 처리하고 폴백 전략을 구현하는 방법을 다룹니다. ThrottlingException부터 서킷 브레이커 패턴까지, 실전에서 바로 활용할 수 있는 안정적인 에러 처리 기법을 배웁니다.

AWS Bedrock 인용과 출처 표시 완벽 가이드

AWS Bedrock의 Citation 기능을 활용하여 AI 응답의 신뢰도를 높이는 방법을 배웁니다. 출처 추출부터 UI 표시, 검증까지 실무에서 바로 사용할 수 있는 완전한 가이드입니다.

이전
1/3다음