初探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的@media来编写响应式的页面
Nov 01 HTML / CSS
CSS3 Backgrounds属性相关介绍
May 11 HTML / CSS
分享CSS3制作卡片式图片的方法
Jul 08 HTML / CSS
浅谈CSS3动画的回调处理
Jul 21 HTML / CSS
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
Sep 10 HTML / CSS
html5理解head_动力节点Java学院整理
Jul 13 HTML / CSS
Html5 语法与规则简要概述
Jul 29 HTML / CSS
移动端HTML5实现文件上传功能【附代码】
Mar 25 HTML / CSS
html5 canvas手势解锁源码分享
Jan 07 HTML / CSS
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
Mar 30 HTML / CSS
利用html+css实现菜单栏缓慢下拉效果的示例代码
Mar 30 HTML / CSS
深入理解CSS 中 transform matrix矩阵变换问题
Aug 30 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 mcrypt可逆加密算法分析
2011/07/19 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
python中open函数的基本用法示例
2019/09/07 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
数控专业个人求职信范例
2013/11/29 职场文书
入党自我评价范文
2014/02/02 职场文书
电子商务专业求职信
2014/03/08 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
MongoDB数据库的安装步骤
2021/06/18 MongoDB
Python之matplotlib绘制折线图
2022/04/13 Python