如何覆盖Vuetify样式?

Wev*_*ved 2 css vue.js vuetify.js

我想按类覆盖vuetify样式。

例如,从vuetify更改按钮的背景颜色。

因此,我创建了一个带有类的按钮:

<div id="app">
  <v-btn class="some" color="success">Success</v-btn>
</div>

.some {
background-color:red;
}
Run Code Online (Sandbox Code Playgroud)

但是背景色红色被vuetify覆盖。

如何在不使用重要主题的情况下解决此问题?

这是示例:https : //stackblitz.com/edit/vue-js-gpkj6k

gab*_*uff 15

使用 vue 和作用域元素,您将遇到 /deep/、>>>、::v-deep 选择器。一切都在那里解释。因此,如果您想更深地覆盖样式,这意味着您的根 vuetify 组件的子项的样式,您将需要将::v-deep选择器与scoped属性一起使用。

这给你:

<style scoped>
.parent-element >>> .vuetify-class {
  // values
}
</style>

<style lang="scss" scoped>
  .vuetify-class {
    ::v-deep other-class {
      // your custom css properties
    }
  }
</style>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


4ur*_*kye 6

与Vuetify一起工作过,它的样式多种多样……古怪。

直接对元素的样式(img)设置样式,而不是应用自己的类从来都不是一个好习惯。

这样,您就可以.my-card.v-card在保持样式范围不变的同时声明并赢得特异性战争(非范围可以使恶魔在vue文件中进行调试)。

一些Vuetify样式声明使用!important...,所以我发现覆盖这些样式的唯一方法也是!important在覆盖上使用。Vuetify对IMO做出任何 !important样式都做出了可怕的决定。

振作起来也很不错,>>>, /deep/, ::v-deep因为它可以提供解决方案,使样式不会被过滤掉。

  • 仅仅将 Vuetify 引入我的项目就破坏了各种样式,即使我在管道中加载了样式。也许最令人沮丧的一个事实是`input`、`select`和`button`现在都没有边框了。在表单繁重的应用程序中,为这些元素中的每一个添加类是非常耗时的。即使将它添加到 `&lt;style&gt;` 标签也无济于事。对开发人员非常不友好。 (6认同)
  • 我还养成了全局覆盖样式表的习惯,针对供应商样式。因此,_not_ 在您的组件文件中,而是在您将导入`main.js` 的单独样式表中。那就是……例如,仅当您想覆盖 *all* vuetify 输入样式时。这样您也可以避免向 vuetify 元素添加类等。 (2认同)
  • 经历定制 vuetify 组件的过程 - “赢得特异性战争”是描述它的一个很好的方式哈哈 (2认同)
  • @trpt4him,您可以通过将任何 SCSS 规则包装在 `body:not(#_){ ... code here }` 中来提高任何 SCSS 规则的特异性(假设您的 `&lt;body&gt;` 元素没有 `id=" _"`)。显然,您不需要使用“body”*本身*,但将“:not()”的断言限制为尽可能少的元素是一个很好的做法。如果你愿意的话,它是一个自定义的 `!important` ,它不会越过不可被内联样式覆盖的界限(所以它不会破坏 JS 样式),而且,正如你所看到的,它不需要知道任何祖先“id”或“class”。 (2认同)

小智 5

尝试不要限定您的样式范围,例如:

<body>
<img :src="userImg" alt="avatar">
</body>
Run Code Online (Sandbox Code Playgroud)

这行不通

<style scoped>
.img {
  width: 120px;
  height: 120px;
  margin: 0 auto;
  border-radius: 50% !important;
  overflow: hidden;
}
.img img {
  width: 100%;
}
</style>
Run Code Online (Sandbox Code Playgroud)

这会起作用

<style scoped>
.img {
  width: 120px;
  height: 120px;
  margin: 0 auto;
  border-radius: 50% !important;
  overflow: hidden;
}
.img img {
  width: 100%;
}
</style>
Run Code Online (Sandbox Code Playgroud)

  • 如果您不介意您的风格可能会渗透到其他地方,那么这很好。我发现在使用 Vue 时最好始终限制样式 - 通常有另一种方法可以绕过样式元素,而无需诉诸取消样式的范围。 (6认同)