๐๐ผ ์ CSS in JS?
- CSS ํด๋์ค ๋ช
์ ๋ํ ๊ณ ๋ฏผ
- ์ ํด์ง ๊ฐ์ด๋๊ฐ ์์ผ๋ฉด ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง๋๋ค.
- ๋ฐฉ๋ํ ์คํ์ผ ์ ๋ณด๋ก ์ธํ ์คํฌ๋กค ์ง์ฅ๋ ์ฌ์ ํฉ๋๋ค.
- ์ฌ์ ํ CSSํด๋์ค ์กฐ๊ฑด๋ถ ์คํ์ผ์ ํ๊ณ ์์ต๋๋ค.
- CSS ํด๋์ค๋ก ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง์ ํ๋๋ผ๋ ๋์ ์ธ ๋ณํ๋ฅผ ํํํ๊ธฐ์ ํ๊ณ๊ฐ ์์ต๋๋ค.
๐ณ๊ทธ๋ฌ๋ฉด ์ธ๋ผ์ธ ์คํ์ผ์ ์๋ ๊น์?
Inline Styles์ ๊ฒฝ์ฐ
- CSS ๋ช
์๋(์ฐ์ ์์)์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
- ์๋ฐํ๊ฒ CSS๊ฐ ์๋๋๋ค.
- ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ๋ช
์ํ๋ html ํ์ผ์ ๋ถํผ๊ฐ ์ฆ๊ฐํ๊ณ CSS ํ์ผ๊ณผ์ ์ญํ ๋ถ๋ฆฌ๊ฐ ๋ชจํธํด์ง๋๋ค. (CSS โ ์น ๋ฌธ์์ ์คํ์ผ๋ง ์ ๋ณด)
- Pseudo selector๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. (ex.
:hover
, :after
)
- media query, key frame ๋ํ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐Solution: CSS๋ฅผ JS์ ์ธ์ ๋์
๋ณด์ธ์!
<style>
.hash136s21 {
background-color: black;
color: white;
}
</style>
<p class="hash136s21">Hello CSS-in-JS</p>
- ํด๋์ค๋ช
์ ํด์๊ฐ์ผ๋ก ์๋ ์์ฑํ๊ณ , ํด๋์ค๋ช
์ค์ผ ๋ํ ๋ฐฉ์งํฉ๋๋ค.
- CSS ๋ฌธ๋ฒ์ ์จ์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ์ธ ๊ฐ๋ค์ ์จ์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- CSS-in-JS๋ CSS๋ฅผ ๋ฌธ์(
.css
) ๋จ์๊ฐ ์๋๋ผ ์ปดํฌ๋ํธ ๋จ์๋ก ์ถ์ํํ์ฌ ์ ์ฉํ๊ธฐ์ ์๋ง์ต๋๋ค.
- ์ปดํฌ๋ํธ์ ์คํ์ผ์ด ํ๋์ ํ์ผ๋ก ๊ฒฐํฉ๋์ด ๋ชจ๋ํ๊ฐ ์์ํด์ง๋๋ค.
- ๋ฌด์๋ณด๋ค๋ ํ๋ ์น์ ์ปดํฌ๋ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ถ์ํ์ ๋จ์๋ฅผ ๊ตฌ์ฑํ๋ฉฐ ๋ฐ์ ํด๋๊ฐ๊ณ ์์ต๋๋ค.
- Angular, React, Vue ๋ฑ์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ SPA ํ๋ ์์ํฌ์์ ์ปดํฌ๋ํธ๋ฅผ ๋นผ๋๊ณ ๋ ์ค๋ช
ํ๊ธฐ ํ๋ค ์ ๋๋ก ์ค์ํ ๊ฐ๋
์ ์ฐจ์งํ๊ณ ์๋ค๋ ์ฌ์ค์ ๊ตณ์ด ๊ฐ์กฐํ์ง ์์๋ ์ถฉ๋ถํ๊ฒ ์ฃ ?
๐ฅ์ Styled Components๋ฅผ ๊ณ ๋ คํด์ผ ํ ๊น?
- css-in-js๋ 2018๋
์ดํ ํญ๋ฐ์ ์ผ๋ก ์ฑ์ฅํด์์ต๋๋ค. ๊ทธ ์ค
Styled-Components
๋ npm ๋ค์ด๋ก๋ ์ ๊ธฐ์ค์ผ๋ก ํ์ฌ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ css-in-js ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
๐ช๐ปGetting Started
import style from 'styled-components'
render(
<Wrapper>
<Title>
Hello World!
</Title>
</Wrapper>
);