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.
Native
view encapsulation uses a now deprecated version of the browser's native shadow DOM implementation - learn about the changes.
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:
// warning: few browsers support shadow DOM encapsulation at this time encapsulation: ViewEncapsulation.Native
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.
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:
_nghost
attribute. This is typically the case for component host elements._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:
[_nghost-pmm-5] { display: block; border: 1px solid black; } 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.
© 2010–2020 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v10.angular.io/guide/view-encapsulation