3. CSS in JS

keyword

  • CSS in JS ๋ž€

  • CSS


1. CSS in JS ๋ž€

CSS-in-JS๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•˜๋Š” ์Šคํƒ€์ผ๋ง ๊ธฐ๋ฒ•์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ํŒŒ์‹ฑ๋˜๋ฉด CSS๊ฐ€ ์ƒ์„ฑ๋˜์–ด DOM์— ์ถ”๊ฐ€๋จ.

Pure CSS

  • ๊ธ€๋กœ๋ฒŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ณต์œ ํ•˜๋ฏ€๋กœ ์Šคํƒ€์ผ ๊ทœ์น™์ด ํ”„๋กœ์ ํŠธ ์ „์ฒด์— ์ ์šฉ๋˜์–ด ๋ณ„๋„์˜ ๋„ค์ด๋ฐ ๊ทœ์น™ ํ•„์š”.

  • ๋™์ผํ•œ ํด๋ž˜์Šค๋ช…์˜ ์ž๋™ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ฐœ์ƒ์€ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•œ๋‹ค.

  • CSS๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด JS์˜ ์ƒํƒœ๊ฐ’์˜ ๊ณต์œ ๊ฐ€ ์–ด๋ ค์›€.

  • ๋ถ€๋ชจ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๋ถ€ํ„ฐ ์Šคํƒ€์ผ ์ƒ์†๋ฐ›์•„ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์Œ.

์˜ˆ๋ฅผ ๋“ค๋ฉด, Main.tsx์—์„œ importํ•œ cssํŒŒ์ผ์ด head์•„๋ž˜์˜ style๋กœ ์ž‘์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผ๋ช…์˜ ํด๋ž˜์Šค ๋„ค์ž„์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ App.tsx์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ๋‹ค.

CSS-in-JS์˜ ๊ฒฝ์šฐ

  • class ๋„ค์ž„์ด ๋นŒ๋“œ ํƒ€์ž„์ด ์œ ๋‹ˆํฌํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜์–ด ๋ณ„๋„์˜ ๋„ค์ด๋ฐ ๊ทœ์น™์ด ํ•„์š”์—†๋‹ค.

  • CSS๊ฐ€ ์ปดํฌ๋„ŒํŠธ ์Šค์ฝ”ํ”„๋กœ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค ๋„ค์ž„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ฌธ์ œ ์—†์Œ

  • CSS ์ฝ”๋“œ๊ฐ€ JS์— ์ž‘์„ฑ๋˜๋ฏ€๋กœ ์ปดํฌ๋„ˆํŠธ ์ƒํƒœ ๊ณต์œ  ๊ฐ€๋Šฅ (์ƒํƒœ์— ๋”ฐ๋ฅธ ์Šคํƒ€์ผ ์ฒ˜๋ฆฌ์— ์œ ์šฉ)

  • CSS๊ฐ€ ์ปดํฌ๋„ŒํŠธ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์Šคํƒ€์ผ ์ƒ์† ๋ฌธ์ œ ์—†์Œ.

๊ทธ๋Ÿฌ๋‚˜ ์ •๋ง CSS-in-JS๊ฐ€ ์œ ๋ฆฌํ• ๊นŒ?

FOUC (Flash of unstyled content)

์Šคํฌ๋ฆฝํŠธ ๊ตฌ๋ฌธ์ด ๋ถ„์„๋˜์–ด ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜๊ธฐ ์ „ ๋งˆํฌ์—… ๋œ ๊ทธ๋Œ€๋กœ์˜ ๋ชจ์Šต์ด ์ˆœ๊ฐ„์ ์œผ๋กœ ๋ณด์ด๋Š” ํ˜„์ƒ. ํ”„๋ ˆ์ž„์›Œํฌ์— ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ์ƒ์„ฑํ•ด ๋ฌธ์„œ์— ์ ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์—†๋‹ค๋ฉด ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผํ•จ.

Scripting ์„ฑ๋Šฅ

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•œ๋‹ค. CSS-in-JS ๋ฐฉ์‹์€ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ JS ๊ตฌ๋ฌธ ๋ถ„์„ ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ ์œผ๋กœ CSS๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ตฌ์กฐ๋Š” ๋Š๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.


2. CSS

์ •์˜

CSS๋Š” ์›น ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ๊ณผ ์Šคํƒ€์ผ์„ ์ •์˜ํ•˜๋Š” ์Šคํƒ€์ผ ์–ธ์–ด๋‹ค.

์„ ํƒ์ž (Selectors)

HTML ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํŠน์ • ์š”์†Œ๋ฅผ ์„ ํƒํ•ด ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์„ ํƒ์ž ์ข…๋ฅ˜ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ์„ ํƒ์ž 30๊ฐœ

  • Class ์„ ํƒ์ž

  • ID ์„ ํƒ์ž

  • ์œ ํ˜• ์„ ํƒ์ž(span, p, a ๋…ธ๋“œ ์ด๋ฆ„)

  • ์ „์ฒด ์„ ํƒ์ž(*)

  • & nesting ์„ ํƒ์ž: SCSS ๊ฐ™์€ ์ „์ฒ˜๋ฆฌ๊ธฐ์— ์žˆ๋˜ ์„ ํƒ์ž์ธ๋ฐ ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ๊ฒƒ ๊ฐ™๋‹ค. &๋Š” ์ƒ์œ„ ์„ ํƒ์ž๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

๋ฐ•์Šค ๋ชจ๋ธ

๋ชจ๋“  HTML ์š”์†Œ๋Š” ๋ฐ•์Šค ๋ชจ์–‘์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ด๊ฒƒ์„ box model์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

๋ฐ•์Šค ๋ชจ๋ธ์˜ ๊ตฌ์„ฑ ์š”์†Œ

  1. ์ปจํ…์ธ  ์˜์—ญ (Content Area)

  2. ํŒจ๋”ฉ (์•ˆ์ชฝ ์—ฌ๋ฐฑ, Padding)

  3. ํ…Œ๋‘๋ฆฌ (ํ…Œ๋‘๋ฆฌ ์—ฌ๋ฐฑ, Border)

  4. ๋งˆ์ง„ (๋ฐ”๊นฅ ์—ฌ๋ฐฑ, Margin)

box-sizing: border-box ์†์„ฑ ์‚ฌ์šฉ์‹œ border, padding์„ ๊ณ ๋ คํ•ด ๋ฐ•์Šค ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค. width: 200px ์ผ ๊ฒฝ์šฐ, border์™€ padding์ด ๊ฐ๊ฐ 10px์„ ์ฐจ์ง€ํ•œ๋‹ค๋ฉด ์ปจํ…์ธ  ํฌ๊ธฐ๋Š” 160px

๋ฏธ๋””์–ด ์ฟผ๋ฆฌ

๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์™€ ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ CSS๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์ ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€์˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

/* ํ™”๋ฉด์˜ ๋„ˆ๋น„๊ฐ€ 600px ์ดํ•˜์ผ ๋•Œ ์Šคํƒ€์ผ์„ ์ ์šฉ */
@media screen and (max-width: 600px) {
}

Flexbox๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž์‹ ์š”์†Œ๋“ค์„ ํšจ๊ณผ์ ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์š”์†Œ ์‚ฌ์ด์˜ ๊ณต๊ฐ„ ๋ฐฐ๋ถ„์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

Grid๋Š” ์ˆ˜ํ‰์„ , ์ˆ˜์ง์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ด์ฐจ์› ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์ด๋‹ค. Flex์™€ ๋™์ผํ•˜๊ฒŒ ์ปจํ…Œ์ด๋„ˆ์™€ ์•„์ดํ…œ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์žก์„ ์ˆ˜ ์žˆ๋‹ค.


์ถ”๊ฐ€ ํ‚ค์›Œ๋“œ

CSS-in-CSS

Last updated