1. 首页
  2. 前端

CSS3 calc() 会计算的属性

CSS3 calc() 会计算的属性

CSS3 calc() 会计算的属性

一、什么是calc()?

学习calc()之前,我们有必要先知道calc()是什么?只有知道了他是个什么东东?在实际运用中更好的使用他。

calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,你可以使用calc()给元素的border、margin、pading、font-size和width等属性设置动态值。为何说是动态值呢?因为我们使用的表达式来得到的值。不过calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。

二、calc()能做什么?

calc()能让你给元素的做计算,你可以给一个div元素,使用百分比、em、px和rem单位值计算出其宽度或者高度,比如说“width:calc(50% + 2em)”,这样一来你就不用考虑元素DIV的宽度值到底是多少,而把这个烦人的任务交由浏览器去计算。

以前我们可以使用box-sizing:border-box;来设置盒子的属性为不加上边距。现在我们又多了一个选择了。但要注意,两者只能使用一个哦,否则就会造成冲突了。

三、calc的语法

calc()语法非常简单,就像我们小时候学加 (+)、减(-)、乘(*)、除(/)一样,使用数学表达式来表示:

.elm {  width: calc(expression);}

其中”expression”是一个表达式,用来计算长度的表达式。

四、怎么使用

calc()使用通用的数学运算规则,但是也提供更智能的功能:

  1. 使用“+”、“-”、“*” 和 “/”四则运算;
  2. 可以使用百分比、px、em、rem等单位;
  3. 可以混合使用各种单位进行计算;
  4. 表达式中有“+”和“-”时,其前后必须要有空格,如”widht: calc(12%+5em)”这种没有空格的写法是错误的;
  5. 表达式中有“*”和“/”时,其前后可以没有空格,但建议留有空格。

下面就对calc(100vh – 10px) calc(100vw – 10px) calc(100% – 10px) 简单说明

在讲calc之前先说一下 vh  vw:
  vw  相对于视口的宽度。视口被均分为100单位的vw
  vh  相对于视口的高度。视口被均分为100单位的vh
  vmax 相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax
  vmin 相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin
  calc 是 css3提供的一个在css文件中计算值的函数:
  用于动态计算长度值。需要注意的是,运算符前后都需要保留一个空格,例如:width: calc(100% - 10px)

任何长度值都可以使用calc()函数进行计算;
calc()函数支持 “+”, “-“, “*”, “/” 运算;

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

calc(100vh - 10px)  表示整个浏览器窗口高度减去10px的大小 calc(100vw - 10px)   表示整个浏览器窗口宽度减去10px的大小

CSS3 calc() 会计算的属性

五、需要提前知道的兼容性

CSS3 calc() 会计算的属性

著名的CSS属性可用性查询网站caniuse给出了具体的兼容性表,点击这里查看。

因此,本文后面要展示的N个demo,就没有必要再低版本的IE浏览器上查看了~~

浏览器对calc()的兼容性还算不错,在IE9+、FF4.0+、Chrome19+、Safari6+都得到较好支持,同样需要在其前面加上各浏览器厂商的识别符,不过可惜的是,移动端的浏览器还没仅有“firefox for android 14.0”支持,其他的全军覆没。

大家在实际使用时,同样需要添加浏览器的前缀

 .elm {	/*Firefox*/
	-moz-calc(expression);	/*chrome safari*/
	-webkit-calc(expression);	/*Standard */
	calc();
 }

例子:

CSS3 calc() 会计算的属性

*{
    margin:0px;
    padding:0px;
}
.inner{
    height:50px;
    line-height:50px;
    color:#fff;
    background:green;
    text-align: center;
}
.tab-con{
    height: calc(100vh - 50px);
    background: pink;
}

<div class="container">
    <div class="inner"></div>
    <div class="tab-con"></div>
</div>



更多精彩猛料,请随时关注本站!

原创文章,作者:Ferrycoln,如若转载,请注明出处:https://ms200.cn/archives/142

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论列表(1条)

  • jjj 2018年8月24日 下午10:51

    不错,有用

联系我们

在线咨询:点击这里给我发消息

邮件:499661635@qq.com.com

工作时间:周一至周五,9:30-18:30

QR code