uni-app app.vue 引入scss文件后 @mixin不生效
uni-app app.vue 引入scss文件后 @mixin不生效
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | Monterey 12.3 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
PC开发环境操作系统版本号:Monterey 12.3
HBuilderX类型:Alpha
HBuilderX版本号:3.4.6
手机系统:iOS
手机系统版本号:iOS 15
手机厂商:苹果
手机机型:iphone 12
页面类型:nvue
vue版本:vue2
打包方式:离线
操作步骤:
APP.vue下引入的全局样式
```scss
[@import](/user/import) "@/static/css/app.scss";
app.scss 内容
[@mixin](/user/mixin) flex($direction: row) {
flex-direction: $direction;
}
// 外边距
.mlr{
margin-left: 20rpx;
margin-right: 20rpx;
}
index.nvue style 下使用@include flex;
会报错:SassError: no mixin named flex
把 [@mixin](/user/mixin) flex
放到 index.nvue style下就正常使用!
.mlr
在index.nvue下是生效的!
以上文件都设置了lang="scss"
顺便问一下nvue下不支持px吗? 只能使用rpx吗? 反正我用px就没有效果,用rpx才可以!
预期结果: 正常
实际结果: 不正常
bug描述:
app.vue 引入scss文件后 [@mixin](/user/mixin)
不生效
解决了吗 老哥
在 uni-app
中使用 scss
时,如果 @mixin
不生效,可能是由于以下几个原因导致的。以下是一些常见的排查步骤和解决方案:
1. 确保 scss
文件被正确引入
在 app.vue
中引入 scss
文件时,确保路径正确,并且使用了正确的语法。
<style lang="scss">
@import '@/styles/mixins.scss'; // 确保路径正确
</style>
2. 检查 scss
文件中的 @mixin
定义
确保 @mixin
在 scss
文件中正确定义,并且没有语法错误。
// mixins.scss
@mixin center {
display: flex;
justify-content: center;
align-items: center;
}
3. 确保 @mixin
被正确使用
在 app.vue
或其他组件中,确保 @mixin
被正确调用。
<template>
<div class="container">
<p>Hello, World!</p>
</div>
</template>
<style lang="scss">
@import '@/styles/mixins.scss';
.container {
[@include](/user/include) center; // 确保正确调用 @mixin
}
</style>
4. 检查 uni-app
的 scss
配置
确保 uni-app
项目已经正确配置了 scss
支持。通常情况下,uni-app
默认支持 scss
,但如果你使用的是自定义配置,可能需要检查 webpack
或 vite
的配置。
5. 检查 scss
编译器的版本
有时 scss
编译器的版本问题也会导致 @mixin
不生效。确保你使用的 scss
编译器版本是最新的,并且与 uni-app
兼容。
6. 清理缓存并重新编译
有时缓存问题可能导致样式不生效。尝试清理项目缓存并重新编译。
# 清理缓存
rm -rf node_modules/.cache
# 重新安装依赖
npm install
# 重新运行项目
npm run dev
7. 检查 scss
文件的编码
确保 scss
文件的编码是 UTF-8
,避免因编码问题导致样式不生效。
8. 检查 scss
文件的路径
确保 scss
文件的路径在项目中是唯一的,避免因路径冲突导致样式不生效。
9. 使用 [@use](/user/use)
代替 @import
如果你使用的是较新的 scss
版本,可以尝试使用 [@use](/user/use)
代替 @import
。
[@use](/user/use) '@/styles/mixins.scss' as *;
.container {
[@include](/user/include) center;
}