我这个是升级项目的时候遇到的,要从 scss 升级到 less,然后代码中就报了这个错误
我说一下代码的错误过程,但是这里没有复现,因为我原本报错的代码要复杂很多,而且是公司代码,不方便透露,这是我自己写的,虽然没有复现,但我是这样解决的,大家可以参考一下,如果对 scss 和 less 的混合不熟悉的可以看文章 scss中的@include讲解以及关于scss和less中mixin的应用-CSDN博客
如果不想看过程的,也可以直接看最后的总结错误
在使用 scss 的时候
组件文件:
<script setup lang="ts"></script>
<template>
<div>
<h1>这个是实验的</h1>
<div class="one">one</div>
</div>
</template>
<style lang="scss" scoped>
@import './scss/main.scss';
</style>
在组件文件的同级目录有文件夹 scss,scss文件夹中有两个文件,分别是 mixins.scss 和 main.scss
mixins.scss文件:
@mixin trim-minxins(
$width,
$number,
$color
){
$height:($number - $width) / 2;
width: $width;
height: $height*3;
background-color: $color;
}
main.scss文件:
@import './mixins.scss';
.one{
@include trim-minxins(100px,300px,pink)
}
运行项目,发现没有报错
接下来我们使用less的写法:
组件文件:
<script setup lang="ts"></script>
<template>
<div>
<h1>这个是实验的</h1>
<div class="one">one</div>
</div>
</template>
<style lang="less" scoped>
@import './less/main.less';
</style>
在组件文件的同级目录有文件夹 less,less文件夹中有两个文件,分别是 mixins.less 和 main.less
mixins.less文件:
.trim-minxins(
@width,
@number,
@color
) {
@height: (@number - @width) / 2;
width: @width;
height: @height*3;
background-color: @color;
}
main.less文件:
@import './mixins.less';
.one {
.trim-minxins(100px,300px,pink);
}
此时运行代码,我的项目代码中就报错了,这里没有报错,但是没有得到我预期的效果
如果我们把mixins.less文件改为如下就好了:
.trim-minxins(
@width,
@number,
@color
) {
// 下面这行代码相比刚才的加了一个括号
@height: ((@number - @width) / 2);
width: @width;
height: @height*3;
background-color: @color;
}
总结错误原因:
在scss中,我们使用 除号 / 的时候,不用加上 括号(),但是在less中,我们使用 除号/ 的时候,需要加上 括号(),否则对less的写法就是错的