微前端中实现样式隔离

本文探讨了微前端中常见的样式隔离方法,包括Shadow DOM、CSS In JS、Scoped CSS和CSS Modules,并详细介绍了qiankun提供的strictStyleIsolation和experimentalStyleIsolation两种隔离模式,以及它们在处理element-plus等组件时遇到的问题和解决方案。总结了在样式隔离中应注意的规则,以避免样式全局污染。
摘要由CSDN通过智能技术生成

目录

1. 常见隔离方式

1.1 Shadow DOM

1.2 CSS In JS

1.3 Scoped CSS

1.4 CSS Modules

2. qiankun 提供的隔离方式

2.1 strictStyleIsolation 严格模式

2.2 experimentalStyleIsolation 实验性

2.3 使用 qiankun 样式隔离方案的问题

2.3.1 未进行隔离时

2.3.2 开启严格模式的隔离时

2.3.3 开启实验性模式的隔离时

2.3.4 说明

2.4 使用 qiankun 样式隔离方案的问题的具体表现

2.4.1 element-plus 字体图标异常

2.4.2 element-plus 组件挂载到 body 上时样式丢失

2.4.3 相同代码,是否开启隔离的效果不同

2.5 总结


1. 常见隔离方式

1.1 Shadow DOM

使用 shadow DOM - Web Components | MDNicon-default.png?t=M4ADhttps://developer.mozilla.org/zh-CN/docs/Web/Web_Components/Using_shadow_DOMShadow DOM 允许将隐藏的 DOM 树附加到常规的 DOM 树中

  • 它以 shadow root 节点为起始根节点,在这个根节点的下方,可以是任意元素,和普通的 DOM 元素一样
  • Shadow DOM 内部的元素,始终不会影响到它外部的元素

qiankun 实现样式隔离的原理,就是基于 Shadow DOM

null原文地址距 qiankun 开源已过去了 11 个月,...https://www.yuque.com/kuitos/gky7yw/viueoh#12833e35qiankun 隔离效果如图所示:

1.2 CSS In JS

顾名思义,这种方案使用 js 写 css,完全不需要些单独的 css 文件(所有的 css 代码全部放在组件内部,以实现 css 的模块化)

缺点:违背 js、css 分离的原则

举个栗子:

import React from "react";
import styled from "styled-components";

// 创建一个带样式的 h1 标签
const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
`;

// 创建一个带样式的 section 标签
const Wrapper = styled.section`
  background: papayawhip;
`;

// 通过属性动态定义样式
const Button = styled.button`
  background: ${props => (props.primary ? "palevioletred" : "white")};
  color: ${props => (props.primary ? "white" : "palevioletred")};
  border: 2px solid palevioletred;
`;

// 样式复用
const TomatoButton = styled(Button)`
  color: tomato;
  border-color: tomato;
`;

<Wrapper>
  <Title>Hello World, this is my first styled component!</Title>
  <TomatoButton primary>Primary</TomatoButton>
</Wrapper>;

1.3 Scoped CSS

Scoped CSS | Vue Loader处理 Vue 单文件组件的 Webpack loadericon-default.png?t=M4ADhttps:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyrelion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值