[HTML/CSS] CSS Pre-processor

yayaya_hojinΒ·2024λ…„ 2μ›” 5일

HTML/CSS

λͺ©λ‘ 보기
5/8
post-thumbnail

βš™οΈ CSS Pre-processor(μ „μ²˜λ¦¬κΈ°)

CSS μ „μ²˜λ¦¬κΈ°λŠ” νŠΉλ³„ν•œ syntaxλ₯Ό μ‚¬μš©ν•΄ CSS νŒŒμΌμ„ μƒμ„±ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€.

μ΄λŠ” κΈ°μ‘΄ μžˆμ—ˆλ˜ CSS의 λΆˆνŽΈν•¨/λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 생겨났닀.

πŸ’‘ CSS μ „μ²˜λ¦¬κΈ° νŠΉμ§•

1) Style Sheetsλ₯Ό λΆ„ν• ν•΄μ„œ 관리할 수 μžˆλ‹€.

2) μƒμ†μœΌλ‘œ μ½”λ“œ ꡬ쑰화λ₯Ό ν†΅ν•œ μœ μ§€λ³΄μˆ˜μ— μœ λ¦¬ν•˜λ‹€.

3) 곡톡 μš”μ†Œ ν•­λͺ©μ„ λ³€μˆ˜ or ν•¨μˆ˜λ‘œ λŒ€μ²΄ν•˜μ—¬ μ‚¬μš© ν•  수 μžˆλ‹€.

4) κΈ°μ‘΄ CSS 보닀 λ§Žμ€ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

πŸ’₯ CSS μ „μ²˜λ¦¬κΈ° 문제점

CSS μ „μ²˜λ¦¬κΈ°λ₯Ό μ‚¬μš©ν•œλ‹€κ³  무쑰건 쒋은 것은 μ•„λ‹ˆλ‹€.

기본적으둜 웹은 ν‘œμ€€ CSS 파일만 λ™μž‘μ„ ν•˜κ²Œ λ˜μ–΄μžˆλ‹€. 즉, CSS μ „μ²˜λ¦¬κΈ°λŠ” μ›Ήμ—μ„œ 직접 λ™μž‘μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€.

κ·ΈλŸ¬λ―€λ‘œ, CSS μ „μ²˜λ¦¬κΈ°λŠ” ν‘œμ€€ CSS 파일둜 μ»΄νŒŒμΌμ„ 톡해 μ›Ήμ—μ„œ λ™μž‘ν•˜κ²Œ ν•œλ‹€λŠ” λΆˆνŽΈν•¨μ΄ μžˆλ‹€.

μ΄λŠ” μ „μ²˜λ¦¬κΈ°λ₯Ό μœ„ν•œ 도ꡬ가 ν•„μš”ν•˜λ©° μž¬μ»΄νŒŒμΌμ‹œ 좔가적인 μ‹œκ°„μ΄ μ†Œλͺ¨λœλ‹€.

πŸ”’ CSS μ „μ²˜λ¦¬κΈ° μ’…λ₯˜

cssp_img

CSS μ „μ²˜λ¦¬κΈ° μ’…λ₯˜λ‘œλŠ” SASS/SCSS, Stylus, Less 등이 μžˆλ‹€.

πŸ“ SASS/SCSS

sass_img

SASS(Syntactically Awesome Style Sheets) / SCSS(Sassy CSS)

SCSSλŠ” SASS의 3λ²„μ „μœΌλ‘œ 2006λ…„λΆ€ν„° μ‹œμž‘ν•œ κ°€μž₯ 였래된 CSS ν™•μž₯ μ–Έμ–΄λ‹€.

1) nesting 기법
1_img

nesting 기법을 ν™œμš©ν•΄μ„œ μ½”λ“œ 길이λ₯Ό 쀄이고 λ°˜λ³΅λ˜λŠ” λΆ€λͺ¨μš”μ†Œ μ„ νƒμž μ‚¬μš©μ„ 쀄일 수 μžˆλ‹€.

2) @import
2_img

@importλ₯Ό μ‚¬μš©ν•΄μ„œ λ‹€λ₯Έ SASS/SCSS 파일 μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

3) 접두어

SASS/SCSSλŠ” $λ₯Ό λ³€μˆ˜μ˜ μ ‘λ‘μ–΄λ‘œ μ‚¬μš©ν•œλ‹€.

4) μ—°μ‚°μž

  • 연산은 λͺ¨λ‘ px λ‹¨μœ„λ‘œ κ³„μ‚°ν•œλ‹€. λ‹€λ₯Έ λ‹¨μœ„μ˜ 계산은 calc() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.
	width: 100px- 60px;
	width: calc(100% - 10rem);
  • +(λ§μ…ˆ) μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œ # 색상 κ°’ 연산이 κ°€λŠ₯ν•˜λ‹€.
	$white-color: #444444 + #444444; => #888888
  • ν”Όμ—°μ‚°μž ν˜•μ— 맞좰 연산을 ν•œλ‹€.
	$str1: hello + "world"; => hello world
    $str2: "hello" + world; => "hello world"

5) @mixin & @include
3_img

@mixin은 μž¬μ‚¬μš©ν•  μŠ€νƒ€μΌμ„ μ •μ˜ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

@includeλŠ” μ •μ˜λœ μŠ€νƒ€μΌμ„ ν˜ΈμΆœν•  λ•Œ μ‚¬μš©ν•œλ‹€.

πŸ“„ LESS

less_img

LESS(Lenear Style Sheets)

LESS μ—­μ‹œ nesting 기법을 μ§€μ›ν•˜κ³  μ—°μ‚°μžλ₯Ό μ§€μ›ν•œλ‹€.

@mixin, @include의 κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€λ§Œ μΆ”κ°€μ μœΌλ‘œ λͺ…μ‹œν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλ‹€.

λ³€μˆ˜μ˜ μ ‘λ‘μ–΄λŠ” @λ₯Ό μ‚¬μš©ν•œλ‹€.

JS 기반으둜 node.js ν™˜κ²½μ—μ„œ κ΅¬λ™λœλ‹€.

πŸ“œ Stylus

stylus_img

nesting 기법을 지원 μ•Šκ³ , λ³€μˆ˜ 접두어λ₯Ό λ”°λ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

Stylus μ—­μ‹œ @mixin, @include의 κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€λ§Œ μΆ”κ°€μ μœΌλ‘œ λͺ…μ‹œν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλ‹€.

λ§ˆμ°¬κ°€μ§€λ‘œ JS 기반으둜 node.js ν™˜κ²½μ—μ„œ κ΅¬λ™λœλ‹€.

	$white-color = #fff
    color: white-color

❗SASS/SCSS vs LESS vs Stylus

1. SASS/SCSSλŠ” CSS ꡬ쑰와 μœ μ‚¬ν•˜κ³  {}, ;을 μ‚¬μš©ν•΄ μ½”λ“œκ°€ λΆ„λ¦¬λ˜μ–΄ 가독성이 μ’‹λ‹€.
ν•˜μ§€λ§Œ 컴파일 과정이 ν•„μš”ν•΄ 좔가적인 단계가 ν•„μš”ν•˜λ‹€.
(이전 SASS/SCSSλŠ” Ruby ν™˜κ²½μ—μ„œ ꡬ동이 λ˜μ–΄ λŠλ¦¬λ‹€λŠ” 단점이 μžˆμ—ˆλŠ”λ°, ν˜„μž¬λŠ” node-sassκ°€ λ‚˜μ˜€λ©΄μ„œ μ„±λŠ₯이 μ’‹μ•„μ‘Œλ‹€.)

2. LESSλ‚˜ Stylus의 경우 @mixinκ³Ό 같은 κΈ°λŠ₯을 SASS/SCSS λ”°λ‘œ λͺ…μ‹œν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έλž˜μ„œ 개인적으둜 κΈ°λŠ₯을 λͺ…μ‹œν•œ SASS/SCSSκ°€ μ½”λ“œ κΈΈμ΄λŠ” μ’€ 더 κΈΈμ§€λ§Œ μΉœν™”μ μ΄κ³  λͺ…ν™•ν•˜λ‹€κ³  μƒκ°ν•œλ‹€.

0개의 λŒ“κΈ€