๐Ÿ“ฆ 01. ๋ฐ•์Šค ๋ชจ๋ธ๊ณผ ๋ Œ๋”๋ง ์›๋ฆฌ: '์™œ ๋‚ด ๋ฐ•์Šค๊ฐ€ ์ž๊พธ ์‚์ ธ๋‚˜๊ฐˆ๊นŒ?'

2026๋…„ 4์›” 30์ผ ์ˆ˜์ •๋จ

๐Ÿ“‹ ๊ฐœ์š”

CSS์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด์ž ํ•ต์‹ฌ์ธ ๋ฐ•์Šค ๋ชจ๋ธ์˜ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •์„ ์˜์ฒ ์ด์™€ ํ•จ๊ป˜ ํŒŒํ—ค์ณ ๋ด…๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ด ๋ฌธ์„œ๋ฅผ ์ฝ๊ธฐ ์ „์—

โฑ๏ธ ์˜ˆ์ƒ ์ฝ๊ธฐ ์‹œ๊ฐ„: 8๋ถ„(์ „์ฒด) / ํ•ต์‹ฌ ํŒŒํŠธ๋งŒ: 4๋ถ„

๐Ÿ—บ๏ธ ์ด ๋ฌธ์„œ์˜ ํ๋ฆ„
[๋ฐ•์Šค์˜ ๊ตฌ์„ฑ ์š”์†Œ] โ†’ [box-sizing์˜ ํ˜๋ช…] โ†’ [๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ]

๐ŸŽฏ ์ด ๋ฌธ์„œ๋ฅผ ๋‹ค ์ฝ์œผ๋ฉด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

  • CSS ๋ฐ•์Šค ๋ชจ๋ธ์˜ 4๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • content-box์™€ border-box์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‹ค๋ฌด์—์„œ ์‹ค์ˆ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • CSS ์†์„ฑ ํ•˜๋‚˜๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ(Reflow/Repaint)์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ธ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ—บ๏ธ ์ด ๋ฌธ์„œ์˜ ๋ฐฐ๊ฒฝ ์„ธ๊ณ„๊ด€: '์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ'

  • ๐Ÿฃ ์˜์ฒ  (์ž…๋ฌธ์ž): "์˜ํ˜ธ ๋‹˜! ๋ถ„๋ช…ํžˆ ๊ฐ€๋กœ ๊ธธ์ด๋ฅผ 100px๋กœ ์คฌ๋Š”๋ฐ, ํŒจ๋”ฉ์ด๋ž‘ ํ…Œ๋‘๋ฆฌ๋ฅผ ๋„ฃ์œผ๋‹ˆ๊นŒ ์‹ค์ œ ๋ฐ•์Šค๊ฐ€ ๋” ์ปค์กŒ์–ด์š”. ์˜์ˆ˜ ๋‹˜์ด ๋ณด๋Š” ์Šคํ„ฐ๋”” ์นด๋“œ ์ค„๋ฐ”๊ฟˆ๋„ ๋‹ฌ๋ผ์กŒ๊ณ ์š”."
  • ๐Ÿฆ ์˜ํ˜ธ (๋ฆฌ๋“œ): "์˜์ฒ  ๋‹˜, CSS๋Š” ๋‹จ์ˆœํžˆ ์ƒ‰์น ํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ์—์š”. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ณต๊ฐ„์„ ๊ณ„์‚ฐํ•˜๋Š” Box Model์„ ์ดํ•ดํ•ด์•ผ width๊ฐ€ ๋ฌด์—‡์„ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ์Šค์Šค๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์นด๋“œ ์•ˆ์ชฝ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋“ค์—ฌ๋‹ค๋ณด์ฃ ."

๐Ÿค” ์™œ ์•Œ์•„์•ผ ํ•˜๋Š”๊ฐ€

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ CSS๋Š” '๊ณต๊ฐ„์„ ๋‹ค๋ฃจ๋Š” ์˜ˆ์ˆ ' ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์˜ˆ์ˆ ์˜ ๊ธฐ์ดˆ๋Š” ์•„์ฃผ ์ฐจ๊ฐ€์šด ์ˆ˜ํ•™์  ๊ณ„์‚ฐ ์œ„์— ์„ธ์›Œ์ ธ ์žˆ์ฃ .

์˜์ฒ ์ด๊ฐ€ ๊ฒช์€ ๋ฌธ์ œ๋Š” ๋‹จ์ˆœํ•œ ์‹ค์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ, CSS์˜ ๊ธฐ๋ณธ๊ฐ’์ธ content-box์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๋ชฐ๋ž๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ํ•„์—ฐ์ ์ธ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์ด ์›๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋ฉด ํ™”๋ฉด์ด ์กฐ๊ธˆ๋งŒ ๋ณต์žกํ•ด์ ธ๋„ ๋ ˆ์ด์•„์›ƒ์ด ํ”ฝ์…€ ๋‹จ์œ„๋กœ ์–ด๊ธ‹๋‚˜๊ณ , ์ด๋Š” ๊ณง ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์˜ ์ €ํ•˜๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ๋‚˜์•„๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์“ด CSS ํ•œ ์ค„์ด ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์—์„œ ์–ด๋–ป๊ฒŒ ํ”ฝ์…€๋กœ ๋ณ€ํ•˜๋Š”์ง€(Rendering)๋ฅผ ์•Œ์•„์•ผ 5๋…„์ฐจ ์ด์ƒ์˜ ์‹œ๋‹ˆ์–ด๊ฐ€ ๊ฐ–์ถฐ์•ผ ํ•  '์„ฑ๋Šฅ' ์— ๋Œ€ํ•œ ๊ฐ๊ฐ์„ ๊ธฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ—๏ธ 1. CSS ๋ฐ•์Šค์˜ 4๋‹จ๊ณ„ ๊ตฌ์กฐ: ๊ตฌ์„ฑ ์š”์†Œ

๋ธŒ๋ผ์šฐ์ €๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ์‚ฌ๊ฐํ˜• ๋ฐ•์Šค๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ•์Šค๋Š” ์•ˆ์ชฝ์—์„œ๋ถ€ํ„ฐ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ 4๊ฐœ์˜ ์ธต์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. Content (๋‚ด์šฉ): ์‹ค์ œ ํ…์ŠคํŠธ๋‚˜ ์ด๋ฏธ์ง€๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ํ•ต์‹ฌ ์˜์—ญ์ž…๋‹ˆ๋‹ค.
  2. Padding (์•ˆ์ชฝ ์—ฌ๋ฐฑ): ํ…Œ๋‘๋ฆฌ์™€ ๋‚ด์šฉ ์‚ฌ์ด์˜ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ๋ฐฐ๊ฒฝ์ƒ‰์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  3. Border (ํ…Œ๋‘๋ฆฌ): ํŒจ๋”ฉ๊ณผ ๋งˆ์ง„ ์‚ฌ์ด์˜ ๊ฒฝ๊ณ„์„ ์ž…๋‹ˆ๋‹ค.
  4. Margin (๋ฐ”๊นฅ ์—ฌ๋ฐฑ): ๋ฐ•์Šค์™€ ๋‹ค๋ฅธ ๋ฐ•์Šค ์‚ฌ์ด์˜ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์ธ์ ‘ํ•œ ์š”์†Œ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋Š” ์˜์ฒ ์ด๊ฐ€ ์Šคํ„ฐ๋”” ์นด๋“œ์˜ ๊ฐ€๋กœํญ์„ ๋งž์ถ”๋ ค๋‹ค ํ—ท๊ฐˆ๋ฆฐ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ content-box์—์„œ๋Š” width๊ฐ€ ๋‚ด์šฉ ์˜์—ญ๋งŒ ์˜๋ฏธํ•œ๋‹ค๋Š” ์ ์„ ๋จผ์ € ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

.box {
  width: 100px; /* ๊ธฐ๋ณธ๊ฐ’์—์„œ๋Š” content ์˜์—ญ๋งŒ 100px์ž…๋‹ˆ๋‹ค. */
  padding: 10px; /* ์ขŒ์šฐ padding์ด ๊ฐ๊ฐ ๋”ํ•ด์ ธ ์‹ค์ œ border ๋ฐ”๊นฅ ํญ์ด ์ปค์ง‘๋‹ˆ๋‹ค. */
  border: 5px solid black; /* border๋„ content ๋ฐ”๊นฅ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. */
  margin: 15px; /* margin์€ ๋ฐ•์Šค ๋ฐ”๊นฅ ์—ฌ๋ฐฑ์ด๋ผ ์ธ์ ‘ ์š”์†Œ์™€์˜ ๊ฑฐ๋ฆฌ๋งŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. */
}

๐Ÿฆ ์˜ํ˜ธ์˜ ํŒ:
"์˜์ฒ  ๋‹˜, ์—ฌ๊ธฐ์„œ width: 100px์€ ์–ด๋””๋ฅผ ์˜๋ฏธํ• ๊นŒ์š”? ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” Content ๋งŒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹ค์ œ ๋ฐ•์Šค๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ์ „์ฒด ๊ฐ€๋กœํญ์€ 100 + 10*2(ํŒจ๋”ฉ) + 5*2(ํ…Œ๋‘๋ฆฌ) = 130px์ด ๋˜๋Š” ๊ฑฐ์ฃ . ๋งˆ์ง„์€ ๋ฐ•์Šค ๋ฐ”๊นฅ์˜ ๊ณต๊ฐ„์ด๋‹ˆ ์ด 160px์˜ ์ž๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด์ง‘๋‹ˆ๋‹ค."


๐Ÿ“ 2. box-sizing: ๊ฐ€๋กœํญ์˜ ํ‰ํ™”๋ฅผ ์œ„ํ•˜์—ฌ

์นด๋“œ ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค ํŒจ๋”ฉ๊ณผ ํ…Œ๋‘๋ฆฌ๋ฅผ ๋„ฃ์„ ๋•Œ๋งˆ๋‹ค ์ „์ฒด ํญ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋ฉด ๋ฆฌ๋ทฐ๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹ค๋ฌด์—์„œ๋Š” box-sizing์œผ๋กœ "๋‚ด๊ฐ€ ์„ ์–ธํ•œ ํญ์ด ์–ด๋””๊นŒ์ง€ ํฌํ•จํ•˜๋Š”๊ฐ€"๋ฅผ ๋จผ์ € ํ†ต์ผํ•ฉ๋‹ˆ๋‹ค.

  • content-box (๊ธฐ๋ณธ๊ฐ’): width๊ฐ€ ์˜ค์ง ๋‚ด์šฉ๋ฌผ(Content)๋งŒ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ํŒจ๋”ฉ์„ ๋„ฃ์œผ๋ฉด ๋ฐ•์Šค๊ฐ€ ์ปค์ง‘๋‹ˆ๋‹ค.
  • border-box (์‹ค๋ฌด ํ‘œ์ค€): width๊ฐ€ ํ…Œ๋‘๋ฆฌ(Border)๊นŒ์ง€ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํŒจ๋”ฉ์ด๋‚˜ ํ…Œ๋‘๋ฆฌ๋ฅผ ์•„๋ฌด๋ฆฌ ๋„ฃ์–ด๋„ ์ „์ฒด ๋ฐ•์Šค ํฌ๊ธฐ๋Š” ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ๋‚ด์šฉ๋ฌผ ์˜์—ญ์ด ์•Œ์•„์„œ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์นด๋“œ๊ฐ€ ๊ฐ™์€ ๊ทธ๋ฆฌ๋“œ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ํ™”๋ฉด์—์„œ๋Š” ๋‹ค์Œ ์ „์—ญ ์„ค์ •์„ ๋‘๋Š” ํŽธ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

* {
  /* ์„ ์–ธํ•œ width/height ์•ˆ์— padding๊ณผ border๊นŒ์ง€ ํฌํ•จํ•ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฐ•์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. */
  box-sizing: border-box;
}

๐Ÿฃ ์˜์ฒ : "์ด์ œ ์นด๋“œ๋งˆ๋‹ค padding์ด ๋‹ฌ๋ผ๋„ ๊ทธ๋ฆฌ๋“œ ํญ์ด ์˜ˆ์ƒ ๋ฐ–์œผ๋กœ ๋Š˜์–ด๋‚˜์ง€ ์•Š๊ฒ ๋„ค์š”. ๋ฆฌ๋ทฐํ•  ๋•Œ๋„ 'ํญ ๊ณ„์‚ฐ ๊ธฐ์ค€์ด ํ†ต์ผ๋๋Š”์ง€'๋ถ€ํ„ฐ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค."


๐ŸŽจ 3. ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ (The Way to Pixel)

์šฐ๋ฆฌ๊ฐ€ ์“ด CSS๊ฐ€ ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๊ธฐ๊นŒ์ง€ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ—˜๋‚œํ•œ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

  1. DOM + CSSOM = Render Tree: HTML ๊ตฌ์กฐ์™€ CSS ์Šคํƒ€์ผ์„ ํ•ฉ์ณ์„œ '๋ณด์—ฌ์ค„ ๊ฒƒ'๋“ค์˜ ์ง€๋„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. Layout (Reflow): ๋ˆ„๊ฐ€ ์–ด๋””์— ์œ„์น˜ํ• ์ง€, ํฌ๊ธฐ๋Š” ์–ผ๋งˆ์ผ์ง€ ๊ณต๊ฐ„์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. (๋ฐ•์Šค ๋ชจ๋ธ์ด ์—ฌ๊ธฐ์„œ ์“ฐ์ž…๋‹ˆ๋‹ค!)
  3. Paint (Repaint): ๊ณ„์‚ฐ๋œ ์œ„์น˜์— ์ƒ‰์„ ์น ํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
  4. Composite: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธต(Layer)์„ ํ•ฉ์ณ ์ตœ์ข… ํ™”๋ฉด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

โš ๏ธ ์ฃผ์˜! ์„ฑ๋Šฅ ๊ฒฝ๋ณด:
width, height, margin ๋“ฑ์„ ๋ฐ”๊พธ๋ฉด Layout ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(Reflow). ๋ฐ˜๋ฉด color, background-color๋งŒ ๋ฐ”๊พธ๋ฉด ๊ณ„์‚ฐ์€ ๊ฑด๋„ˆ๋›ฐ๊ณ  Paint ๋งŒ ๋‹ค์‹œ ํ•˜๋ฉด ๋˜์ฃ (Repaint). 5๋…„์ฐจ ๊ฐœ๋ฐœ์ž๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค ๋•Œ Reflow๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์†์„ฑ ๋Œ€์‹  ๋ถ€ํ•˜๊ฐ€ ์ ์€ transform์ด๋‚˜ opacity๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ ๋งˆ๋ฌด๋ฆฌ ํ€ด์ฆˆ

Q1. box-sizing: border-box ์„ค์ •์ด ๋˜์–ด ์žˆ์„ ๋•Œ, width: 200px, padding: 20px, border: 1px์ธ ์š”์†Œ์˜ ์‹ค์ œ Content ์˜์—ญ ๊ฐ€๋กœ ๊ธธ์ด๋Š” ์–ผ๋งˆ์ผ๊นŒ์š”?

โœ… ์ •๋‹ต: 158px

๐Ÿ’ก ์ƒ์„ธ ํ•ด์„ค:

  • ์›๋ฆฌ ์„ค๋ช…: border-box์—์„œ๋Š” width๊ฐ€ Content + Padding + Border๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Content = 200 - (20ร—2) - (1ร—2) = 158px์ž…๋‹ˆ๋‹ค.
  • ์˜ค๋‹ต ํ”ผ๋“œ๋ฐฑ: "์˜์ฒ  ๋‹˜, content-box(๊ธฐ๋ณธ๊ฐ’)์˜€๋‹ค๋ฉด Content๊ฐ€ 200px ๊ทธ๋Œ€๋กœ์ง€๋งŒ, border-box๋Š” ์ดํ•ฉ์ด 200px์ด๋‹ˆ๊นŒ ์•ˆ์ชฝ์œผ๋กœ ์ค„์–ด๋“œ๋Š” ๊ฑฐ์˜ˆ์š”!"
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "border-box = ํ…Œ๋‘๋ฆฌ๊นŒ์ง€ ํฌํ•จํ•˜๋Š” ์ด๋Ÿ‰ ์ œํ•œ. ์•ˆ์—์„œ ์•Œ์•„์„œ ๋‚˜๋ˆ  ๊ฐ€์ ธ๋ผ!"

Q2. ๋‹ค์Œ ์ค‘ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋Š”(Reflow๋ฅผ ์œ ๋ฐœํ•˜๋Š”) ์†์„ฑ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

  1. opacity
  2. background-color
  3. margin-top
  4. visibility

โœ… ์ •๋‹ต: 3. margin-top

๐Ÿ’ก ์ƒ์„ธ ํ•ด์„ค:

  • ์›๋ฆฌ ์„ค๋ช…: margin-top์€ ์š”์†Œ์˜ ๊ธฐํ•˜ํ•™์  ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ ˆ์ด์•„์›ƒ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๊ณ„์‚ฐ(Reflow)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด opacity, background-color, visibility๋Š” ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ ์—†์ด ์ƒ‰์ƒ/ํˆฌ๋ช…๋„๋งŒ ๋ฐ”๊พธ๋ฏ€๋กœ Repaint๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ค๋‹ต ํ”ผ๋“œ๋ฐฑ: "์˜์ฒ  ๋‹˜, ์œ„์น˜๋‚˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”๊พธ๋Š” ์†์„ฑ(margin, width, padding ๋“ฑ)์€ Reflow์˜ ์ฃผ๋ฒ”์ด์—์š”. ์• ๋‹ˆ๋ฉ”์ด์…˜์—๋Š” transform๊ณผ opacity๋งŒ ์“ฐ๋Š” ๊ฒŒ ์„ฑ๋Šฅ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค!"
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "์œ„์น˜ยทํฌ๊ธฐ = Reflow(๋น„์Œˆ), ์ƒ‰๊น”ยทํˆฌ๋ช…๋„ = Repaint(์ €๋ ด)"

Q3. [์˜์ฒ ์ด์˜ ํ…Œ์ŠคํŠธ ํƒ€์ž„: ์‹ค๋ฌด ๋”œ๋ ˆ๋งˆ]
์˜์ฒ ์ด๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ํ•ญ๋ชฉ์— ํ•˜๋‹จ ํ…Œ๋‘๋ฆฌ๋ฅผ ๋„ฃ์—ˆ๋”๋‹ˆ ๊ฐ‘์ž๊ธฐ ๋ฆฌ์ŠคํŠธ ์ „์ฒด ๋†’์ด๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด์„œ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ์ƒ๊ฒจ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. ์˜์ˆ™ ๋””์ž์ด๋„ˆ ๋‹˜์ด "์Šคํฌ๋กค ์ƒ๊ธฐ๋ฉด UX ๋ง๊ฐ€์ ธ์š”!"๋ผ๊ณ  ์™ธ์น˜๊ณ  ๊ณ„์‹œ๋„ค์š”. ์˜์ฒ ์ด๊ฐ€ ๋ฐ•์Šค ๋ชจ๋ธ์˜ ์›๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ด ์ƒํ™ฉ์„ ๊ฐ€์žฅ ์šฐ์•„ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ์š”?

โœ… ์ •๋‹ต: ํ•ด๋‹น ์š”์†Œ์— box-sizing: border-box๋ฅผ ์ ์šฉํ•˜๊ฑฐ๋‚˜, ๋Š˜์–ด๋‚œ ํ…Œ๋‘๋ฆฌ ๋‘๊ป˜๋งŒํผ height๋ฅผ ์ค„์ด๊ธฐ

๐Ÿ’ก ์ƒ์„ธ ํ•ด์„ค:

  • ์›๋ฆฌ ์„ค๋ช…: ํ…Œ๋‘๋ฆฌ(Border)๋Š” ๋ฐ•์Šค ๋ชจ๋ธ์—์„œ ๋ฐ•์Šค์˜ ํฌ๊ธฐ๋ฅผ ํ‚ค์šฐ๋Š” ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ณ ์ •๋œ ๋†’์ด๋ฅผ ๊ฐ€์ง„ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์ž์‹ ์š”์†Œ์˜ ํ…Œ๋‘๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ๋‚ด๋ถ€ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•ด์ ธ ์Šคํฌ๋กค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ค๋‹ต ํ”ผ๋“œ๋ฐฑ: "์˜์ฒ  ๋‹˜, overflow: hidden์œผ๋กœ ์Šคํฌ๋กค๋งŒ ๊ฐ€๋ฆฌ๋Š” ๊ฑด ์ž„์‹œ๋ฐฉํŽธ์ผ ๋ฟ์ด์—์š”. ๊ทผ๋ณธ์ ์œผ๋กœ ๋ฐ•์Šค๊ฐ€ ์™œ ์ปค์กŒ๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๊ณ  border-box๋ฅผ ์“ฐ๋ฉด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค."
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "๋‚ด ๊ฐ€๋กœ์„ธ๋กœ๋ฅผ ๋๊นŒ์ง€ ์ฑ…์ž„์ง€๊ณ  ์‹ถ๋‹ค๋ฉด? border-box!"

๐Ÿฃ ์˜์ฒ ์ด์˜ ํ‡ด๊ทผ ์ผ๊ธฐ

์˜ค๋Š˜์€ ์ •๋ง 1px์˜ ์†Œ์ค‘ํ•จ์„ ๊นจ๋‹ฌ์€ ํ•˜๋ฃจ์˜€๋‹ค.
์˜์ˆ˜ ๋‹˜์ด "๋ ˆ์ด์•„์›ƒ์ด ์™œ ์ด๋ ‡๊ฒŒ ๋œ์ปน๊ฑฐ๋ ค?"๋ผ๊ณ  ํ•˜์‹ค ๋•Œ ์‹์€๋•€์ด ๋‚ฌ๋Š”๋ฐ, ์˜ํ˜ธ ๋‹˜์ด ๋ฐ•์Šค ๋ชจ๋ธ ๊ทธ๋ฆผ ํ•œ ์žฅ์œผ๋กœ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด ์ฃผ์…จ๋‹ค.
๊ทธ๋™์•ˆ ๋‚˜๋Š” ๋ˆˆ๋Œ€์ค‘์œผ๋กœ ํŒจ๋”ฉ๊ณผ ๋งˆ์ง„์„ ๋„ฃ๊ณ  ํ™”๋ฉด์—์„œ๋งŒ ํ™•์ธํ–ˆ๋Š”๋ฐ, ์ด์ œ๋Š” ๋จผ์ € content-box์ธ์ง€ border-box์ธ์ง€ ๊ณ„์‚ฐ ๊ธฐ์ค€์„ ํ™•์ธํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

๐Ÿ’ก "CSS ๋ฐ•์Šค๋Š” ๋‹จ์ˆœํ•œ ๋„ค๋ชจ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ •๊ตํ•˜๊ฒŒ ์ง์กฐ๋œ 4๊ฐœ์˜ ์ธต์ด๋‹ค. ์ด ์ธต๋“ค์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๋ ˆ์ด์•„์›ƒ์˜ ์‹œ์ž‘์ด๋‹ค."

ํ‡ด๊ทผ๊ธธ์— ๋‚ด๊ฐ€ ๋งŒ๋“  ์Šคํ„ฐ๋”” ์นด๋“œ CSS๋ฅผ ๋‹ค์‹œ ๋– ์˜ฌ๋ ธ๋‹ค. ๋‚ด์ผ๋ถ€ํ„ฐ๋Š” ๋ ˆ์ด์•„์›ƒ ๋ฆฌ๋ทฐ์—์„œ "์ด ๋ฐ•์Šค์˜ ์„ ์–ธ ํญ๊ณผ ์‹ค์ œ ์ ์œ  ํญ์ด ๊ฐ™์€๊ฐ€?", "์• ๋‹ˆ๋ฉ”์ด์…˜์ด Layout์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๊ฒŒ ๋งŒ๋“ค์ง€๋Š” ์•Š๋Š”๊ฐ€?"๋ฅผ ๋จผ์ € ์ฒดํฌํ•ด์•ผ๊ฒ ๋‹ค.


๐Ÿ”— ๋” ์•Œ์•„๋ณด๊ธฐ