为什么CSS中的calc函数可能会不生效?( 二 )

除法,除数必须是number规则

  • +- 运算符的两边必须要有空白字符 。比如 , calc(50% -8px) 会被解析成为一个无效的表达式 , 解析结果是:一个百分比 后跟一个负数长度值 。而加有空白字符的、有效的表达式 calc(8px + -50%) 会被解析成为:一个长度 后跟一个加号 再跟一个负百分比 。
  • */ 这两个运算符前后不需要空白字符 , 但如果考虑到统一性,仍然推荐加上空白符 。
  • 用 0 作除数会使 HTML 解析器抛出异常 。
  • 涉及自动布局和固定布局的表格中的表列、表列组、表行、表行组和表单元格的宽度和高度百分比的数学表达式,auto 可视为已指定 。
  • calc() 函数支持嵌套,但支持的方式是:把被嵌套的 calc() 函数全当成普通的括号 。
解惑想要了解前面那些坑产生的原因,我们得先了解CSS中的基础语法与数据类型:
DIMENSION语法DIMENSION{num}{ident}
为什么CSS中的calc函数可能会不生效?

文章插图
这里的num值的是数字,那么ident代表什么呢,这个我们也可以在CSS规范中找到答案
identident[-]?{nmstart}{nmchar}*nmstart和nmcharnmstart [_a-z]|{nonascii}|{escape}nmchar [_a-z0-9-]|{nonascii}|{escape}
为什么CSS中的calc函数可能会不生效?

文章插图
解惑calc(100%-50px)了解完CSS的基础语法与数据结构,我们现在可以来看看解析器是如何解析calc(100%-50px)的 。
  • 首先DIMENSION语法 , {num}{ident}会将其分割为num:100ident:%和-100px
  • %是单位,这个应该没有疑问
  • -100px这个符合nmchar语法 , 所以没有将其拆开,而是保留作为单位解析,但CSS中没有-100px这个单位,所以这个表达式不会生效
兼容性calc 函数具有惊人的浏览器支持,一直到 IE9 。如果你用旧版浏览器或 Opera Mini 编写代码,请考虑使用数值作为后备 。
为什么CSS中的calc函数可能会不生效?

文章插图
最后喜欢的同学欢迎点个赞呀,想要查看源码的同学快来公众号回复碎片吧~
原文首发地址点这里 , 欢迎大家关注公众号 「前端南玖」,如果你想进前端交流群一起学习 , 请点这里
我是南玖,我们下期见?。。?

推荐阅读