Materializecss & vue3:如何使用 sass @extend 为文本着色?

Posted

技术标签:

【中文标题】Materializecss & vue3:如何使用 sass @extend 为文本着色?【英文标题】:Materializecss & vue3: how to use sass @extend to color text? 【发布时间】:2021-11-21 19:00:22 【问题描述】:

我已经使用 npm 在我的 Vue 3.0 项目中安装了 materializecss。 它在我的 main.js 中导入:

import 'materialize-css/dist/css/materialize.min.css'

一切正常,但是当我想使用@extend 为文本着色时,如下所示:

<style lang="scss">
  .a 
      @extend .grey-text, .text-lighten-3;
  
</style>

我收到一个错误:

SassError: The target selector was not found.
Use "@extend .grey-text !optional" to avoid this error.

如果我使用“!可选”,则不会应用该规则。 是否可以在 Vue3 中使用 materializecss sass 扩展?如果是,怎么做?

【问题讨论】:

【参考方案1】:

您首先必须导入/初始化包含要扩展的 CSS 规则(选择器)的 Sass 部分。

Vue 组件文件中的 Sass 是作用域的,不会看到该文件外部的任何代码(即使您没有在样式标记中使用 scoped 关键字)。这也是dart-sass 默认的工作方式。

假设 Materialize 是作为 node_module 安装的,并且排版部分是您的扩展类所在的位置,您可以像这样@use 它:

@use 'materialize-css/sass/components/_typography' as *;

a 
  @extend .grey-text, .text-lighten-3;

【讨论】:

谢谢,我试过了,还是一样的错误,用百分比更新了 对不起,我误解了这个问题,经过深思熟虑,我更新了答案。您不需要 %,点应该可以工作。缺少的是您需要先使用 @use 导入的可扩展类。 此处类似概念的证明,我们在 Vue 组件中@使用节点包中的变量:github.com/ahansson/hgrid-css-vue-vite/blob/master/src/… 路径其实是@use 'materialize-css/sass/materialize.scss' as *;但答案是正确的谢谢!我还有一个问题:如果我使用 vue cli 可用的其他 scss 预处理器(node sass 或 smt),不使用 @use 会解决问题吗? 好的,将更新答案。使用正确的路径但是要小心,如果您 @use materialise.scss 您将完整的框架导入到您的组件中。相反,请尝试查找可扩展类所在的特定文件,以避免在每个组件中获得 Materialize 的完整副本。 Node-sass 现在已弃用,不应使用。在 sass-dart 之前,Sass 中的所有内容都可能是全局的,他们使用 @use 和其他技术隔离模块以允许命名空间。在大型项目中更加繁重但也更加稳固。

以上是关于Materializecss & vue3:如何使用 sass @extend 为文本着色?的主要内容,如果未能解决你的问题,请参考以下文章

分享一个CSS+JavaScript框架materializecss

如何在 MaterializeCSS 下拉菜单中创建子菜单?

更改 MaterializeCSS 中的“输入字段”颜色

如何使用 MaterializeCss 创建自动完成表单?

materializecss 中的响应式图像问题

使用 MaterializeCSS 居中图像的问题