- Angular Vue React 三大框架
- Angular Vue 内置样式集成
- React 一些业界实践
Angular(1.x):
- 没有样式集成能力
Angular(2+):
- 提供了样式封装能力
- 与组建深度集成
ShadowDOM:
- 逻辑上一个 DOM
- 结构上存在子集结构
Scoped CSS:
- 限制了范围的 CSS
- 无法影响外部元素
- 外部样式一般不影响内部
- 可以通过/deep/或>>>穿透
模拟 Scoped CSS:
- 方案一:随机选择器(不支持)
- 方案二:随机属性
<div abcd>
:host {
}
:host-context{h1} {
}
dev[abcd]{
}
encapsulation 属性的配置
模拟 Scoped CSS:
- 方案一:随机选择器
- css modules
- 方案二:随机属性
<style scoped>
.class_name{
}
</style>
<style module>
.class_name {
}
</style>
:class="$style.class_name"
- 官方没有集成方案
- 社区方案众多
- css modules
- (babel)react-css-modules
- styled components
- styled jsx
npm run eject
<div className="title"> title </div>
css modules:
<div className={style.[title]}> title </div>
{
loader: 'css-loader',
options: {
importLoaders: 1,
modules: true // 打开这个
}
}
styled components:
npm insatll styled-components
const Div = styled.div`
color: red
`
const Div2 = styled(Div)`
color: red,
${() => props.big && `
font-size: 72px;
`}
`
<div>
<Div> title </Div>
</div>