Angular View Encapsulation: Types and Internal Workings
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

앙귤러 뷰 엔케이펄레이션 이해: 타입과 내부 작동 방식

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

프론트엔드 개발자, 특히 앙귤러 애플리케이션에서 스타일 유출 문제를 해결하는 개발자

난이도: 중급 (앙귤러 기초 지식 필요)

핵심 요약

  • 뷰 엔케이펄레이션@angular/coreViewEncapsulation enum을 통해 Emulated, ShadowDom, None 세 가지 전략 제공
  • Emulated(기본)는 런타임 시 CSS를 사전 처리하여 _ngcontent- 속성 선택자로 스타일 범위 제한 (Shadow DOM 사용 X)
  • ShadowDom은 브라우저의 네이티브 Shadow DOM API 활용 (스타일 격리 O, Shadow DOM 사용 O)
  • None은 전역 스타일 적용 (스타일 격리 X, 개발자 주의 필요)

섹션별 세부 요약

1. 뷰 엔케이펄레이션 개요

  • 스타일 유출 문제: 컴포넌트 내 스타일이 다른 컴포넌트에 영향을 주는 현상
  • 뷰 엔케이펄레이션의 역할: 컴포넌트 스타일의 범위를 제한하여 격리
  • 기본 전략: Emulated (대부분의 프로젝트에서 사용)

2. 엔케이펄레이션 전략 세부 사항

  • Emulated:

- _nghost-c0 (호스트 요소), _ngcontent-c0 (자식 요소) 속성 추가

- CSS 선택자에 _ngcontent-c0 속성 추가 (예: .box[_ngcontent-c0])

- Shadow DOM 사용 없이 스타일 격리 가능

  • ShadowDom:

- 브라우저 네이티브 Shadow DOM API 사용

- _ngcontent-c0 속성 선택자 필요 없음

- 모든 브라우저가 Shadow DOM 기능 지원 X

  • None:

- 스타일 전역 적용 (예: 글로벌 테마, 외부 콘텐츠 스타일링 시 유용)

- 대규모 프로젝트에서 충돌 위험 높음

3. Emulated 전략의 내부 작동 방식

  • 컴포넌트 고유 속성 생성: 컴파일 시 app-root_nghost-c0 (호스트), _ngcontent-c0 (자식)
  • CSS 선택자 재작성: .box.box[_ngcontent-c0]
  • 스타일 격리: _ngcontent- ID가 다른 컴포넌트 스타일은 적용 X

4. ShadowDom 전략의 특징

  • 브라우저 네이티브 Shadow DOM 사용
  • 스타일 격리: 자동으로 적용 (Shadow DOM 내부에서만 작용)
  • 제한사항: 글로벌 스타일 (폰트, 테마)이 Shadow DOM 내부로 투영되지 않을 수 있음

5. None 전략의 사용 시나리오

  • 글로벌 스타일 적용: 외부 라이브러리, 글로벌 테마 정의
  • 위험 요소: 대규모 프로젝트에서 스타일 충돌 발생 가능

결론

  • Emulated 전략이 대부분의 프로젝트에 적합 (Compatibility & style isolation 균형)
  • ShadowDom은 브라우저 지원이 충분한 경우에만 사용 (True encapsulation 가능)
  • None은 주의 깊게 사용해야 하며, 외부 콘텐츠 스타일링 시 유용
  • Angular의 내부 스타일 처리 방식 이해 → 스타일 유출 문제 예방 가능