umijs / qiankun

📦 🚀 Blazing fast, simple and complete solution for micro frontends.
https://qiankun.umijs.org
MIT License
15.79k stars 2.01k forks source link

主应用标签样式影响微应用标签样式,如何解决? #1318

Open Erochica opened 3 years ago

Erochica commented 3 years ago

主应用 和 微应用 使用不同的组件库,拥有不同的 reset 样式。 例如主应用中 reset.css 中有样式设置: h1 { font-size: 3rem; }

微应用中 reset.css 中有样式设置: h1 { color: #333; }

微应用中所有 h1 标签都会继承 主应用 的样式,最终微应用中 h1 样式为: { color: #333; font-size: 3rem }

由于不是 class,不能通过前缀来隔离。

请问这种样式问题如何解决?

poorli commented 3 years ago

可以看下文档的 API 和常见问题,有介绍样式隔离方案。 https://qiankun.umijs.org/zh/api https://qiankun.umijs.org/zh/faq

image

Erochica commented 3 years ago

可以看下文档的 API 和常见问题,有介绍样式隔离方案。 https://qiankun.umijs.org/zh/api https://qiankun.umijs.org/zh/faq

image

你好,我采用了官方文档的样式隔离方案,对有类名的样式进行了隔离。 但是,我这边的问题是:由于微应用被主应用包裹,所以主应用中的 标签样式(如: h1 {}、p {},不是类名样式 .class {})都会作用到 微应用 上。

例如主应用中: h1 { font-size: 3rem; }

微应用中: h1 { color: #333; }

微应用中所有 h1 标签都会继承 主应用 的样式,最终微应用中 h1 样式为: { color: #333; font-size: 3rem }

由于无法确定微应用可能从主应用继承到什么奇奇怪怪的样式,所以也无法通过覆写来保全微应用样式。 请问这种该如何处理?

poorli commented 3 years ago

可以看下文档的 API 和常见问题,有介绍样式隔离方案。 https://qiankun.umijs.org/zh/api https://qiankun.umijs.org/zh/faq image

你好,我采用了官方文档的样式隔离方案,对有类名的样式进行了隔离。 但是,我这边的问题是:由于微应用被主应用包裹,所以主应用中的 标签样式(如: h1 {}、p {},不是类名样式 .class {})都会作用到 微应用 上。

例如主应用中: h1 { font-size: 3rem; }

微应用中: h1 { color: #333; }

微应用中所有 h1 标签都会继承 主应用 的样式,最终微应用中 h1 样式为: { color: #333; font-size: 3rem }

由于无法确定微应用可能从主应用继承到什么奇奇怪怪的样式,所以也无法通过覆写来保全微应用样式。 请问这种该如何处理?

嗯嗯,你没有用 strictStyleIsolation 模式呢?shawdom dom 的话,应该就不会被影响了。

Erochica commented 3 years ago

可以看下文档的 API 和常见问题,有介绍样式隔离方案。 https://qiankun.umijs.org/zh/api https://qiankun.umijs.org/zh/faq image

你好,我采用了官方文档的样式隔离方案,对有类名的样式进行了隔离。 但是,我这边的问题是:由于微应用被主应用包裹,所以主应用中的 标签样式(如: h1 {}、p {},不是类名样式 .class {})都会作用到 微应用 上。 例如主应用中: h1 { font-size: 3rem; } 微应用中: h1 { color: #333; } 微应用中所有 h1 标签都会继承 主应用 的样式,最终微应用中 h1 样式为: { color: #333; font-size: 3rem } 由于无法确定微应用可能从主应用继承到什么奇奇怪怪的样式,所以也无法通过覆写来保全微应用样式。 请问这种该如何处理?

嗯嗯,你没有用 strictStyleIsolation 模式呢?shawdom dom 的话,应该就不会被影响了。

之前使用的就是 strictStyleIsolation: true 模式,在开启 strictStyleIsolation: true 模式后,确实可以完全隔离样式,但是 antd 组件库会出问题,到处都在报错。 所以改为了 experimentalStyleIsolation: true 模式,但是 experimentalStyleIsolation: true 模式不能隔离标签样式。

Erochica commented 3 years ago

可以看下文档的 API 和常见问题,有介绍样式隔离方案。 https://qiankun.umijs.org/zh/api https://qiankun.umijs.org/zh/faq image

你好,我采用了官方文档的样式隔离方案,对有类名的样式进行了隔离。 但是,我这边的问题是:由于微应用被主应用包裹,所以主应用中的 标签样式(如: h1 {}、p {},不是类名样式 .class {})都会作用到 微应用 上。 例如主应用中: h1 { font-size: 3rem; } 微应用中: h1 { color: #333; } 微应用中所有 h1 标签都会继承 主应用 的样式,最终微应用中 h1 样式为: { color: #333; font-size: 3rem } 由于无法确定微应用可能从主应用继承到什么奇奇怪怪的样式,所以也无法通过覆写来保全微应用样式。 请问这种该如何处理?

嗯嗯,你没有用 strictStyleIsolation 模式呢?shawdom dom 的话,应该就不会被影响了。

之前使用的就是 strictStyleIsolation: true 模式,在开启 strictStyleIsolation: true 模式后,确实可以完全隔离样式,但是 antd 组件库会出问题,到处都在报错。 所以改为了 experimentalStyleIsolation: true 模式,但是 experimentalStyleIsolation: true 模式不能隔离标签样式。

gongshun commented 3 years ago

这种问题是没有办法避免的,只能靠规范约束

liuguangyong93 commented 3 years ago

但是对于一些样式库的样式进行重写的话,父应用会影响子应用,正在找寻解决方案

JerryWang24 commented 2 years ago

但是对于一些样式库的样式进行重写的话,父应用会影响子应用,正在找寻解决方案

我也在寻找该方面的解决方案,找到的麻烦share一下。

Dashuai-Black commented 2 years ago

这种问题是没有办法避免的,只能靠规范约束

大佬 这个规范约束 应该怎么搞呢

daigang1228 commented 1 week ago

但是对于一些样式库的样式进行重写的话,父应用会影响子应用,正在找寻解决方案

请问这个怎么解决?