CSS calc() 响应式布局
calc()从字面可以理解为一个函数function。calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能。比如说,可以使用calc()给元素的border、margin、pading、font-size和width等属性通过计算表达式设置动态值。

calc()能做什么?

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

calc()语法

calc()语法非常简单,支持算数运算符,使用数学表达式来表示:

  1. width: calc(expression);

其中expression是一个表达式,用来计算长度的表达式。calc()的运算规则
calc()使用通用的数学运算规则,但是也提供更智能的功能:

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

举个例子,做一个三列并排的模块,宽度按百分比、有padding值、有border值、还有margin-right,而且这三个值是px,

  1. li{
  2. list-style-type:none;
  3. float:left;
  4. width:33.3333%;
  5. height:50px;
  6. padding:10px;
  7. margin-right:10px;
  8. background:#FF6666;
  9. border:5px solid #DAC8A7;
  10. }

效果图:
image.png
它是不会好好并列的,在这种情况下就不好计算了,就算算出来也有那么一点误差,现在就用到了calc(),

  1. li{
  2. list-style-type:none;
  3. float:left;
  4. //width:33.3333%;
  5. height:50px;
  6. padding:10px;
  7. margin-right:15px;
  8. background:#FF6666;
  9. border:5px solid #DAC8A7;
  10. width:calc(33.3333% - (10px + 5px) * 2 - 15px )
  11. }

通过(width-(padding+border)*2-margin)进行计算。image.png
再稍微优化一下左右边15px的空距,让两边都挨边。在父级上加个margin-right:-15px,现在用这个去做响应模式应该很方便了。