Vue和React的样式穿透 —— 深度选择器
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
一般我们在写组件的时候,为了防止被其他组件内的样式冲突,习惯写一些局部样式,采用modules方案解决组件间的覆盖问题。
但是如果html里有些class是需要根据条件判断来显示的话,在样式编译的时候,编译器会默认该样式不存在,从而直接把样式文件里写的class样式被忽略掉,最后编译出来的样式就会没有我们写的class样式,那这时候就需要使用样式穿透解决。
一、VUE
当我们在Vue组件中需要局部修改其他组件的样式,同时又不想去掉 scoped 属性造成不同组件之间的样式污染。
在vue2中我们有/deep/
或者 vue3中的:deep(.className)
可以用以下方法来穿透scoped。
<style scoped>
外层 >>> 其他组件类名 {
样式
}
</style>
注意:有些Sass 之类的预处理器无法正确解析 >>>,可以用 /deep/ 或 ::v-deep( >>> 的别名) 来代替。
<style scoped>
/deep/ 其他组件类名 {
样式
}
外层 ::v-deep 其他组件类名 {
样式
}
</style>
二、REACT
使用 :global(.className) 可以实现样式穿透,针对局部class类名下的全局UI组件,可以这么用:
.divBox {
:global(.content){
...
}
}
/* 定义全局样式 */
:global(.text) {
font-size: 16px;
}
/* 定义多个全局样式 */
:global {
.footer {
color: #ccc;
}
.sider {
background: #ebebeb;
}
}
注意:如果 .divBox 的 .content也是通过style调用了,就没效果了,这时候就需要className写成字符串的形式
import styles from './styles.less'
const Model:React.FC = () => {
let activeType = 1;
return (
<div className={styles.divBox}>
<span className={activeType == 1 ? 'content' : ''}></span>
</div>
)
}
export default Model;
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
更多推荐
已为社区贡献5条内容
所有评论(0)