
React에서 컴포넌트에 스타일을 적용하는 방법은 크게 네 가지로 나뉜다.
CSS 파일 생성:
/* styles.css */
.container {
background-color: lightblue;
padding: 20px;
}
.title {
font-size: 24px;
color: darkblue;
}
컴포넌트에서 import:
import "./styles.css";
function App() {
return (
<div className="container">
<h1 className="title">Hello, React!</h1>
</div>
);
}
이름 규칙 정하기 :
App-logoapp_title-primaryCSS Selector 활용 :
/* container 컴포넌트 내부의 header 테그만 의미 */
.container .header {
font-size: 20px;
}
CSS Module 파일 생성 : 컴포넌트명.module.css로 css파일 생성
파일명에 .module.css를 추가.
/* Button.module.css */
.button {
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
}
컴포넌트에서 import : import로 불러온 후 객체 형태로 사용
import styles from "./Button.module.css";
function Button() {
return <button className={styles.button}>Click Me</button>;
}
.scss: CSS와 비슷한 문법..sass: 간결하지만, 세미콜론과 중괄호를 생략.전처리기란?
자신만의 특별한 문법을 가지고 CSS를 생성하는 프로그램이다.
변수, 함수 개념을 사용하여 재활용성과 가독성을 높인다.
Sass는 중괄호 대신 들여쓰기로 구문을 감지하고, 세미콜론을 사용하지 않는다.
예 )
```jsx
body
color: #333
background-color: #fff
```
사실 이렇게 사용하면 불편함을 느낄 수 있다. (코드들이 많아지면 헷갈리고 꼬일 수 있다.) 이런 불편함을 느끼는 사람들을 위해 CSS 친화적인 Sassy CSS를 의미하는 SCSS를 제공하게 되었다.
.scss 확장자를 사용할 경우, css와 거의 비슷한 문법으로 Sass를 사용할 수 있다.
npm install sass
Sass 파일 생성 :
/* styles.scss */
$primary-color: #3498db;
.container {
background-color: $primary-color;
padding: 20px;
.title {
font-size: 24px;
color: darkblue;
}
}
컴포넌트에서 import:
import "./styles.scss"; // 뒤에 .scss 붙여줘야함!!
function App() {
return (
<div className="container">
<h1 className="title">Hello, SCSS!</h1>
</div>
);
}
변수 : $기호로 변수를 사용할 수 있다. $변수명:속성값으로 변수에 속성을 지정하고, 해당 속성 값을 사용하고 싶은 곳에 $변수명을 작성한다.
$font-size: 16px;
.text {
font-size: $font-size;
}
중첩 : 선택자를 중첩시켜 코드의 중복을 줄이고, 가독성을 높인다.
.container {
.header {
font-size: 24px;
}
}
@mixin button-style($bg-color, $font-size) {
border: none;
border-radius: 0.5rem;
background-color: $bg-color;
color: #fff;
font-size: $font-size;
text-align: center;
cursor: pointer;
text-decoration: none;
transition: background-color 0.3s;
// 중첩 사용 예시
&:hover {
background-color: darken($bg-color, 10%);
}
}
나 자신을 의미하는 & 기호를 사용해서 자신을 선택할 수 있다.
그리고 상위 선택자를 반복하지 않고 자식을 선택할 수 있다.
믹스인 : 미리 css 코드 블록을 정의하여 재사용
@mixin flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.box {
@include flex-center;
}
연산:
.box {
width: 100px - 20px; // 결과: 80px
}
확장 (Extend) : 기존의 선택자 스타일을 다른 선택자에게 상속
.shared-style {
color: white;
background: black;
}
.button {
@extend .shared-style;
}
부분 파일과 @import
/* _파일명.scss */
// scss 파일 명 앞에 _ 의미
// : 이 파일은 css 파일로 변환될 필요가 없음을 알림
$color-first: red;
$color-second: orange;
$color-third: yellow;
$breakpoint-sm: 360px; 이렇게 만든 파일을 @import “./파일명.scss” 이렇게 불러온다.npm install styled-components
팁! VSCODE 사용자라면 vscode-styled-components 확장팩을 설치하자!
스타일 정의 : 먼저 사용할 컴포넌트 파일에서 해당 패키지를 import한다.
import styled from "styled-components";
import styled from "styled-components";
const Button = styled.button`
background-color: ${(props) => props.bgColor || "blue"};
color: white;
padding: 10px 20px;
border-radius: 5px;
`;
컴포넌트에서 사용:
function App() {
return <Button bgColor="green">Click Me</Button>;
}
생성한 styled-components는 일반 컴포넌트를 사용하는 것처럼 사용할 수 있다. 여는태그와 닫는 태그로 작성할 수 있고, 단일 태그 형태로도 작성할 수 있다.
styled-components는 지정한 스타일 속성을 상속 받을 수 있다.
const 컴포넌트이름 = styled(상속 받을 컴포넌트)`
추가할 스타일 속성;
`;
상속받을 컴포넌트 이름을 선언하고 값으로 styled(상속 받을 컴포넌트)으로 작성한 다음 추가할 스타일 속성이 있다면 백틱으로 감싸 작성해준다.
| 스타일링 방식 | 장점 | 단점 | 주요 특징 |
|---|---|---|---|
| 일반 CSS | 간단하고 익숙함. | 클래스 충돌 가능. | 전통적인 방식. BEM으로 클래스 관리 가능. |
| CSS Modules | 고유 클래스 이름 자동 생성. 컴포넌트 스타일 캡슐화. | 동적 스타일링이 어려움. | 파일명에 .module.css 필요. |
| Sass (SCSS) | 변수, 중첩, 믹스인 등 강력한 기능 제공. | CSS 파일로 컴파일이 필요. | CSS 전처리기로 유지보수에 강점. |
| Styled-Components | 동적 스타일링 가능. 컴포넌트 단위 캡슐화. | 런타임 처리로 약간의 성능 저하. | CSS-in-JS 방식. JS와 CSS 통합. |