CSS의 진화과정
CSS
- CSS는 HTML을 꾸며주기 위해 사용하는 스타일시트 언어
- 단점은 어떤 CSS가 적용될지 예측하기 어렵고, 코드 재사용이 어렵다.
SCSS
@import
// import theme.scss, button.scss
@import 'theme', 'button';
- @import 구문을 사용하면 다른 sass 파일을 불러올 수 있다.
- 장점은 css 파일을 쉽게 모듈화 하고, 나누어 작업이 가능하다.
Variable
$base-color: #c6538c;
$border-dark: rgba($base-color, 0.88);
.alert {
border: 1px solid $border-dark;
}
- 여러 번 쓰이는 값들을 변수로 저장가능하다.
SCSS 단점
// theme.scss
.button { font-size: 20px; }
// button.scss
.button { font-size: 30px; }
// style.scss
@import 'theme', 'button';
- 파일을 분리했지만 중첩 선언이 있는 경우 어떤 것이 먼저 적용될지 가늠이 되지 않는다.
BEM
- CSS 내에서 이름이 중복되지 않도록 CSS 아이디와 클래스를 명명하는 방법론
BEM 명명 방식
Block
- 블럭은 재사용이 가능한 기능적으로 독립적인 컴포넌트를 말한다.
<div class="logo">
<img src='logo.svg'>
</div>
Element
- 엘리먼트는 블럭을 구성하는 한 부분을 말한다.
- 블럭 뒤에 __를 붙여주고, 엘리먼트 이름을 붙여야 한다.
<ul class="menu">
<li class="menu__item">피자</li>
</ul>
Modifier
- 블럭이나 엘리먼트에 변화를 줄 수 있는 값으로, 생김새가 다르거나 다른 행동을 해야할 때 사용한다.
- element나 block 뒤에 —— 를 붙여야 한다.
<ul class="menu">
<li class="menu__item--disabled">피자</li>
</ul>
BEM의 장단점
- 장점은 컴포넌트 단위로 CSS를 관리할 수 있다. 단점은 단순한 코드 명명 규칙이기 때문에 모든 개발자가 이해하고 있어야 한다.
CSS Modules
- 모든 스타일에 동적으로 파일에 선언된 CSS 선택자에 고유한 해시 문자열을 추가하여 CSS 속성이 겹치지 않게 만드는 방식
React에서 CSS Modules 사용하기
- CSS 모듈을 사용하기 위해선 파일이름.module.css 형태로 파일을 생성해야 합니다.
/* index.module.css */
#button {
color: red;
font-size: 10px;
}
#container {
margin: 20px;
}
// app.js
import styles from "./styles.module.css";
function App() {
return (
<div id={styles.container}>
<button className={styles.button}>버튼</button>
</div>
);
}
export default App;
- 클래스에 hash 값이 붙어 클래스가 생성된다.
- 단점은 많은 CSS 파일을 따로 관리해야 한다.
CSS in JS(Styled Components)
- 방대한 CSS 파일을 관리해야하는 것을 해결하기 위해 나온 방법
- 하나의 컴포넌트를 만들 때마다 각 컴포넌트에서 사용할 CSS를 같이 작성
React에서 Styled Components 사용하기
import styled from "styled-components";
const Button = styled.button`
color: red;
font-size: 10px;
`;
const Container = styled.div`
margin: 20px;
`;
function App() {
return (
<Container>
<Button>버튼</Button>
</Container>
);
}
export default App;
- 단점은 인터렉션이 늦고, JS의 번들 크기가 커진다.
출처
Author And Source
이 문제에 관하여(CSS의 진화과정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@devsof/CSS의-진화과정저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)