微前端如何做样式隔离(CSS 互不污染)?
几种隔离手段:
- Shadow DOM(最强):把子应用挂到 Shadow Root 内,样式天然不泄漏(但弹窗/全局样式会受限,且部分 UI 库兼容性差)
- 动态样式表 + 作用域前缀:qiankun 默认给子应用所有 CSS 选择器加前缀(如
div[data-qiankun=sub]),运行时切换时增删样式表 - CSS Modules / scoped:子应用内部用局部作用域类名(Vue scoped、CSS Modules),降低冲突概率
- 约定命名空间:团队间用 BEM 风格前缀(如
app-a-*)
实践中 qiankun 的「动态样式表 + 前缀改写」是最常用、兼容性最好的方案;Shadow DOM 隔离最彻底但有局限性。