CSS파일하나의 모든 셀랙터를 정의한것!, 전통적인 CSS 파일 방식으로, 모든 스타일이 전역으로 적용됩니다.
Selector 원시 방식 : 외부에 정의된 CSS 파일을 통해 import 하여 HTML Selector 로 일일히 적용 방식
Inline 방식 : <div style={**{ borderColor: ‘red’, … }**} />
: 객체라 React 리렌더 성능 이슈
= React 에서 style 내 객체가 매 렌더링마다 다르게 인식되어 매번 DOM 계산을 통한 성능 저하 발생
!important
를 통해 특정 선택자의 우선순위를 강하게 주장body {
font-family: Arial, sans-serif;
}
.btn {
color: white;
background: blue;
}
CSS파일을 컴포넌트별(각 페이지)로 분리하고, 각 스타일이 해당 컴포넌트(각 페이지) 내에서만 적용되도록 처리
현대 방법 (적은 선호) - Global CSS 는 단 하나의 CSS 파일이라면, Modules 는 각 페이지마다의 CSS 파일
import
하는 CSS 를 알 수 있어 Code Splitting (엔트리포인트 기준으로 나눌수 있다) 가능composes
문법을 통해 타 CSS Modules 의 선택자 정의를 가져와 확장할 수 있다./* Button.module.css */
.btn {
color: white;
background: blue;
}
import styles from './Button.module.css';
function Button() {
return <button className={styles.btn}>Click me</button>;
}
CSS의 확장 언어로, 변수, 중첩, 조건문, 함수 등과 같은 기능을 제공
현대 방법 (적은 선호) - 컴파일러를 통해 SCSS, SASS, LESS 등의 CSS 확장 문법지원 언어를 CSS 로 컴파일
npm
으로 설치후 .css
확장자 파일을 .scss
로 변환만 하면됨$primary-color: blue;
.btn {
color: white;
background: $primary-color;
&:hover {
background: darken($primary-color, 10%);
}
}
CSS를 자바스크립트 코드 내에서 정의하는 방식
Selector 없이 JS 내 CSS 사용 :
styled.div**
border-color: red;**
(@Media 등 CSS 문법)
현대 방법 (큰 선호) - JS 로직을 그대로 사용하고, CSS 문법을 그대로 사용할 수 있어서 양측의 장점을 다 가짐
컴포넌트와 스타일을 함께 작성 가능.
동적 스타일링(프로퍼티 기반으로 동적으로 스타일 조정).
Styled Components, Emotion 등이 존재하나 현재 Emotion 이 표준 (MUI 내 선택 및 사용, SSR 최적)
Next.js 사용한다면 자체 제공하는 Styled JSX 라는 CSS-in-JS 솔루션을 사용할 수 있다.
import styled from 'styled-components';
const Button = styled.button`
color: white;
background: ${props => props.primary ? 'blue' : 'gray'};
`;
function App() {
return <Button primary>Click me</Button>;
}
유틸리티 클래스 기반의 CSS 프레임워크로, 사전에 정의된 클래스들을 조합하여 스타일링
Selector 원시 방식 : HTML 혹은 React Component(JSX) 내 CSS 유틸리티 클래스 바로 명시
현대 방법 (큰 선호) - 유틸리티 클래스 라이브러리. 미리 CSS 정의된 선택자에 해당하는 클래스명을 조합해 개발
<button class="bg-blue-500 text-white px-4 py-2 rounded">Click me</button>
스타일뿐만 아니라 UI 구성 요소(Button, Modal 등)와 동작을 포함한 패키지.
현대 방법 (큰 선호) - Bootstrap 자체 제작 컴포넌트와 CSS 디자인 시스템을 함께 제공
import { Button } from '@mui/material';
function App() {
return <Button variant="contained" color="primary">Click me</Button>;
}
UI 프레임워크와 유사하지만, 특정 디자인 체계를 준수하며, 독립된 컴포넌트 제공.
현재 방법 (큰 선호) - Mantine, Ant, Material Design, Chakra UI, Chadcn 많이 들어본것들이 이에 해당
import { Box, Button } from '@chakra-ui/react';
function App() {
return (
<Box>
<Button colorScheme="blue">Click me</Button>
</Box>
);
}
요약
방식 주요 특징 사용 사례 Global CSS 전역 스타일, 네임스페이스 충돌 가능 소규모 프로젝트, 간단한 웹사이트 CSS Modules 로컬 스코프 클래스, 컴포넌트 단위 스타일링 React/Vue 프로젝트 CSS Preprocessor 변수, 중첩 등 강력한 기능 제공 대규모 프로젝트, 팀 협업 환경 CSS-in-JS 동적 스타일링, 컴포넌트와 스타일 통합 Styled-components, Emotion 사용 시 Tailwind CSS 유틸리티 클래스, 빠른 프로토타이핑 Atomic Design 추구 프로젝트 UI Framework 스타일 + 동작 포함한 UI 구성 요소 제공 Bootstrap, Material UI 사용 시 Component Library 독립된 구성 요소로 UI 구성, 특정 디자인 체계 준수 Chakra UI, Fluent UI 사용 시