| 스타일링 방식 | 설명 |
|---|---|
| 일반 CSS | 컴포넌트를 스타일링하는 가장 기본적인 방식 |
| Sass | 자주 사용되는 CSS 전처리기(pre-processor) 중 하나 확장된 CSS 문법을 사용하여 CSS 코드를 더욱 쉽게 작성할 수 있음 |
| CSS Module | CSS 클래스가 다른 CSS 클래스의 이름과 절대 충돌하지 않도록 파일마다 고유한 이름을 자동으로 생성해주는 옵션 |
| styled-components | 스타일을 자바스크립트 파일에 내장시키는 방식 스타일을 작성함과 동시에 해당 스타일이 적용된 컴포넌트 생성 가능 장점: 하나의 파일로 CSS와 JS를 모두 쓸 수 있음 단점: 파일 분리 불가 |
컴포넌트이름-클래스 형태
프로젝트 내 App.css
.App-logo {
height: 40vmin;
pointer-events: none;
}
.App-link {
color: #61dafb;
}
BEM 네이밍 방식
Block, Element, Modifier




$font-stack : Helvetica, sans-serif
$primary-color : #333
body
font : 100% $font-stack
color : $primary-color
$font-stack : Helvetica, sans-serif;
$primary-color : #333;
body {
font : 100% $font-stack;
color : $primary-color;
}
| 구분 | 선언 | 적용 |
|---|---|---|
| .sass | = | - |
| .scss | @mixin | @include |
// .sass
$main-font : "Helvetica"
=title($font)
font-size : 30px
font-family : $font
#header
+title($main-font)
// .scss
$main-font: "Helvetica";
@mixin title($font) {
font-size: 30px;
font-family: $font;
}
#header {
@include title($main-font);
}
Sass를 CSS로 컴파일해주는 모듈
설치 명령어
$ npm install node-sass
기존 CSS 주석에 한 줄 주석 추가
예
/* 여기는 주석 */
// 여기는 주석
/*
여기는
주석
*/
| 타입 | 설명 | 예시 |
|---|---|---|
| Numbers | 숫자형 | 1, .5, 10px 등 |
| Strings | 문자형 | bold, ‘/images/a.png’, ‘dotum’ 등 |
| Colors | 색상 표현 | red, blue, green #FFFF00 rgba(255, 0, 0, .5) |
| Booleans | 논리형 | true, false |
| Nulls | 아무것도 없음, 컴파일 안 함 | null |
| Lists | 공백이나 콤마(,)로 구분된 값의 목록 | (apple, orange, banana) apple orange banana |
| Maps | Lists와 비슷, 값이 key:value 형태 | (apple:a, orange:o, banana:b) |
$ 기호와 변수명을 같이 사용
$변수명
값 타입
특징
import React from "react";
import "./NestingComponent.scss";
const NestingComponent = () => {
return (
<div className="container">
<ul>
<li>빨강</li>
<li>파랑</li>
<li>초록</li>
</ul>
</div>
);
};
export default NestingComponent;
// .scss
.container {
background-color: yellow;
ul {
list-style: none;
li {
color: red;
padding: 20px;
}
}
}
/* .css */
.container {
background-color: yellow;
}
.container ul {
list-style: none;
}
.container ul li {
color: red;
padding: 20px;
}
// .scss
.container {
background-color: yellow;
ul {
list-style: none;
li {
color: red;
padding: 20px;
&:last-child {
color: blue;
}
}
}
}
/* .css */
.container {
background-color: yellow;
}
.container ul {
list-style: none;
}
.container ul li {
color: red;
padding: 20px;
}
.container ul li:last-child {
color: blue;
}
import React from "react";
import "./ParentSelector2.scss";
const ParentSelector2 = () => {
return (
<>
<div className="parent-small">안녕하세요</div>
<div className="parent-medium">안녕하세요</div>
<div className="parent-large">안녕하세요</div>
</>
);
};
export default ParentSelector2;
// .scss
.parent {
&-small { font-size: 10px; }
&-medium { font-size: 30px; }
&-large { font-size: 50px; }
}
/* .css */
.parent-small {
font-size: 10px;
}
.parent-medium {
font-size: 30px;
}
.parent-large {
font-size: 50px;
}
import React from "react";
import "./Operations.scss";
const Operations = () => {
return <div className="container">안녕하세요</div>;
};
export default Operations;
// .scss
div {
background-color: yellowgreen;
width: 100px + 200px;
height: 300px - 100px;
font-size: 10px * 5;
margin: 50px / 2;
}
/* .css */
div {
background-color: yellowgreen;
width: 300px;
height: 200px;
font-size: 50px;
margin: 50px / 2;
}
절대 단위(px) 연산
상대 단위(%, em, vw 등) 연산
- CSS의 calc() 함수로 연산
width: 50% - 20px; // 단위 모순 에러
width: calc(50% - 20px); // 연산 가능