如何避免 Vuetify 覆盖默认 CSS

Min*_*XIE 6 javascript css vuejs2 vuetify.js

总结问题

我正在尝试将 Vuetify 实施到现有项目的一部分。但是在我将 Vuetify 添加到项目之后。我发现类似输入字段的“默认”CSS 样式,选择已更改。它使那些输入字段和选择看起来像纯文本而不是输入字段和选择。

因为我只想为项目的一部分实现Vuetify,所以Vuetify覆盖“默认”CSS规则是不好的。

我正在寻找一种方法来为现有项目的一部分实现 Vuetify。但是项目的其余部分应该正常呈现(仅使用默认 CSS,而不是我自己的 CSS)。

为了使 Qustion 更加清晰,我将举一个例子来显示两个选择。第一个是用 Vuetify 制作的,<v-select>第二个是用普通的 HTML 代码制作的<select>

提供背景并告诉我们您已经尝试过的内容

我已经尝试为输入字段设置自定义 CSS 规则,并在 Vuetify Script 和 Vuetify CSS 链接之后选择。但是 Vuetify 仍然覆盖我的自定义 CSS 样式。

显示您的代码

HTML 部分:

<div id="app">
  <div>Vuetify select:</div>
  <v-select
    :items="items"
  >
  </v-select>
  <hr/>
  <div>
    <div>Normal select:</div>
    <select>
      <option value="0">test1</option>
      <option value="1">test2</option>
      <option value="2">test3</option>
    </select>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

JS部分:

new Vue({
  el: '#app',
  data() {
    return {
      item: null,
      items: [
        {
          text: "a"
        },
        {
          text: "b"
        },
        {
          text: "c"
        },
      ]
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

描述预期和实际结果

我希望我可以在这个项目的某些部分使用 Vuetify。但与此同时,项目的其余部分应该像正常一样(使用默认 CSS)。

mcm*_*mik 5

这是由 Vuetify重置样式( src/styles/generic/_reset.scss) 引起的。

该问题还有一个问题:https ://github.com/vuetifyjs/vuetify/issues/8530 。您可以在mkalus中找到一些postcss hack,它通过包装器隔离必要的样式(将前缀类添加到选择器)。

就我而言,我只需要删除一些元素选择器,不包括我自己添加的元素选择器。这是我使用postcss-filter-rules插件对 mkalus 解决方案进行的变体。

我使用该filter选项来过滤选择器。其说明:

如果函数返回,选择器将被保留true,否则将被删除。

以及keepAtRules防止不必要删除的选项:

默认情况下,@font-face任何空的 at 规则(过滤后)都会被删除。要保留特定的 at 规则,请为此选项提供一组名称。要保留所有 at 规则,请使用值true

vue.config.js(Vue CLI 4):

const autoprefixer = require('autoprefixer')
const filterRules = require('postcss-filter-rules')

module.exports = {
  /* ... */
  css: {
    loaderOptions: {
      postcss: {
        plugins: [
          filterRules({
            filter: (selector) => {
              const re = new RegExp(/^(html|body|\*|ul|ol|select|small)(\W|$)/, 'i')
              const exception  = '.vue-global'
              return !re.test(selector) || selector.includes(exception)
            },
            keepAtRules: true
          }),
          autoprefixer
        ]
      }
    }
  }
  /* ... */
}
Run Code Online (Sandbox Code Playgroud)

现在我已经删除了一些 Vuetify 重置样式,我仍然可以设置样式html和其他元素,如下所示:

html.vue-global
  font-size 16px
Run Code Online (Sandbox Code Playgroud)


Rad*_*adu 0

您可以尝试将标准化 css 文件添加到您的项目中,并且 vuetify 样式应该仅在您想要的时候应用,我使用这个

  • 您能否详细描述一下如何使用它?我有点困惑。如果我将此 CSS 样式放在 Vuetify 样式之前,Vuetify 仍然会覆盖它,对吗?但如果我将此 CSS 放在 Vuetify 样式之后,它将覆盖 Vuetify。这会破坏我的 Vuetify UI。如何将 Vuetify 样式仅应用到 Vuetify UI 上是关键。但我不知道该怎么做。 (2认同)