编程 为什么vue:deep、/deep/、>>>样式能穿透到子组件

2024-11-19 05:20:55 +0800 CST views 1095

为什么vue:deep、/deep/、>>>样式能穿透到子组件

在使用scoped标记的style时,deep符号通常用于修改外部组件的样式。下面我们将探讨这些符号的用法及其效果。

小试牛刀

不使用deep

如果要修改三方组件的样式,通常只能将样式放在scoped之外,这会导致全局样式污染,可能引发样式冲突。

<style lang="less">
.container {
    .el-button {
        background: #777; 
    }
}
</style>

使用 /deep/>>>(已弃用)

.container1 {
    /deep/ .el-button {
        background: #000; 
    }
}
.container2 >>> .el-button {
    background: #222; 
}

在 Vue 3 中使用 /deep/>>> 时,控制台会提示警告:这两个组合符号已被弃用,建议使用:deep()替代。

使用 :deep

.container3 {
    :deep(.el-button) {
        background: #444; 
    }
}

嵌套 :deep

如果按以下方式嵌套deep,是否有效呢?

.container4 {
    :deep(.el-button) {
        :deep(.el-icon) {
            color: #f00;
        }
    }
}

源码解析

/deep/>>>在编译时被转换为空格,从而使得选择器直接变为子样式。例如:

.no-deep .container1[data-v-f5dea59b] .el-button { background: #000; }

:deep的处理过程则更复杂,但最终会生成类似以下的样式:

.no-deep .container3[data-v-f5dea59b] .el-button { background: #444; }

嵌套结果

.container4 :deep(.el-button)为例,解析后可能得到:

  • 最终样式为 .container4 .el-button,而对于:deep(.el-icon),由于找不到祖先元素,结果为:
.no-deep .container4[data-v-f5dea59b] .el-button :deep(.el-icon) { color: #f00; }

这表明,deep并不支持嵌套。

结尾

如果觉得本文对你有帮助,欢迎关注我的开源项目,感谢你的支持!

复制全文 生成海报 Vue 前端开发 样式管理

推荐文章

rangeSlider进度条滑块
2024-11-19 06:49:50 +0800 CST
php 连接mssql数据库
2024-11-17 05:01:41 +0800 CST
Python Invoke:强大的自动化任务库
2024-11-18 14:05:40 +0800 CST
go命令行
2024-11-18 18:17:47 +0800 CST
对多个数组或多维数组进行排序
2024-11-17 05:10:28 +0800 CST
微信内弹出提示外部浏览器打开
2024-11-18 19:26:44 +0800 CST
OpenCV 检测与跟踪移动物体
2024-11-18 15:27:01 +0800 CST
Golang 中应该知道的 defer 知识
2024-11-18 13:18:56 +0800 CST
Vue3中如何实现响应式数据?
2024-11-18 10:15:48 +0800 CST
内网穿透技术详解与工具对比
2025-04-01 22:12:02 +0800 CST
Vue3中如何进行错误处理?
2024-11-18 05:17:47 +0800 CST
Vue3中的事件处理方式有何变化?
2024-11-17 17:10:29 +0800 CST
Web浏览器的定时器问题思考
2024-11-18 22:19:55 +0800 CST
支付轮询打赏系统介绍
2024-11-18 16:40:31 +0800 CST
Mysql允许外网访问详细流程
2024-11-17 05:03:26 +0800 CST
go发送邮件代码
2024-11-18 18:30:31 +0800 CST
thinkphp分页扩展
2024-11-18 10:18:09 +0800 CST
宝塔面板 Nginx 服务管理命令
2024-11-18 17:26:26 +0800 CST
linux设置开机自启动
2024-11-17 05:09:12 +0800 CST
解决 PHP 中的 HTTP 请求超时问题
2024-11-19 09:10:35 +0800 CST
JavaScript 流程控制
2024-11-19 05:14:38 +0800 CST
Vue3中如何扩展VNode?
2024-11-17 19:33:18 +0800 CST
Vue3 组件间通信的多种方式
2024-11-19 02:57:47 +0800 CST
Vue3中如何处理状态管理?
2024-11-17 07:13:45 +0800 CST
程序员茄子在线接单