因此,我读到了here,在Vue.js中,你可以在选择器中使用/deep/
或>>>
,以便创建应用于子组件内部元素的样式规则。然而,试图在我的样式中使用它,无论是在SCSS还是在普通的CSS中,都不起作用。相反,它们被原封不动地发送到浏览器,因此没有任何效果。例如:
主页.版本:
<style lang="css" scoped>
.autocomplete >>> .autocomplete-input
{
// ...
}
</style>
生成的CSS:
<style type="text/css">
.autocomplete >>> .autocomplete-input[data-v-2bda0c9a]
{
//...
}
</style>
我想要的:
<style type="text/css">
.autocomplete[data-v-2bda0c9a] .autocomplete-input
{
//...
}
</style>
与vue-loader
相关的webpack配置如下所示:
// ...
{
test: /\.vue$/,
loader: "vue-loader",
options: {
loaders: {
scss: "vue-style-loader!css-loader!sass-loader"
}
}
}
// ...
所以我的问题是,如何让这个>>>
运算符起作用?
我已经找到了this的答案,但我正在做的正是这样做,它不工作...
7条答案
按热度按时间pdtvr36n1#
Vue 2
“你在说什么” 使用
::v-deep
*不 * 使用Sass: 使用
>>>
无论使用哪种语法,此组件的
<style>
标记都必须为scoped
:Vue 3(和Vue 2.7)
在Vue 3中,
::v-
前缀现在被弃用了,我们不再需要>>>
。我们可以使用统一的:deep
选择器 *,无论是否使用Sass *,但现在建议使用括号和选择器。使用
:deep(.child-class)
这也适用于Vue 2.7(最终Vue 2版本)
Vue 3个新选择器
此外,在Vue 3中,对于具有
<slot>
的组件有一个新特性,它可以对传递的插槽内容进行样式化。插槽内容 使用
:slotted(.child-class)
最后,在Vue 3中,有一个新特性,即使是从
scoped
组件注册全局样式:全局样式 使用
:global(.my-class)
使用任何语法时,此组件的
<style>
标记都必须为scoped
:摘要
在Vue 2中:
/deep/
语法::v-deep
,使用不带Sass的>>>
在Vue 3中:
::v-deep .child-class
,而推荐使用:deep(.child-class)
::v-
前缀,而建议使用:
>>>
语法/deep/
语法:slotted
和:global
选择器对于每个版本/语法,此组件的
<style>
标记都必须为scoped
:wbgh16ku2#
避免使用
/deep/
,而使用::v-deep
任何作用域为
component's
的css都可以通过使用deep selector
进行更改,但/deep/
很快就会被弃用Vue Github参考-https://github.com/vuejs/vue-loader/issues/913
在此情况下使用
::v-deep
,并避免使用过时的/deep/
参考-深度选择器
只需检查渲染的
element
的类,您可以在chrome或任何浏览器控制台中使用devtools
修改该类。然后,在您使用
component
时,修改它snz8szmq3#
我已经在Vue的作用域SCSS样式表中成功地使用了/deep/,其结构如下:
Edit:/deep/已被弃用,如果它不再适用于您,请参阅解释以下内容的其他答案::v-deep
643ylb084#
不推荐使用::v-deep作为组合符。请用途:deep()。
ohfgkhjo5#
对我来说,唯一有效的办法就是
unftdfkk6#
虽然在文档中找不到,但答案是您试图访问的组件不能是根组件。将单个组件 Package 在
<div>
中,它应该可以在作用域为scss
的::v-deep
上工作,正如其他人所解释的那样。uz75evzq7#
我通过添加以下内容解决了此问题
第一个
在组件中像方法一样配置它,它和方法是同一级别的。