Less 中使用 Css3 calc()函数遇到的问题

2,569 阅读2分钟

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2 万元奖池等你挑战

Less 中使用 Css3 calc()函数遇到的问题

背景

这两天在写样式的时候,遇到了这个奇奇怪怪的问题,于是便记录下来

按照习惯的写法

.block {
    overflow-y: auto;
    height: calc(100% - 56px);
}

编译后的代码

.block {
    overflow-y: auto;
    height: -webkit-calc(44%);
    height: calc(44%);
}

😱显然结果不是们想要的,Less 已经预先帮我们计算了100% - 56px的值

检查本地的Less版本

"less": "^2.7.2",
"less-loader": "3.0.0",

解决思路

方案一

image.png

看完后,我们就理解为啥结果为44%了(首先计算100- 56,其次优先取第一个数的单位,也就是%,最后得到56%


回到我们的问题,我们并不想让Less帮我们多干这样的一件事情,简而言之就是不需要你帮我计算,当做字符串处理就好了


image.png

看完后,我们就知道如何进行转义了

下面进行代码转义

.block {
    overflow-y: auto;
    height: calc(~"100% - 56px");
}

代码编译后代码

.block {
    overflow-y: auto;
    height: -webkit-calc(100% - 56px);
    height: calc(100% - 56px);
}

Less没有处理我们的这个转义后的字符串,我们的问题也就迎刃而解了 😀

方案二

简单暴力,升级lessless-loader,问题也能解决

"less": "3.13.1",
"less-loader": "5.0.0"

最后

楼主采用的方案一,因为项目不是个人的,升级loader可能对项目平稳性造成影响,还是稳妥着来 😂

好好学习不会差,我是 970,大家一起进步