问题标签 [angular2viewencapsulation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1600 浏览

javascript - ShadowDOM 与文档片段——它们有何不同?

查看有关 ShadowDOM 的文章,它似乎是对 DocumentFragments 的增强。ShadowDOM 的真正好处是什么?CSS 特异性?我不能用 Fragments 做大致相同的事情吗?

我正在寻找每个功能的列表。例如,两者似乎都允许您在内存中和主渲染路径之外组装 dom 树。然而,ShadowDOM 似乎具有作用域 CSS 的额外好处。

在哪些情况下您会使用 ShadowDOM,而您只想使用 DocumentFragments?

更新

在我自己对此进行了更多研究之后,我发现这两种技术是完全正交的。

注意:由于问题已关闭,我无法自己回答。我最初将我的发现的细节放在下面的评论中,但我想更多的人会在这里查看文本。

Document Fragments是一个 Javascript/DOM 构建工具,用于在 DOM 之外创建非分层的节点集合(每个节点都可以是其他节点的父节点)。它们本质上是节点集合的包装器,一旦将片段附加到 DOM,它就会被放弃。DocumentFragments 允许您在同一级别收集多个节点,并将它们作为兄弟节点附加到另一个 DOM 节点。

Shadow Dom就是在更大的渲染 DOM 中隔离副作用。ShadowDom 允许您创建具有封装样式的沙盒可重用组件。当基于 ShadowDom 的组件添加到更大的 Web 应用程序时,其 CSS 样式不会泄漏到应用程序的其余部分,应用程序自身的样式也不会影响组件的呈现。

请注意,CSS 组合器(例如/deep/::shadow)用于样式化(和选择)来自父 dom 的 shadowDom 组件,但这些组合器在不久的将来会被弃用。因此,建议使用 ShadowDOM 的可重用组件依赖 CSS 变量进行样式设置,如果它们打算由使用它们的应用程序自定义。

0 投票
1 回答
2220 浏览

angular - 如何覆盖 angular-material2 样式?

我将 Angular2 与Material Design Components一起使用。并且想覆盖一些样式,但是由于ViewEncapsulation,它看起来不可能。

是否可以关闭第 3 方组件的ViewEncapsulation (ViewEncapsulation.None)?

0 投票
2 回答
555 浏览

css - 如何在模拟视图封装(CSS / Angular2)中获取全局选择器

我有一个 Home 组件,里面有这个:

在我的 home.style.scss 中,我有这个:

这应该将背景颜色更改为绿色,但事实并非如此。

上面的 css 代码将产生这种风格:

最终的 HTML 如下所示:

我不知道这里有什么问题,但我认为选择器是错误的。我希望最终的选择器是:

代替:

或者换句话说,为什么没有 _ngcontent-wjn-3 属性<div class="alert">...</div>

也许我做错了整个事情。我想要实现的是自定义我内部<alert>的 ng2-bootrap 库(https://github.com/valor-software/ng2-bootstrap)提供的各个引导组件(在上面的代码中)的 CSS自定义组件(<home>在上面的代码中)。

我在 home 组件中使用默认视图封装(模拟)。

请问我该怎么做?

0 投票
0 回答
117 浏览

angular - 使用 Stylus/WebStorm 对来自外部世界的阴影元素进行样式设置

在 Angular 2 中,我试图从其容器的样式表中设置组件实例的样式

很显然,我已经ViewEncapsulation.None入驻了my-component.ts

我的容器样式

基本上我很困惑,禁用 ViewEncapsulation 后,选择器仍然需要/deep/跨度来获取红色样式。除此之外,我有点不确定我应该使用哪种类型的选择器,/deep/并且::shadow据说已被弃用。战场上剩下的,似乎只有三重>合体了>>>

反过来,手写笔或 WebStorm 似乎都不支持/理解这一点。结果是重新格式化代码完全破坏了样式代码。

除了我正在使用的方法之外,还有其他方法可以为我的 span 元素编码 css/styl 选择器吗?

编辑

在尝试研究未来的计划时,我查看了规范草案- 就在第 3.2.6 节之前,它说:

对于外部文档中的样式表,选择器 x-foo >>> span 选择所有三个元素:#top、#not-top 和 #nested。

但随后它指出:

穿透阴影的后代组合器是选择器的静态配置文件的一部分,而不是动态配置文件的一部分。这意味着它可以在例如 querySelector() 方法中使用,但在 stylesheets 中使用时无效

我不明白。

0 投票
0 回答
589 浏览

angular - 如何将外部 CSS 应用于我的角度组件中的外部组件或仅将外部 CSS 应用于嵌套的外部组件

我是初学者,这里使用的术语可能没有正确应用。

我的应用程序包含三个组件。来自Project Clarity的一个外部组件clr-datagrid

在搜索结果组件中,

问题是,

当我使用 ViewEncapsulation。Emulated、clearance- icons.min.css '、clearance-ui.min.css 不适用于嵌套组件/自定义元素。

当我使用 ViewEncapsulation。Native , 它只在 Chrome 和 Opera 浏览器中正常工作。但不在 IE/Firefox/Safari 中。

当我使用 ViewEncapsulation。None,工作正常,但 CSS 溢出并影响 searhform cmp 样式。

我从在线阅读中了解到,问题出在 Shadow DOM 上,只有 Chrome 支持 Shadow DOM,其他不支持。我尝试使用webcomponents polyfill

<script src="../../../node_modules/webcomponents.js/webcomponents-hi-sd-ce.js"></script>在 index.html 中(可能不是正确的方法)。

任何人都可以帮助我如何将清晰的 css 和图标仅应用于组件,并且不会影响应用程序的其他部分?

0 投票
1 回答
1150 浏览

css - 如何在 angular2/4 中禁用第三方组件中的视图封装?

我想覆盖我正在使用的开源组件的样式,但我能找到禁用视图封装的唯一方法是在组件的装饰器上。当然,使用第三方模块意味着我无法编辑它的源代码。还能怎么做?

编辑

我知道 /deep/ 样式建议。我想要做的是使用 bootstrap 4 中的样式覆盖第三方组件中的表格样式。自定义组件应用了一个 .table 类,但是通过视图封装,boostrap 4 类无法访问它。

我只想知道是否有一种方法可以完全禁用视图封装,而无需分叉代码并添加组件装饰器属性值“封装:ViewEncapsulation.None”供我自己使用。

0 投票
1 回答
72 浏览

javascript - 在 Angular2 中设置背景,封装设置为无

我正在尝试通过以下方式将图像设置为整个页面的背景:

app.component.html

app.component.ts(注意:封装设置为无)

app.component.css

问题是,当使用 [ngStyle] 时,图像仅覆盖页面的标题部分。

如果不是 ngStyle,我直接选择正文,例如:

图像覆盖了整个页面,这是我想要发生的。但是有人告诉我直接选择身体是不好的做法。

如何让 [ngStyle] (或其他任何东西)创建覆盖整个页面的背景图像?

谢谢

0 投票
1 回答
453 浏览

angular - ViewEncapsulation 在设置 highcharts 样式时产生问题

我在一个视图中使用了几个图表,每个图表都是它自己的组件。我有一个 LineChartComponent 和一个 XRangeChartComponent。我正在使用带有 XRangeChartComponent 的样式文件并覆盖一些类。但是这些样式没有在图表中应用。

经过检查,我发现样式文件被angular修改为附加一个类以符合shadow DOM。所以,我在 XRangeChartComponent 中使用了封装:ViewEncapsulation.None。现在样式也被应用于 LineChartComponent。

我该如何进行?

我附上的演示有 2 个折线图,但它重现了我的问题。

https://stackblitz.com/edit/angular-highcharts-styling

0 投票
0 回答
249 浏览

css - 角度模拟视图封装中的 CSS 样式

由于我的角度组件中 VIEWENCAPSULATION.NONE 的样式问题,我切换到 .EMULATED

现在,我无法进行最简单的 CSS 更改。

保存在组件 css 文件中的样式,而不是全局 css 文件中。

例如,在 mat-tab 元素中,我想让字体加粗。在 chrome 的 devtools 中即时执行此操作,效果很好。这也适用于之前没有视图封装的情况。

现在没有了。像这样的简单变化让我难以捉摸......

这是我的 html 和以前工作的 css(没有封装)。

我已经尝试了以下所有方法,没有任何效果。有人可以指出正确的方法吗?谢谢!

0 投票
1 回答
759 浏览

css - 仅在 Angular 5 中将 CSS 范围限定为模块,以防止渗入应用程序的其他部分

如何将 CSS 范围仅限于 Angular 中的一个模块?当我懒惰地加载一个模块并在该模块中有 ViewEncapsulation.None 时,CSS 会渗入我的应用程序的其他部分。知道如何防止这种情况,或者仅在 Angular 5 中为该模块保留该 CSS 吗?