λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
SEO/seo-tips

λΈ”λ‘œκ·Έ CLS μ„±λŠ₯ μ΅œμ ν™”: 개발자 λ„κ΅¬λ‘œ 였λ₯˜ 확인뢀터 κ°„λ‹¨ν•œ μˆ˜μ • λ°©λ²•κΉŒμ§€

λΈ”λ‘œκ·Έ CLS μ„±λŠ₯ μ΅œμ ν™”: 개발자 λ„κ΅¬λ‘œ 였λ₯˜ 확인뢀터 κ°„λ‹¨ν•œ μˆ˜μ • λ°©λ²•κΉŒμ§€

μ›Ήμ‚¬μ΄νŠΈμ˜ μ„±λŠ₯, 속도, 그리고 μ‚¬μš©μž κ²½ν—˜μ€ SEO(검색 μ—”μ§„ μ΅œμ ν™”)의 핡심 μš”μ†Œμž…λ‹ˆλ‹€. κ·Έμ€‘μ—μ„œλ„ CLS(Cumulative Layout Shift, λˆ„μ  λ ˆμ΄μ•„μ›ƒ 이동)λŠ” 검색엔진이 μ€‘μš”ν•˜κ²Œ ν‰κ°€ν•˜λŠ” μ›Ή μ„±λŠ₯ μ§€ν‘œ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. ν‹°μŠ€ν† λ¦¬ λΈ”λ‘œκ·ΈλŠ” λ‹€λ₯Έ λΈ”λ‘œκ·Έ ν”Œλž«νΌκ³Ό 달리, μš΄μ˜μžκ°€ μžμ‹ μ˜ μ·¨ν–₯에 따라 λΈ”λ‘œκ·Έ λ””μžμΈμ„ 자유둭게 μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κΈ°λŠ₯은 ν‹°μŠ€ν† λ¦¬λ§Œμ˜ κ°€μž₯ 큰 μž₯점 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.
ν•˜μ§€λ§Œ μ•Œκ³  κ³„μ…¨λ‚˜μš”?
이 μž₯점이 잘λͺ» μ‚¬μš©λ˜λ©΄ 단점이 될 μˆ˜λ„ μžˆλ‹€λŠ” μ‚¬μ‹€μ„μš”.

λ¬΄ν„±λŒ€κ³  λΈ”λ‘œκ·Έ μŠ€ν‚¨μ„ μˆ˜μ •ν•˜λ‹€ 보면, λΈ”λ‘œκ·Έ μ„±λŠ₯ μ§€μˆ˜μ— μ•…μ˜ν–₯을 λ―ΈμΉ˜λŠ” μ‹€μˆ˜λ₯Ό ν•˜κ²Œ λ˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. λ””μžμΈκ³Ό 접근성도 λ¬Όλ‘  μ€‘μš”ν•˜μ§€λ§Œ, μ›Ή μ„±λŠ₯ μ§€μˆ˜(CLS λ“±)에 문제λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ” λ²”μœ„ λ‚΄μ—μ„œ μˆ˜μ •ν•˜λŠ” 것을 ꢌμž₯λ“œλ¦½λ‹ˆλ‹€.

λ§Œμ•½ μŠ€ν‚¨ μˆ˜μ •μ„ κ³„νšν•˜κ³  μžˆλ‹€λ©΄, μ•„λž˜μ— μ†Œκ°œν•˜λŠ” 방법을 톡해 λΈ”λ‘œκ·Έμ— μ„±λŠ₯ λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”μ§€ λ°˜λ“œμ‹œ μ κ²€ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

크둬 개발자 λ„κ΅¬λ‘œ CLS μΈ‘μ •ν•˜κ³  λΈ”λ‘œκ·Έ 였λ₯˜ 직접 κ³ μΉ˜λŠ” 방법

κ·Έμ€‘μ—μ„œλ„ κ°€μž₯ μ€‘μš”ν•œ 점검 ν•­λͺ©μ΄ λ°”λ‘œ CLSμž…λ‹ˆλ‹€.

λŒ€λΆ€λΆ„μ˜ μ„±λŠ₯ λ¬Έμ œλŠ” λΈ”λ‘œκ·Έ 자체의 μ„œλ²„ ν™˜κ²½κ³Ό 관련이 μžˆμ–΄ μˆ˜μ •μ΄ μ–΄λ ΅μ§€λ§Œ, CLSλŠ” 운영자의 μŠ€ν‚¨ μˆ˜μ •μ—μ„œ λΉ„λ‘―λ˜λŠ” κ²½μš°κ°€ λŒ€λΆ€λΆ„μ΄κΈ° λ•Œλ¬Έμ— 슀슀둜 κ°œμ„ μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

CLSλž€ λ¬΄μ—‡μΈκ°€μš”?

CLSλŠ” νŽ˜μ΄μ§€ λ‘œλ”© 쀑 μ‹œκ°μ μΈ μš”μ†Œκ°€ 예고 없이 μ΄λ™ν•˜λŠ” ν˜„μƒμ„ μˆ˜μΉ˜ν™”ν•œ μ§€ν‘œμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ΄‘κ³ λ‚˜ 이미지가 늦게 λ‘œλ”©λ˜λ©΄μ„œ ν…μŠ€νŠΈκ°€ λ°€λ €λ‚˜λŠ” κ²½μš°κ°€ 여기에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.

CLSκ°€ λ†’μ„μˆ˜λ‘ μ‚¬μš©μžλŠ” λΆˆνŽΈν•¨μ„ 느끼고, 검색 μˆœμœ„μ—λ„ 뢀정적 영ν–₯을 λ―ΈμΉ  수 μžˆμŠ΅λ‹ˆλ‹€.
CLS의 κ°œλ…κ³Ό μΈ‘μ • 기쀀에 λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…은 이 κΈ€μ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

λΈ”λ‘œκ·Έμ—μ„œ CLS 였λ₯˜ ν™•μΈν•˜λŠ” 방법

λΈ”λ‘œκ·Έ μ‚¬μ΄νŠΈμ˜ μ„±λŠ₯ κ²€μ‚¬λŠ” 졜근 크둬 λΈŒλΌμš°μ €(Chrome)μ—μ„œ κΈ°λŠ₯이 많이 κ°œμ„ λ˜μ–΄, λˆ„κ΅¬λ‚˜ μ‰½κ²Œ μΈ‘μ •ν•˜κ³  λ¬Έμ œμ μ„ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš© 방법도 맀우 κ°„λ‹¨ν•˜κΈ° λ•Œλ¬Έμ—, νŠΉλ³„ν•œ 기술 지식이 없어도 μžμ‹ μ˜ μ›Ήμ‚¬μ΄νŠΈλ‚˜ λΈ”λ‘œκ·Έ μ„±λŠ₯을 직접 μ κ²€ν•˜κ³  였λ₯˜λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜ μ†Œκ°œν•˜λŠ” 방법을 따라 λΈŒλΌμš°μ €μ˜ 개발자 도ꡬ(Chrome DevTools)λ₯Ό ν™œμš©ν•΄ λ³΄μ„Έμš”.
CLS(Cumulative Layout Shift)λ₯Ό ν¬ν•¨ν•œ λΈ”λ‘œκ·Έμ˜ 핡심 μ„±λŠ₯ μ§€ν‘œλ“€μ„ 직접 ν™•μΈν•˜κ³  κ°œμ„ ν•  수 μžˆλŠ” 쒋은 좜발점이 될 κ²ƒμž…λ‹ˆλ‹€. λ¨Όμ € μΈ‘μ •ν•˜κ³  μˆ˜μ •ν•˜λ €λŠ” λΈ”λ‘œκ·Έμ™€ μ‚¬μ΄νŠΈλ₯Ό 크둬으둜 μ ‘μ†ν•©λ‹ˆλ‹€.

1. 크둬 개발자 도ꡬ μ—΄κΈ°

  • λΈ”λ‘œκ·Έ νŽ˜μ΄μ§€μ—μ„œ F12 ν‚€ λ˜λŠ” 우클릭,검사 선택
  • λ˜λŠ” Ctrl + Shift + I (Mac은 Cmd + Option + I)

2. "μ„±λŠ₯(Performance)" νƒ­ 이동

  • μƒλ‹¨μ˜ Performance νƒ­ 클릭
  • νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜κ³  λͺ‡ μ΄ˆκ°„ λ‘œλ”© 과정을 기둝
  • μ™„λ£Œ ν›„ Experience μ˜μ—­μ—μ„œ Layout Shift λ°œμƒ μ—¬λΆ€ 확인

λΈ”λ‘œκ·Έ μ΅œμ ν™” CLS및 μ„±λŠ₯ μΈ‘μ •ν•˜κΈ° μœ„ν•΄ 크둬 개발자 도ꡬ μ‚¬μš©
λ¨Όμ €, μ„±λŠ₯을 μΈ‘μ •ν•˜κ³  μˆ˜μ •ν•˜λ €λŠ” λΈ”λ‘œκ·Έ λ˜λŠ” μ›Ήμ‚¬μ΄νŠΈμ— 크둬 λΈŒλΌμš°μ €(Chrome)둜 μ ‘μ†ν•©λ‹ˆλ‹€.

3. Lighthouse둜 μžλ™ 뢄석

  • Lighthouse νƒ­ Generate Report
  • Cumulative Layout Shiftν•­λͺ©μ˜ μ μˆ˜μ™€ 문제 μš”μ†Œ 확인

CLS λ°œμƒ 원인 뢄석

이 과정을 톡해 CLS(Cumulative Layout Shift)λ₯Ό λΉ„λ‘―ν•œ λ‹€μ–‘ν•œ μ›Ή μ„±λŠ₯ μ§€ν‘œλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ ν™•μΈν•˜κ³ , λΈ”λ‘œκ·Έμ˜ ꡬ쑰적 λ¬Έμ œλ‚˜ λ‘œλ”© μ§€μ—° λ“±μ˜ 원인을 μ²΄κ³„μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예: μ•„λž˜λŠ” CLS 문제 λ°œμƒ μ§€μˆ˜ 0.001둜 ν™•μΈλœ μ‚¬λ‘€μž…λ‹ˆλ‹€.
ν•˜λ‹¨μ˜ Layout 탭을 ν™•μΈν•˜μ—¬ λ¬Έμ œκ°€ λ˜λŠ” μ½”λ“œλ₯Ό 직접 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œμ²˜λŸΌ CLS μ§€μˆ˜κ°€ 0.001둜 ν‘œμ‹œλœ 경우, 크둬 개발자 도ꡬ ν•˜λ‹¨μ˜ Layout탭을 μ—΄μ–΄ 문제λ₯Ό μœ λ°œν•˜λŠ” HTML/CSS μš”μ†Œλ₯Ό 직접 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

λΈ”λ‘œκ·Έ μ‚¬μ΄νŠΈμ—μ„œ λ°œμƒν•˜λŠ” μ΅œμ ν™” μ„±λŠ₯의 문제점 νŒŒμ•…
λΈ”λ‘œκ·Έ μ„±λŠ₯에 λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” μ½”λ“œλ₯Ό 확인

1. 동적 μ½˜ν…μΈ μ˜ 높이 λΆˆν™•μ‹€μ„±

  • μ½˜ν…μΈ κ°€ λ‚˜μ€‘μ— μΆ”κ°€λ˜λŠ” ꡬ쑰일 경우, 초기 λ Œλ”λ§ μ‹œ 곡간이 미리 ν™•λ³΄λ˜μ§€ μ•Šμ•„ μ£Όλ³€ μš”μ†Œλ₯Ό λ°€μ–΄λƒ…λ‹ˆλ‹€.
  • λŒ€ν‘œ 사둀: λŒ“κΈ€ μ˜μ—­, ν›„κΈ° μœ„μ ―, μΆ”μ²œ 포슀트 λ“± 슀크립트둜 μ‚½μž…λ˜λŠ” μ˜μ—­

2. μ§€μ—° λ‘œλ”©λœ 이미지, κ΄‘κ³ , iframe λ“±

  • Lazy loading λ˜λŠ” JS μ‚½μž… κ΄‘κ³ λŠ” μ²˜μŒμ—” 곡간을 μ°¨μ§€ν•˜μ§€ μ•Šλ‹€κ°€, λ‚˜μ€‘μ— λ“±μž₯ν•˜λ©° λ ˆμ΄μ•„μ›ƒμ„ μ΄λ™μ‹œν‚΄
  • λ°˜μ‘ν˜• κ΅¬μ‘°μ—μ„œλŠ” 더 큰 λ ˆμ΄μ•„μ›ƒ λΆ•κ΄΄ μœ„ν—˜ 쑴재
  • μ˜ˆμ‹œ: Google AdSense κ΄‘κ³ , YouTube iframe μ‚½μž… λ“±

3. !important의 λΆ€μž‘μš©

  • κ°•μ œ μŠ€νƒ€μΌ 적용으둜 인해 μ˜λ„ν•˜μ§€ μ•Šμ€ 높이 좩돌이 λ°œμƒ
  • 특히 Flexλ‚˜ Grid μ»¨ν…Œμ΄λ„ˆ μ•ˆμ—μ„œ μžμ‹ μš”μ†Œμ˜ λΉ„μœ¨·ν¬κΈ° 예츑이 μ–΄λ €μ›Œμ§€λ©° 이동 κ°€λŠ₯μ„± 증가

4. κ³ μ •λ˜μ§€ μ•Šμ€ λΉ„μœ¨/aspect-ratio μ„€μ • λˆ„λ½

  • μ΄λ―Έμ§€λ‚˜ λΉ„λ””μ˜€, 썸넀일 등이 λΉ„μœ¨ 없이 μ‚½μž…λ  경우, λ‘œλ”© ν›„ μ‹€μ œ 크기둜 ν™•μž₯되며 μ£Όλ³€ ꡬ쑰λ₯Ό 밀어냄

5. 폰트, μ›Ή 폰트 μ§€μ—° λ‘œλ”©

  • FOUT(Flash of Unstyled Text) ν˜„μƒ λ°œμƒ μ‹œ, 초기 λ Œλ”λ§ ν›„ ν…μŠ€νŠΈ 크기 λ³€ν™”λ‘œ μΈν•œ 이동 λ°œμƒ

6. λΈŒλΌμš°μ €/λ Œλ”λ§ μ΅œμ ν™” 미흑

  • CSS contain, min-height, aspect-ratio 속성 등이 λˆ„λ½λœ 경우 λΈŒλΌμš°μ €κ°€ λ ˆμ΄μ•„μ›ƒ μ•ˆμ •μ„±μ„ ν™•λ³΄ν•˜μ§€ λͺ»ν•¨

λΈ”λ‘œκ·Έ μ΅œμ ν™” CLS 문제 ν•΄κ²° 방법

μ›Ή νŽ˜μ΄μ§€μ—μ„œ λ°œμƒν•˜λŠ” CLS(Cumulative Layout Shift, λˆ„μ  λ ˆμ΄μ•„μ›ƒ 이동) λ¬Έμ œλŠ” λŒ€λΆ€λΆ„ 동적 μ½˜ν…μΈ μ˜ 높이 λΆˆν™•μ‹€μ„±μ΄λ‚˜ μ§€μ—° λ‘œλ”©λœ 이미지·κ΄‘κ³ ·μ»΄ν¬λ„ŒνŠΈλ‘œ 인해 λ°œμƒν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ¬Έμ œλŠ” νŽ˜μ΄μ§€ μ„±λŠ₯ μ €ν•˜λ‘œ 이어지고, SEO μ μˆ˜μ—λ„ μ•…μ˜ν–₯을 미치게 λ©λ‹ˆλ‹€.
λ‹€μŒμ€ μ‹€μ œ λΈ”λ‘œκ·Έλ‚˜ μ›Ήμ‚¬μ΄νŠΈμ—μ„œ μ μš©ν•  수 μžˆλŠ” 4κ°€μ§€ μ‹€μ „ ν•΄κ²° λ°©λ²•μž…λ‹ˆλ‹€.

λΈ”λ‘œκ·Έ μ„±λŠ₯ μ§€ν‘œκ°€ 정상적 μˆ˜μ •λ¬λŠ”μ§€ 확인
문제λ₯Ό μˆ˜μ •ν•œ λ’€μ—λŠ”, λ³€κ²½λœ νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ ν•œ 번 ν…ŒμŠ€νŠΈν•˜μ—¬ CLSλ₯Ό ν¬ν•¨ν•œ μ„±λŠ₯ μ§€ν‘œκ°€ μ •μƒμ μœΌλ‘œ κ°œμ„ λ˜μ—ˆλŠ”μ§€ 확인.

1. μ΅œμ†Œ 높이 확보 (κ°„λ‹¨ν•œ ν•΄κ²°μ±…)

κ°€μž₯ 기본적인 방식은 min-height 속성을 ν™œμš©ν•˜μ—¬ 동적 μ½˜ν…μΈ κ°€ λ‘œλ”©λ˜κΈ° 전에 μ˜ˆμƒ 곡간을 미리 ν™•λ³΄ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ½˜ν…μΈ κ°€ λ‚˜νƒ€λ‚  λ•Œ μ£Όλ³€ μš”μ†Œκ°€ λ°€λ¦¬λŠ” ν˜„μƒμ„ λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. height: auto와 ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄ λ°˜μ‘ν˜• ꡬ쑰에도 μœ μ—°ν•˜κ²Œ λŒ€μ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

.동적-μ˜μ—­ {
    height: auto !important;
    min-height: 200px !important;
}

2. CSS Containment μ‚¬μš© (μ„±λŠ₯ ν–₯상 + μ•ˆμ •μ„±)

CSS의 contain 속성을 μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή μ˜μ—­μ„ λΈŒλΌμš°μ €μ— 독립적인 λ Œλ”λ§ λ‹¨μœ„λ‘œ μΈμ‹μ‹œμΌœ, λ‚΄λΆ€ μ½˜ν…μΈ  λ³€ν™”κ°€ μ£Όλ³€ λ ˆμ΄μ•„μ›ƒμ— λ―ΈμΉ˜λŠ” 영ν–₯을 μ΅œμ†Œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 특히 동적 λ°μ΄ν„°λ‚˜ μŠ€ν¬λ¦½νŠΈκ°€ 자주 λ³€κ²½λ˜λŠ” μ˜μ—­μ—μ„œ μœ μš©ν•©λ‹ˆλ‹€.

.동적-μ˜μ—­ {
    contain: layout paint style;
    height: auto;
    min-height: 0;
}
  • 효과: 이 μ˜μ—­μ€ 독립적이라고 λΈŒλΌμš°μ €μ— μ•Œλ €μ€Œ
  • κ²°κ³Ό: λ‚΄λΆ€ λ³€ν™”κ°€ μ£Όλ³€ λ ˆμ΄μ•„μ›ƒμ— 영ν–₯을 덜 λ―ΈμΉ¨

3. μŠ€μΌˆλ ˆν†€ UI 적용 (UX κ°œμ„ )

λ‘œλ”© μ‹œκ°„μ΄ κ±Έλ¦¬λŠ” μ½˜ν…μΈ κ°€ μžˆλ‹€λ©΄, μŠ€μΌˆλ ˆν†€(Skeleton) UIλ₯Ό λ¨Όμ € λ³΄μ—¬μ£ΌλŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©μžμ˜ μ‹œκ°μ  ν˜Όλž€μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. 초기 곡간 확보와 ν•¨κ»˜ μ˜ˆμƒ λ ˆμ΄μ•„μ›ƒμ„ 미리 λ³΄μ—¬μ€ŒμœΌλ‘œμ¨ 체감 CLSλ₯Ό μ€„μ΄λŠ” νš¨κ³Όλ„ λ›°μ–΄λ‚©λ‹ˆλ‹€.

<div class="동적-μ˜μ—­">
    <!-- λ‘œλ”© 쀑 -->
    <div class="skeleton" style="height: 200px; background: #eee;"></div>
    <!-- μ‹€μ œ μ½˜ν…μΈ  -->
</div>
  • μž₯점: μ‚¬μš©μžμ—κ²Œ μ˜ˆμƒ 곡간을 λ¨Όμ € 보여주어 μ‹œκ°μ  μ•ˆμ •κ° 제곡
  • μ²΄κ°λ˜λŠ” CLS ν˜„μƒμ„ 크게 μ€„μ—¬μ€Œ

4. JavaScript둜 높이 미리 μ„€μ • (κ³ κΈ‰ 기법)

JSλ₯Ό μ‚¬μš©ν•˜λ©΄ μ½˜ν…μΈ  λ‘œλ“œ 이전에 **μž„μ‹œ 높이(minHeight)**λ₯Ό μ„€μ •ν•˜μ—¬ λ ˆμ΄μ•„μ›ƒ 이동을 λ°©μ§€ν•˜κ³ , μ½˜ν…μΈ  λ‘œλ”© ν›„μ—λŠ” μžμ—°μŠ€λŸ½κ²Œ minHeightλ₯Ό ν•΄μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 동적 μ½˜ν…μΈ κ°€ μ–Έμ œ λ‘œλ“œλ˜λŠ”μ§€ μ •ν™•νžˆ μ•Œ 수 μžˆμ„ λ•Œ μœ μš©ν•œ κΈ°λ²•μž…λ‹ˆλ‹€.

const dynamicElement = document.querySelector('.동적-μ˜μ—­');
dynamicElement.style.minHeight = '200px';

setTimeout(() => {
    dynamicElement.style.minHeight = 'auto';
}, 10);
  • μ½˜ν…μΈ  λ‘œλ“œ μ „ μž„μ‹œ 곡간 확보 μžμ—°μŠ€λŸ¬μš΄ μ „ν™˜
  • μ‹€μ œ λ‘œλ”© μ™„λ£Œ ν›„ minHeightλ₯Ό μ œκ±°ν•΄ λ ˆμ΄μ•„μ›ƒ 정리

CLS μ‹€μ‹œκ°„ μΈ‘μ • μ½”λ“œ

개발자라면 직접 μ½”λ“œλ₯Ό 톡해 CLS λ°œμƒ μ—¬λΆ€λ₯Ό 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€:

λΈ”λ‘œκ·Έ μ΅œμ ν™”λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ μΈ‘μ •ν•˜κ³  λŒ€λ“±ν•˜κΈ°
λͺ¨λ“  μˆ˜μ • μž‘μ—…μ΄ λλ‚˜λ©΄, 메인 νŽ˜μ΄μ§€, λͺ©λ‘ νŽ˜μ΄μ§€, κΈ€ νŽ˜μ΄μ§€ 각각을 λͺ¨λ‘ 꼼꼼히 μ κ²€ν•©λ‹ˆλ‹€.
  • μ½˜μ†”μ—μ„œ μ–΄λ–€ μš”μ†Œκ°€ μ΄λ™ν–ˆλŠ”μ§€ μ‹€μ‹œκ°„ 확인 κ°€λŠ₯
  • 디버깅 및 μ„±λŠ₯ κ°œμ„ μ— 맀우 유용

μ΅œμ’… 정리 및 ꢌμž₯ μ „λž΅

μ „λž΅ μ„€λͺ…
min-height μ„€μ • 예츑 κ°€λŠ₯ν•œ 곡간 확보
contain 속성 μ‚¬μš© λ ˆμ΄μ•„μ›ƒ κ°„μ„­ 차단
aspect-ratio ν™œμš© 이미지/κ΄‘κ³ μ˜ λΉ„μœ¨ κ³ μ •
μŠ€μΌˆλ ˆν†€ UI λ„μž… μ‚¬μš©μž 체감 μ•ˆμ •κ° 증가
JS 사전 높이 계산 μ •κ΅ν•œ λ ˆμ΄μ•„μ›ƒ 컨트둀 κ°€λŠ₯

CLSλŠ” "예츑 κ°€λŠ₯ν•œ 곡간 확보"κ°€ ν•΅μ‹¬μž…λ‹ˆλ‹€

  • 아무리 ν™”λ €ν•œ λΈ”λ‘œκ·Έ λ””μžμΈμ΄λΌλ„, μ½˜ν…μΈ κ°€ λ°€λ¦¬λŠ” ν˜„μƒμ΄ μžˆλ‹€λ©΄ μ‚¬μš©μž κ²½ν—˜μ€ λ§κ°€μ§‘λ‹ˆλ‹€.
  • κ°€μž₯ κ°„λ‹¨ν•œ μ‹œμž‘μ€ .동적-μ˜μ—­μ— min-heightλ₯Ό λΆ€μ—¬ν•˜λŠ” κ²ƒλΆ€ν„°μž…λ‹ˆλ‹€.
  • !importantλŠ” λ§ˆμ§€λ§‰ μˆ˜λ‹¨μœΌλ‘œλ§Œ μ‚¬μš©ν•˜κ³ , κ°€λŠ₯ν•œ ν•œ CSS ꡬ쑰 자체λ₯Ό μž¬μ„€κ³„ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

CLS(λˆ„μ  λ ˆμ΄μ•„μ›ƒ 이동) 핡심 Q&A 3κ°€μ§€

Q1. CLSλž€ 무엇이며 μ™œ μ€‘μš”ν•œκ°€μš”?
A1. CLSλŠ” νŽ˜μ΄μ§€ λ‚΄ μ‹œκ°μ  μš”μ†Œκ°€ 예기치 μ•Šκ²Œ μ›€μ§μ΄λŠ” ν˜„μƒμ„ μΈ‘μ •ν•˜λŠ” μ›Ή μ„±λŠ₯ μ§€ν‘œλ‘œ, μ‚¬μš©μž κ²½ν—˜κ³Ό SEO에 큰 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€.

Q2. ν‹°μŠ€ν† λ¦¬ λΈ”λ‘œκ·Έμ—μ„œ CLS λ¬Έμ œκ°€ 자주 λ°œμƒν•˜λŠ” μ΄μœ λŠ”?
A2. 자유둜운 μŠ€ν‚¨ μˆ˜μ • κΈ°λŠ₯ λ•Œλ¬Έμ— 동적 μ½˜ν…μΈ  높이 λΆˆν™•μ‹€μ„±, μ§€μ—° λ‘œλ”© μš”μ†Œ, CSS 좩돌 등이 λ°œμƒν•΄ CLSκ°€ λ†’μ•„μ§€λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€.

Q3. CLS 문제λ₯Ό 효과적으둜 ν•΄κ²°ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ‚˜μš”?
A3. μ΅œμ†Œ 높이 μ§€μ •, CSS contain 속성 ν™œμš©, μŠ€μΌˆλ ˆν†€ UI 적용, JavaScript둜 높이 사전 μ„€μ • λ“±μœΌλ‘œ 곡간을 미리 확보해 λ ˆμ΄μ•„μ›ƒ 이동을 μ€„μ΄λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.


μ°Έκ³  κΈ€ μΆ”μ²œ