3.4 KiB
View encapsulation
In Angular, component CSS styles are encapsulated into the component's view and don't affect the rest of the application.
To control how this encapsulation happens on a per component basis, you can set the view encapsulation mode in the component metadata. Choose from the following modes:
-
ShadowDom
view encapsulation uses the browser's native shadow DOM implementation (see Shadow DOM on the MDN site) to attach a shadow DOM to the component's host element, and then puts the component view inside that shadow DOM. The component's styles are included within the shadow DOM. -
Emulated
view encapsulation (the default) emulates the behavior of shadow DOM by preprocessing (and renaming) the CSS code to effectively scope the CSS to the component's view. For details, see Inspecting generated CSS below. -
None
means that Angular does no view encapsulation. Angular adds the CSS to the global styles. The scoping rules, isolations, and protections discussed earlier don't apply. This is essentially the same as pasting the component's styles into the HTML.
To set the components encapsulation mode, use the encapsulation
property in the component metadata:
ShadowDom
view encapsulation only works on browsers that have native support
for shadow DOM (see Shadow DOM v1 on the
Can I use site). The support is still limited,
which is why Emulated
view encapsulation is the default mode and recommended
in most cases.
{@a inspect-generated-css}
Inspecting generated CSS
When using emulated view encapsulation, Angular preprocesses all component styles so that they approximate the standard shadow CSS scoping rules.
In the DOM of a running Angular application with emulated view encapsulation enabled, each DOM element has some extra attributes attached to it:
<hero-details _nghost-pmm-5> <h2 _ngcontent-pmm-5>Mister Fantastic</h2> <hero-team _ngcontent-pmm-5 _nghost-pmm-6> <h3 _ngcontent-pmm-6>Team</h3> </hero-team> </hero-detail>There are two kinds of generated attributes:
- An element that would be a shadow DOM host in native encapsulation has a
generated
_nghost
attribute. This is typically the case for component host elements. - An element within a component's view has a
_ngcontent
attribute that identifies to which host's emulated shadow DOM this element belongs.
The exact values of these attributes aren't important. They are automatically
generated and you never refer to them in application code. But they are targeted
by the generated component styles, which are in the <head>
section of the DOM:
h3[_ngcontent-pmm-6] { background-color: white; border: 1px solid #777; }
These styles are post-processed so that each selector is augmented
with _nghost
or _ngcontent
attribute selectors.
These extra selectors enable the scoping rules described in this page.