美文网首页飘雪大前端
Calc 在CSS3中的使用

Calc 在CSS3中的使用

作者: wavesnow | 来源:发表于2017-08-24 18:11 被阅读7次

在制作页面的时候,总会碰到有的元素是100%的宽度。如果元素宽度为100%时,其自身不带其他盒模型属性设置还好,要是有别的,那将导致盒子撑破。

比如说,有一个边框,或者说有margin和padding,这些都会让你的盒子撑破。我们换句话来说,如果你的元素宽度是100%时,只要你在元素中添加了border,padding,margin任何一值,都将会把元素盒子撑破(标准模式下,除IE怪异模式)。

calc简介

calc()函数功能实现上面的效果来得更简单。calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定元素的长度。比如说,你可以使用calc()给元素的border、margin、pading、font-size和width等属性设置动态值。为何说是动态值呢?因为我们使用的表达式来得到的值。不过calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。calc()能让你给元素的做计算,你可以给一个div元素,使用百分比、em、px和rem单位值计算出其宽度或者高度。

calc使用

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

.elm {
  width: calc(expression);
}

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

calc()的运算规则

  • calc()使用通用的数学运算规则;
  • 使用"+"、"-"、"*" 和 "/"四则运算
  • 可以使用百分比、px、em、rem等单位
  • 可以混合使用各种单位进行计算
  • 表达式中有"+"和“-”时,其前后必须要有空格
  • 表达式中有“*”和“/”时,其前后可以没有空格,但建议留有空格

例子

一个容器

<div class="demo">
     <div class="box"></div>
</div>  

添加样式

.demo {
    width: 300px;
    background: #60f;
}
.box {
  width: 100%;
    background: #f60;
    height: 50px;
}
css3-calc-1.jpg

添加padding和border

.demo {
    width: 300px;
    background: #60f;
padding: 3px 0; 
}
.box {
  width: 100%;
  background: #f60;
  height: 50px;
  padding: 10px;
  border: 5px solid green;
}

css3-calc-2.jpg

这个时候div.box的宽度大于了其容器div.demo的总宽度,从而撑破容器伸出来了。

使用calc解决问题

为了解决撑破容器的问题,以前我们只能去计算div.box的宽度,用容器宽度减去padding和border的值,但有时候,我们苦于不知道元素的总宽度,比如说是自适应的布局,只知道一个百分值,但其他的值又是px之类的值,这就是难点,死卡住了。随着CSS3的出现,其中利用box-sizing来改变元素的盒模型类型实使实现效果,使用calc()方法更是方便。

知道总宽度是100%,在这个基础上减去boder的宽度(5px * 2 = 10px),在减去padding的宽度(10px * 2 = 20px),即"100% - (10px + 5px) * 2 = 30px" ,最终得到的值就是div.box的width值:

.demo {
    width: 300px;
    background: #60f;
    padding: 3px 0;
}
.box {
    background: #f60;
    height: 50px;
    padding: 10px;
    border: 5px solid green;
    width: 90%;/*写给不支持calc()的浏览器*/
    width:-moz-calc(100% - (10px + 5px) * 2);
    width:-webkit-calc(100% - (10px + 5px) * 2);
    width: calc(100% - (10px + 5px) * 2);
}

css3-calc-3.jpg

这样一来,通过calc()计算后,div.box不在会超出其容器div.demo的宽度

另外一个例子

css3-calc-4.png
<ul id="testTube"/>
  <li id="ingredients01">10%</li>
  <li id="ingredients02">20%</li>
  <li id="ingredients03">30%</li>
  <li id="ingredients04">40%</li>
</ul>

ul#testTube {
  width:100px;
  height:300px;
  list-style:none;
  border-radius: 0 0 100px 100px;
  border: 1px solid #033a52;
}
li#ingredients01 {
  background-color: #4dbded;
}
li#ingredients02 {
  background-color: #2f9bc9;
}
li#ingredients03 {
  background-color: #136182;
}
li#ingredients04 {
  background-color: #033a52;
  border-radius: 0 0 100px 100px;
}
li#ingredients04 {
  height: -moz-calc(300px/2 - 30px);
  height: -webkit-calc(300px/2 - 30px);
  height: calc(300px/2 - 30px);    
/* Gesamtwert von 120px entspricht 40% der Füllmenge */
}
li#ingredients03 {
  height: -moz-calc(300px/10 + 60px);
  height: -webkit-calc(300px/10 + 60px);
  height: calc(300px/10 + 60px);
/* Gesamtwert von 90px entspricht 30% der Füllmenge */
}
li#ingredients02 {
  height: -moz-calc(300px/10*2);
  height: -webkit-calc(300px/10*2);
  height: calc(300px/10*2);    
/* Gesamtwert von 60px entspricht 20% der Füllmenge */
}
li#ingredients01 {
  height: -moz-calc(300px/10);
  height: -webkit-calc(300px/10);
  height: calc(300px/10);    
/* Gesamtwert von 30px entspricht 10% der Füllmenge */
}

相关文章

  • calc使用

    1. calc基本使用 calc在css3中用于动态计算长度值,calc()中接受数学四则运算,运算的结果为计算后...

  • web前端入门到实战:浅谈CSS calc()函数的用法

    CSS3 的 calc() 函数允许我们在属性值中执行数学操作。例如,我们可以使用 calc() 指定一个元素宽的...

  • Calc 在CSS3中的使用

    在制作页面的时候,总会碰到有的元素是100%的宽度。如果元素宽度为100%时,其自身不带其他盒模型属性设置还好,要...

  • CSS3 calc()

    什么是calc()? calc()是CSS3的一个新功能,能够动态地计算长度值,任何长度值都可以使用calc()来...

  • css栅格化布局

    参考资料:淘宝UED栅格化模式研究 Bootstrap官网栅格化介绍CSS3中calc的使用LESS的使用栅格化...

  • [译]calc()是如何工作的

    译自How calc() Works - written by Ire Aderinokun CSS3的calc(...

  • CSS3:calc() 属性用法

    简介: calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,可以使用calc()给元素...

  • CSS calc计算属性

    calc()是css3的一个新增的功能,用来指定元素的长度,你可以使用calc()给元素的border、margi...

  • CSS3之calc()

    一、calc()是什么 calc是英文单词calculate(计算)的缩写,是css3新增的功能,calc() 函...

  • less下calc混合单位运算

    问题 在less中,使用calc(100% - 7px)或者calc(100% - 7rem)的结果都是calc(...

网友评论

    本文标题:Calc 在CSS3中的使用

    本文链接:https://www.haomeiwen.com/subject/evwedxtx.html