가장 기본적인 형태는 이렇다.
npm i @emotion/css
// 프레임워크 없음, 순수 DOM
import { css } from '@emotion/css';
const className = css`
padding: 32px;
background-color: hotpink;
&:hover {
color: white;
}
`;
const div = document.createElement('div');
div.className = className; // 그냥 문자열이니까 어디든 꽂힘
div.textContent = 'Hover to change color.';
document.body.appendChild(div);
// React에서 쓴다면
import { css } from '@emotion/css'
const color = 'white'
render(
<div
className={css`
padding: 32px;
background-color: hotpink;
&:hover {
color: ${color};
}
`}
>
Hover to change color.
</div>
)
css… 라는 이상한 형태가 있다.
ES6에서 소개된 Tagged Template이라는 건데, 모르겠으면 해당 페이지 참고.
css는 그냥 함수이고, Tagged Template 문법으로 인해 받는 인자는:
strings = ['padding: 32px; &:hover { color: ', '; }'], values = ['white']
둘을 합쳐 css 문자열을 완성한다.
문자열을 해시해서 클래스명을 생성한다.
<style> 태그로 주입
클래스명 문자열을 반환