CSS3 calc()是怎么实现计算

css3的calc()函数允许我们在属性值中执行数学计算操作。例如,我们可以使用calc()指定一个元素宽度的固定像素值为多个数值的和。

calc(表达式)
- 表达式支持加、减、乘、除运算,同时也支持单位的混合使用(%、px、rem、em等);
- 表达式中有”+”、”-“运算符的,前后必须要有空格,这个是向前兼容,后期可能会带入变量等有”-“连字符;
- 虽然“*”“/”没有空格可以运算,但是为了保持格式上的统一,一般加空格。

width: calc(80px - 10px);

为什么是calc()

1、calc()可以组合不同的单元。特别是,我们可以混合计算绝对单元(比如百分比与视口单元)与相对单元(比如像素)。例如:

widthcalc(100% - 20px);/*表示宽度小于其父元素20px*/

2、使用calc(),计算值是表达式自己,而非表达式的结果。

/*CSS样式中*/
widthcalc(100% - 20px);

/*浏览器计算后的结果*/
widthcalc(100% - 20px);

这意味着浏览器中的值更加的灵活,能够响应视口的改变。可以随着视口的改变对相应的值进行调节。

使用calc()

calc()函数可以用来对数值属性执行四则运算。

.foo {
    width: calc(50vmax + 3rem);
    padding: calc(1vw - 1em);
    transform: rotate( calc(1turn + 28deg) );
    background: hsl(100, calc(3 * 20%), 40%);
    font-size: calc(50vw / 3);
}

calc()嵌套

calc()函数可以嵌套。在函数里面,会被视为简单的括号表达式,如下:

 width: calc( 100% / calc(100px * 2) );

浏览器支持

calc()已经得到普遍支持。
这里写图片描述

注:对于不支持calc()的浏览器,整个属性值表达式将被忽略。不过我们可以对那些不支持calc()的浏览器使用一个固定的值作为回退。

width:90%;
widthcalc(100% - 10px);

什么场景可以使用calc()

1、居中元素

使用calc()给我们提供另一个垂直元素的解决方案。如果我们知道元素的尺寸,一个典型的解决方案使用负外边距移动自身距离高于宽的一般,如下:

/*对于300px*300px*/
position:absolute;
top: 50%;
left: 50%;
margin-top: -150px;
margin-left: -150px;

如果使用calc()函数,那么我们可以只通过top和left值便能实现相同的效果。

扫描二维码关注公众号,回复: 448822 查看本文章
/*对于300px*300px*/
position:absolute;
top: calc(50% - 150px);
left: calc(50% - 150px);

Flexbox的介入,已经很少需要这种方法了。不过,一些情况下Flexbox不能被使用。比如,元素需要绝对定位或者固定定位,这种方法是有用的。

2、创建根栅格尺寸

使用rem、calc()函数能够用来创建一个基于视口的栅格。我们可以设置根元素的字体大小为视口宽度的一部分。

html{
    font-size: calc(100vw / 30);
}

现在1rem为视口宽度的1/30。在页面上的任何文本,将会根据你的视口自动播放。更进一步,相同比例的视口总会显示相同的文本数量,不管视口的真实尺寸是多少。
这里写图片描述
如果我们对非文本使用rem设置大小,他们同样遵守这个行为。一个rem宽度的元素总是视口元素宽度的1/30.

3、清晰

calc()使计算更加清晰。如果你使用一组项目为他们父元素容器的1/6,你可以这么写:

width16.666666%;

然而,它能够更加清晰并具有可读性:

widthcalc(100% / 6)

本文转载自:http://caibaojian.com/css3-calc.html

猜你喜欢

转载自blog.csdn.net/wjnf012/article/details/80227644