CSS3的 calc() 函数

238 阅读2分钟

一、calc()是什么

简单来说就是CSS3中新增的一个函数,calculate(计算)的缩写。用于动态计算宽/高,你可以使用calc()给元素的各个属性设置值。

二、calc()的用法

  • 可以混合使用各种单位进行计算;例如:%、vw、vh、px、vmin、vmax、em、rem等单位;
  • calc()函数支持 "+", "-", "*", "/" 运算。使用标准的数学运算优先级规则。运算符前后都需要保留一个空格,例如:width: calc(100% - 10px);
  • calc()函数支持嵌套,例如 calc( 100% / calc(2em * 5) )

三、calc()使用场景

使DOM元素更加灵活的响应视口改变。比如给定元素的宽高为视口的高度减去一个绝对值,它将随视口的改变而同样改变。如下代码:

width: calc(100vm - 10px);
height: calc(100vh - 10px);

// 设置一个100%宽度,10px间距的块
width: 100%;
margin: 10px; // 这样写会超出 出现滚动条
// 这时候就可以用calc()
width: calc(100% - (10 *2)px);
margin: 10px;

可读性更好,比如 width:33.3333% ;和 width:calc(100% / 3) ;修改起来也更方便。

绝对定位居中:实现等同于 marging-top: -50px; margin-left: -50px; 的效果。比如还需要设置margin属性的话,可避免样式冲突。

width: 100px;
height: 100px;
position: absolute;
top: calc(50% - 50px);
left: calc(50% - 50px);

四、less中的calc()

// 在less中是这么写的
width: calc(100% - 10px);

// 最后转换在页面上 变成了
width: 90%;

查了资料才知道:

在使用less解析中,calc运算会忽略单位自己计算:比如“width:calc(50% - 5em)” 会被解析为 “width:calc(45%)”。修改方法:width:calc(~"50% - 5em");