初探CSS3中的calc()功能


Posted in HTML / CSS onJuly 14, 2015

之前,我们想要实现一个完美的宽度自适应的输入框好麻烦,曾经也被作为对前端技术的一个挑战。类似的常见场景还有100%宽+边框的容器等。遇到这些情况,我们不得不分外小心,因为各个浏览器的表现可能不一致。

现在,firefox和webkit相继支持calc()功能了,我们也可以学习下了。
calc()是干嘛的?

calc()是单词calculate(计算)的缩写,是css3的一个新的长度单位功能,可以使用简单的数学运算。

嗯,CSS3越来越高级了。
运算规则

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

    使用“+”“-”“*”“/”四则运算;
    可以使用百分比、px、em、rem等单位;
    可以混合使用各种单位进行计算。

实例:

我们来看几个小例子来理解下calc()功能吧:

CSS Code复制内容到剪贴板
  1. .box{ border:1px solid #dddwidth:calc(100%-2px) }  

容器宽度加上边框宽度正好100%。

CSS Code复制内容到剪贴板
  1. .box{ width:calc(10em+20px) }  

宽度,10em加20px。

CSS Code复制内容到剪贴板
  1. .box{ margin-left:20pxwidth:calc(100%/3-20px); }    
  2. .box:nth-child(3n){ margin-left:0; }  

3栏等宽布局。
浏览器支持

firefox 4.0+已经开支支持calc()功能,不过要使用-moz-calc()私有属性,chrome从19 dev版,也开始支持私有的-webkit-calc()写法,IE9这次则牛逼了一次,原生支持标准的不带前缀的写法了。Opera貌似还不支持~~

所以如果我们要用这个属性的话,要记得带上各浏览器的兼容性。

eric meyer提到w3c规范的一条备注(评论里面的同学也有提到):

    Note that the grammar requires spaces around binary ‘+’ and ‘-’ operators. The ‘*’ and ‘/’ operators do not require spaces. via CSS3 Values and Units specification

也就是说,”+”、”-“两个符号边上必须要有空格,而”*”、”/”符号则不是必须的。

然后我们可能要这样写:

CSS Code复制内容到剪贴板
  1. width: calc(100%/3 - 2*1em - 2*1px);  

这样写也是可以的:

CSS Code复制内容到剪贴板
  1. width: calc(100% / 3 - 2 * 1em - 2 * 1px);  

但是这样写就是错的:

CSS Code复制内容到剪贴板
  1. width: calc(100%/3-2*1em-2*1px);  

嗯,这样很容易写错啊。还好现在支持的浏览器还不太多,我会继续观望并保持更新~~

HTML / CSS 相关文章推荐
使用css3匹配手机屏幕横竖状态
Jan 27 HTML / CSS
一款纯css3实现简单的checkbox复选框和radio单选框
Nov 05 HTML / CSS
浅谈css3新单位vw、vh、vmin、vmax的使用详解
Dec 01 HTML / CSS
详解CSS3:overflow属性
Nov 17 HTML / CSS
canvas画布实现手写签名效果的示例代码
Apr 23 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
Jun 23 HTML / CSS
HTML5 audio标签使用js进行播放控制实例
Apr 24 HTML / CSS
H5调用相机拍照并压缩图片的实例代码
Jul 20 HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
Aug 22 HTML / CSS
H5混合开发app如何升级的方法
Jan 10 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
Nov 10 HTML / CSS
CSS SandBox应用场景及常见问题
Jun 25 HTML / CSS
CSS3中线性颜色渐变的一些实现方法
Jul 14 #HTML / CSS
CSS3中HSL和HSLA的简单使用示例
Jul 14 #HTML / CSS
用CSS3实现背景渐变的方法
Jul 14 #HTML / CSS
使用CSS3制作响应式导航菜单的方法
Jul 12 #HTML / CSS
使用CSS3来制作消息提醒框
Jul 12 #HTML / CSS
使用CSS3创建动态菜单效果
Jul 10 #HTML / CSS
简单介绍CSS3中Media Query的使用
Jul 07 #HTML / CSS
You might like
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
javascript 写类方式之五
2009/07/05 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
JsChart组件使用详解
2018/03/04 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
Python实现iOS自动化打包详解步骤
2018/10/03 Python
PyQt5实现QLineEdit添加clicked信号的方法
2019/06/25 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
网络编辑求职信
2014/04/30 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
房屋租赁协议书
2014/10/18 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
2015年人事科工作总结
2015/04/28 职场文书
食品药品安全责任书
2015/05/11 职场文书
导游词之山海关
2019/12/10 职场文书