micro-app icon indicating copy to clipboard operation
micro-app copied to clipboard

开启样式隔离后,是否可以在主应用中配置忽略子应用样式文件中的某些 className?

Open bjj-elestyle opened this issue 1 year ago • 2 comments

场景

主应用中会检查浏览器宽度,将不同宽度定义成2个 css class: mobile tablet, 并将这个 class 放在 body 上。 子应用中通过写添加 .mobile 前缀来为移动端写样式。

问题

但是开启样式隔离后,该方法会失效 子应用样式

.card {
  width: 300px;
}
.mobile .card {
  width: 100%;
}

Output

micro-app[name=xxx] .card {
  width: 300px;
}
micro-app[name=xxx] .mobile .card {
  width: 100%;
}

版本[1.0.0-rc.3]之前,仅会给子应用的组件中明确 scoped 的样式添加 micro-app[name=xxx],如果是子应用的全局样式不会添加 micro-app[name=xxx] 前缀,所以还是可以工作的。 版本[1.0.0-rc.4] 之后,子应用中的所有样式都会被添加 micro-app[name=xxx] 前缀,导致完全无法工作了

目前的解决方案

通过官方文档中了解到,可以使用注释的方式来突破隔离,但是效果并不理想

.card {
  width: 300px;
}
/*! scopecss-disable */
.mobile .card {
  width: 100%;
}
/*! scopecss-enable */

Output

micro-app[name=xxx] .card {
  width: 300px;
}
.mobile .card {
  width: 100%;
}

此时 .mobile .card 依然可以影响到主应用,并且这种依赖注释的方式在开发过程中非常麻烦

需求

希望可以在主应用中配置一些 className,让子应用在做样式隔离时忽略这些 class,期望效果如下: 配置子应用忽略 .mobile

.card {
  width: 300px;
}
.mobile .card {
  width: 100%;
}

Output

micro-app[name=xxx] .card {
  width: 300px;
}
.mobile micro-app[name=xxx] .card {
  width: 100%;
}

bjj-elestyle avatar Feb 02 '24 03:02 bjj-elestyle

升级1.0.0-rc.4的问题可以举例描述一下吗

bailicangdu avatar Feb 02 '24 07:02 bailicangdu

升级1.0.0-rc.4的问题可以举例描述一下吗

升级后还没有遇到其他问题,样式隔离貌似是修复了 1.0.0-rc.3 覆盖不到 import 进来的全局样式的问题,根据文档说明,全部样式都被隔离应该是预期行为才对。 现在只是需要一个通过主应用配置,来让所有子应用中的某些class突破隔离的功能

bjj-elestyle avatar Feb 05 '24 01:02 bjj-elestyle