vue sass 组件样式穿透

vue中经常引入第三方组件,而第三方组件有时会无法满足需求,这时就需要自定义组件样式

  • 第一种方式,直接在全局样式修改,这种方式会全局覆盖修改后的组件样式
// 全局style
<style>
.el-dialog__header {
    font-size: 24px;
}
</style>
  • 另一种情况我们不希望改变全局样式,那么可以在scoped中使用 深度选择器。这里用的sass预处理器,深度选择器 就使用 ::v-deep
// 直接写在组件内部
<style lang="scss" scoped>
    ::v-deep .el-dialog__header {
        font-size: 24px;
    }
</style>

不同前端预编译工具中的使用

less:/deep/ +类名
sass:::v-deep +类名
Vue 项目中使用 Sass 时,组件样式继承问题通常是由于全局样式或嵌套结构导致的。为了解决这一问题,可以采用以下方法: 1. **使用 `scoped` 属性限制样式作用域** 在 `<style>` 标签中添加 `scoped` 属性,可以确保当前组件样式仅作用于该组件,不会影响其他组件。即使使用了 Sass 的嵌套语法,`scoped` 也能有效隔离样式[^1]。例如: ```scss <style lang="scss" scoped> #talentDevelopmentDetail { .header { width: 100%; height: 0.4rem; line-height: 0.4rem; background: rgba(241, 242, 244, 1); margin-top: 0.7rem; } .header-text { padding-left: 15%; font-size: 0.12rem; font-weight: 400; color: rgba(0, 0, 0, 0.80); } } </style> ``` 2. **使用模块化 CSS 或 BEM 命名规范** 通过模块化 CSS 或者 BEM(Block Element Modifier)命名方式,可以避免类名冲突和样式污染。例如,在 Sass 中使用嵌套结构时,可以通过明确的层级关系来管理样式,减少对父组件样式的依赖。 3. **合理使用 `!global` 控制全局变量作用域** 如果在 Sass 中定义了一些全局变量,可以使用 `!global` 标志来控制其作用范围,避免不必要的样式覆盖。 4. **配置 `additionalData` 引入全局样式文件** 在 Vue 项目的 `vite.config.ts` 文件中,可以通过配置 `css.preprocessorOptions.scss.additionalData` 来引入全局的样式文件,这样可以在每个组件中自动注入一些通用的 Sass 变量或混合(mixins),而无需手动导入。例如: ```ts export default defineConfig({ plugins: [ vue(), createSvgIconsPlugin({ iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')], symbolId: 'icon-[dir]-[name]', }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } }, css: { preprocessorOptions: { scss: { javascriptEnabled: true, additionalData: '@import "./src/styles/variable.scss";', }, }, }, }) ``` 5. **使用 `deep` 或 `::v-deep` 穿透 `scoped` 样式** 当需要修改子组件样式时,可以使用 `::v-deep` 或 `:deep()` 伪类来穿透 `scoped` 样式。这种方式适用于需要局部修改子组件样式的情况,但应谨慎使用以避免过度影响其他组件6. **使用 `CSS-in-JS` 解决方案** 如果希望更彻底地解决样式继承问题,可以考虑使用如 `styled-components` 或 `emotion` 这样的 CSS-in-JS 库,它们提供了更强的样式封装能力。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值