CSS

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • CSS

    • Sass

    • CSS ๋ฐฉ๋ฒ•๋ก 

    • CSS Modules

CSS

  • Cascading Style Sheets

  • ์›นํŽ˜์ด์ง€๋ฅผ ๊พธ๋ฏธ๋ ค๊ณ  ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ

๐ŸŒˆ CSS์˜ ๋“ฑ์žฅ

1990 ๋ฌธ์„œ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ HTML ๋“ฑ์žฅ

์›น์€ ๋ฌธ์„œ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด HTML์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , HTML์— ์„œ์‹์„ ์ž…ํžˆ๊ธฐ ์œ„ํ•ด ํƒœ๊ทธ์— ์ง์ ‘ ์Šคํƒ€์ผ์„ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ์‹(inline-style) ์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค.

<div>
  <p>๋‚œ ๋ฌธ์„œ๊ณ , <strong style="color:red">๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์–ด!!</strong><p>
</div>

1996 CSS ํƒ„์ƒ

inline-style์˜ ๋ฌธ์ œ์ ์œผ๋กœ ์ธํ•ด CSS๊ฐ€ ํƒ„์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  • ๋™์ผํ•˜๊ฒŒ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์€ ๊ณณ์— ๋งค๋ฒˆ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

  • ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์ผ์ผ์ด ๋‹ค ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒ

/* CSS Ruleset : ์„ ํƒ์ž(Selector) & ์„ ์–ธ(Declaration) */
strong {color:red; text-decoration:underline;}

HTML์—์„œ ์„œ์‹์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์›ํ•˜๋Š” ํƒœ๊ทธ๋ฅผ ์„ ํƒ(Selector)ํ•˜์—ฌ ์Šคํƒ€์ผ ์„ ์–ธ(Declarations)ํ•ด๋‘๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

๐ŸŽจ CSS์˜ ๋ฌธ๋ฒ•์˜ ํ™•์žฅ

2006 Sass์˜ ๋“ฑ์žฅ

Sass๋Š” Nested(์ค‘์ฒฉ๋œ) ํ•œ Selector์™€ variable๋ฅผ ๋“ฑ๋กํ• ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€์ ์ธ ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด CSS๋กœ ๋ณ€ํ™˜์„ ์‹œ์ผœ์ฃผ๋Š” pre-processor(์ „์ฒ˜๋ฆฌ๊ธฐ)์ด๋‹ค.

์ „์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ Selector์˜ ๋ฐ˜๋ณต์„ ์ค„์ด๊ณ  ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธ€์žํฌ๊ธฐ,์ƒ‰์ƒ ๋“ฑ์„ ๋ณ€์ˆ˜๋กœ ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CSS ํŒŒ์ผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

๐Ÿšจ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ App ๋“ฑ์žฅ, CSS ๊ตฌ์กฐ์ƒ์˜ ๋ฌธ์ œ ๋ฐœ์ƒ

ํŽ˜์ด์Šค๋ถ์˜ ์„ฑ์žฅ์œผ๋กœ ์ธํ•ด React๋ฅผ ๋น„๋กฏํ•œ Framework๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด์„œ ๋ฌธ์„œ ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์ด ์ž๋ฆฌ์žก๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฌธ์„œ๋ฅผ ํŽธํ•˜๊ฒŒ ๊พธ๋ฐ€ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ CSS๋Š” ๋ฌธ์„œ๋ฅผ ๊พธ๋ฏธ๋Š” ๋ฐ ์žˆ์–ด์„œ ์œ ์šฉํ–ˆ์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์Šค๋Ÿฌ์šด UI์™€ ๋ชจ๋“ˆ๊ณผ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐฉ์‹์˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹๊ณผ๋Š” ๋งž์ง€ ์•Š์•˜๋‹ค.

๐Ÿ“Œ CSS ์„ค๊ณ„ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ 

Global Scope : CSS์˜ ์†์„ฑ์€ ์–ด๋””์„œ๋“  ์„ ์–ธ ๊ฐ€๋Šฅํ•˜๋ฉฐ (ex. inline, style ํƒœ๊ทธ, link ํƒœ๊ทธ๋กœ ์—ฐ๊ฒฐํ•œ ํŒŒ์ผ.. ๋“ฑ) ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์˜ํ–ฅ์„ ์ค€๋‹ค.

๋ชจ๋“  ์Šคํƒ€์ผ์ด global์— ์„ ์–ธ๋˜์–ด ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” class ์ด๋ฆ„์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ

Specificity : HTML์—์„œ ์ง€์ •ํ•œ class ์ˆœ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ CSS์˜ ์ˆœ์„œ์— ์˜ํ•ด ์„œ์‹ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

CSS ๋กœ๋“œ ์ˆœ์„œ์— ๋”ฐ๋ผ ์Šคํƒ€์ผ์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ

๐Ÿ’ก CSS ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž

2013 CSS ๋ฐฉ๋ฒ•๋ก  (feat.BEM)

๐Ÿ“– BEM Block, Element, Modifier์˜ ์ค„์ž„๋ง๋กœ CSS ํด๋ž˜์Šค ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜ ๋ฐฉ๋ฒ•๋ก  HTML ์š”์†Œ๋“ค์„ ๊ฐ๊ฐ Block, Element, Modifier ์„ธ ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•ด์„œ ์ž‘๋ช…์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก 

์ฒด๊ณ„์ ์œผ๋กœ ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ  CSS๋ฅผ ์ž‘์„ฑ์„ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ํ•„์š”์„ฑ์— ์˜ํ•ด CSS ๋ฐฉ๋ฒ•๋ก ๋“ค์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  Specificity๋ฅผ ํ•˜๋‚˜๋กœ๋งŒ ๊ด€๋ฆฌํ•˜์—ฌ ๊ธฐ์กด์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ด๋ฉฐ ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์›Œ์„œ BEM์ด ๋Œ€์„ธ๊ฐ€ ๋˜์—ˆ๋‹ค.

2015 CSS Modules

Selector๋Š” ๋‹จ์ˆœํ™”๋˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ™”ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ Global Scope ์œผ๋กœ ์ธํ•ด ์ปดํฌ๋„ŒํŠธ์™€ CSS๊ฐ„์˜ ๊ตฌ์กฐ์™€ ๋ฒ”์œ„๋ฅผ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„ ์žˆ์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ์ฒซ๋ฒˆ์งธ ์›€์ง์ž„์œผ๋กœ CSS Modules์ด ๋“ฑ์žฅํ•˜์˜€๋‹ค.

  • CSS Modules CSS๋ฅผ ๋ชจ๋“ˆํ™” ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ CSS ํด๋ž˜์Šค์— ํ•ด์‹œ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ณ ์œ ํ•œ className์„ ๋งŒ๋“ค์–ด, Scope๋ฅผ ์ง€์—ญ์ ์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ๋ฐฉ๋ฒ•

  • .module.css ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ CSS ๋ชจ๋“ˆ ํŒŒ์ผ์„ ์ƒ์„ฑ

.box{
  background : black; 
  color: white; 
  padding : 2rem; 
}
import React from "react";
import styles from "./Box.module.css";

function Box() {
  return <div className={styles.box}>{styles.box}</div>;
}
export default Box;

์žฅ์ 

  • ํ•ด์‹œ ๋ฌธ์ž์—ด์ด ์ถ”๊ฐ€ ๋˜์–ด ๊ณ ์œ ํ•œ ํด๋ž˜์Šค๋„ค์ž„์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์—, CSS ํด๋ž˜์Šค๊ฐ€ ์ค‘์ฒฉ๋˜๋Š” ๊ฒƒ์„ ์™„๋ฒฝํžˆ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • css ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๊ฐ„์†Œํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์Šคํƒ€์ผ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด

๋‹จ์ 

  • ๋ณ„๋„์˜ CSS ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

  • ๋žœ๋”๋ง ๊ณผ์ •์—์„œ ์ž๋™ ๋ณ€ํ™˜๋œ ํด๋ž˜์Šค๋ช…์ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ์ €ํ•ดํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ 

Last updated