CSS中calc语法不生效

问题起因

在使用calc时发现无法生效,写法是:

css 复制代码
height:calc(100vh-100px);

页面无效果,加空格后就发现有效果了:

css 复制代码
height:calc(100vh - 100px);

这是为什么?

calc是什么?

css3 的计算属性,用于动态计算长度值。calc语法:

css 复制代码
calc(expression)

用法&定义

运算符前后都需要保留一个空格,例如:height: calc(100% - 100px);

任何长度值都可以使用calc()函数进行计算;

calc() 函数支持 "+", "-", "*", "/" 运算;

calc() 函数使用标准的数学运算优先级规则;

解析calc(100%-100px)

手动解析一下calc(100%-100px)。先过DIMENSION语法,{num}{ident}将其分割为num:100、ident:%-100px。

为什么是%-100px?

其实,应该是%和-100px,两个被作为单位解析。因为-100px符合nmchar语法,没有将其拆分。如果-100px有个空格,就会拆分为-和100以及px。但是这个例子,只能较好的解释为什么在-后面加空格。为什么前面也要加空格?

引出新的例子

在此,引出一个新的例子:

css 复制代码
heght:calc(100px-1oopx);

在编译时时,会将其直接拆分为100和px-100px,将px-100px过nmchar完全符合\[\_a-z0-9-\]。将其保留作为单位解析。但是px-100px不属于CSS中任何一个单位,也并无单位的定义。

(这个案例,会更加好的解释,为什么-的前后都需要加空格。)

如果-的前后有空格,就会被拆分为100px(数字100和单位px)、-、100px(数字100和单位px)来解析。

源码为什么怎么写?

为什么要把-放在里面?写成calc(100% -100px)或者calc(100px -100px)为什么不行?

在这里,要引入一个正负数的概念,因为在数学标识符当中还有正号和负号这两个标识符。光看calc(100% -100px)和calc(100px -100px)的后半部分,-100px是不是更像是这里为-100和px。因为在CSS中是有负数的概念的,就像margin和padding中会常常用到负数。再引出一个新的例子:

css 复制代码
height:clac(500px - -100px);

再遇到这种情况怎么办?

如果没有对于负号的定义应该就会500px、-、-、100px,两个减号怎么编译呢。在-的前后都加上空格,区别开减法和负号。

相关推荐
tzy23312 小时前
Vue和React之争
前端·vue.js·react.js
网络点点滴12 小时前
Vue3中toRaw和MarkRaw
前端·javascript·vue.js
李松桃12 小时前
01HTML-CSS-入门知识点
前端·css
广州华水科技12 小时前
北斗GNSS变形监测系统是什么?主要有哪几种应用?
前端
晴天1612 小时前
【跨桌面应用开发】Neutralinojs快速入门指南
前端·javascript·electron·node.js
爱学习的程序媛13 小时前
【Web前端】深入解析JavaScript异步编程
开发语言·前端·javascript·ecmascript·web
梧桐16813 小时前
马克沁机枪上阵(二):前线开辟—Claude Code 如何用一天打通前端
前端
是上好佳佳佳呀13 小时前
【前端(一)】HTML 知识梳理:从结构到常用标签
前端·html
楚轩努力变强13 小时前
2026 年前端进阶:端侧大模型 + WebGPU,从零打造高性能 AI 原生前端应用
前端·typescript·大模型·react·webgpu·ai原生·高性能前端
放下华子我只抽RuiKe513 小时前
深度学习 - 01 - NLP自然语言处理基础
前端·人工智能·深度学习·神经网络·自然语言处理·矩阵·easyui