vue.js - 如何在组件 vue.js 中覆盖 SASS 变量 vuetify?

标签 vue.js vuetify.js

我可以覆盖所有项目的 sass 变量。我在文件 src/sass/variables.scss 中执行此操作。在此之前,我创建了 sass 文件夹和这个文件。正如我所说,它有效,我可以为整个项目覆盖此文件中的变量。但是我只需要为组件覆盖必要的变量。我尝试这样做:

<style lang="sass">
  $btn-text-transform: lowercase         //by default uppercase
</style>

我还尝试在变量之前或之后添加 @import '~vuetify/src/components/VBtn/_variables.scss'。但它不起作用。我究竟做错了什么?我该怎么做?

最佳答案

首先,为每个组件导入这些全局样式可能不是一个好主意。每次您 @import 时,vuetify 的样式表都会添加到您生成的代码中。实际上,通常不鼓励使用 @import,查看 Heads up from Sass看看为什么。

但是对于您的代码片段,您对 $btn-text-transform 的覆盖无法工作,因为您在作业中使用了 !default。它不会分配该值,因为该值已在导入的样式表中分配。

所以去掉 !default。如果单独这样做不起作用,请将 $btn-text-transform 声明移到 @import 之上。


编辑 18-08-21 如何在组件中覆盖 SASS 变量 vuetify:

您只能在使用这些变量导入样式表的地方覆盖 Sass 变量。如果你例如。导入(直接或传递)~vuetify/src/components/VBtn/_variables.scss 到你的全局样式表,然后在你的组件(一个单独的样式表)中你想改变 $btn-text -transform,它不会起作用。

那是因为 Sass 变量的工作方式——它们只存在于编译时。那,以及组件样式的编译范围与全局样式表分开的事实(如果我们使用上面的示例)意味着更改,实际上是声明一个新的 $btn-text-transform在您的组件样式中对全局样式表的编译没有影响。该编译可能在您的组件样式开始编译之前就已经完成。

如果您像这样将 VBtn 样式导入到您的组件中,您的方法就会奏效:

@import "~vuetify/src/components/VBtn/_variables.scss";

$btn-text-transform: [your-own-value];

@import "~vuetify/src/components/VBtn/VBtn.sass";

理想情况下,您不会在其他任何地方导入 VBtn 样式。如果你这样做了,例如。在一些全局样式表中,会有样式重复,这意味着应用样式的可预测性较低,需要发送给客户端的字节更多。

但这可能太忙了。在本地自定义样式的最简单方法是全局导入您需要的所有 vuetify 样式,然后在您的组件中应用您自己的、范围内的样式更改。关于要更改的 text-transform,您可以在组件的样式中使用它:

<style scoped>
/deep/ .v-btn {
  text-transform: [your-own-value];
}
</style>

关于vue.js - 如何在组件 vue.js 中覆盖 SASS 变量 vuetify?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68730665/

相关文章:

vue.js - 如何处理 Vuetify 中 v-menu 的点击事件?

javascript - 使用 vue.js 将循环变量作为 HTML &lt;input&gt; onclick 属性中的函数参数传递

javascript - 如何在 Vuetify(版本 >= 2.0)中单击时突出显示 v-data-table 中的行?

vue.js - Vuetify/嵌套验证

vue.js - 使用 vue.js 和 vuetify 进行服务器端表单验证

javascript - v-select 同步修饰符将带有 id 的文本从子级传递到父级

vuejs2 - 使用数组数组作为项目的 Vuetify 数据表

symfony - 无法从序列化数据创建 DateTime 的实例

node.js - 寻找一种通过 IP 地址(包括 SSL 证书)创建 HTTPS REST api 连接的方法

javascript - 使用 Vue JS 和 for 循环设置事件状态