巧用CSS3的calc()宽度计算做响应模式布局的方法


Posted in HTML / CSS onMarch 22, 2018

今天浏览这个http://www.sitepoint.com站时,因为好奇看了下人家写的代码,结果发现了这行代码,

巧用CSS3的calc()宽度计算做响应模式布局的方法

于是就研究了一下,calc()从字面我们可以把他理解为一个函数function。其实calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定元素的长度。比如说,你可以使用calc()给元素的border、margin、pading、font-size和width等属性设置动态值。为何说是动态值呢?因为我们使用的表达式来得到的值。不过calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。

calc()能做什么?

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

calc()语法

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

width: calc(expression);

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

calc()的运算规则

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

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

浏览器的兼容性

巧用CSS3的calc()宽度计算做响应模式布局的方法

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

li{
float:left;

width:33.3333%;
height:50px;

padding:10px;
margin-right:10px;

background:#FF6666;
border:5px solid #DAC8A7;
}

效果图:

巧用CSS3的calc()宽度计算做响应模式布局的方法

它是不会好好并列的,在这种情况下就不好算了,就算算出来也有那么一点误差,不是吗?现在我们就用到了calc(),

li{
float:left;

//width:33.3333%;
height:50px;

padding:10px;
margin-right:15px;

background:#FF6666;
border:5px solid #DAC8A7;

width:calc(33.3333% - (10px + 5px) * 2 - 15px )

}

意思是(width-(padding+border)*2-margin)

现在可以并排了

巧用CSS3的calc()宽度计算做响应模式布局的方法

好了,到这就告一段络了,再稍微优化一下左右边15px的空距,让两边都挨边。就在父级上加个margin-right:-15px,OK 搞定,

现在拿这个去做响应模式应该很方便了,

还有一篇外国人写的具体如何做大家有兴趣的可以了解一下http://osvaldas.info/imitating-calc-fallback-fixed-width-sidebar-in-responsive-layout

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
不同浏览器对CSS3和HTML5的支持状况
Oct 31 HTML / CSS
css3实现一款模仿iphone样式的注册表单
Mar 20 HTML / CSS
一款利用纯css3实现的win8加载动画的实例分析
Dec 11 HTML / CSS
详解CSS3中Media Queries的相关使用
Jul 17 HTML / CSS
使用CSS3来实现滚动视差效果的教程
Aug 24 HTML / CSS
浅谈CSS3中display属性的Flex布局的方法
Aug 14 HTML / CSS
css3 矩阵的使用详解
Mar 20 HTML / CSS
CSS3.0实现霓虹灯按钮动画特效的示例代码
Jan 12 HTML / CSS
基于Canvas+Vue的弹幕组件的实现
Jul 23 HTML / CSS
HTML5标签大全
Nov 23 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
Dec 04 HTML / CSS
HTML+CSS实现导航条下拉菜单的示例代码
Aug 02 HTML / CSS
利用css3径向渐变做一张优惠券的示例
Mar 22 #HTML / CSS
css3 边框、背景、文本效果的实现代码
Mar 21 #HTML / CSS
利用CSS3 动画 绘画 圆形动态时钟
Mar 20 #HTML / CSS
css3 矩阵的使用详解
Mar 20 #HTML / CSS
CSS3 :default伪类选择器使用简介
Mar 15 #HTML / CSS
css3编写浏览器背景渐变背景色的方法
Mar 05 #HTML / CSS
CSS3下的渐变文字效果实现示例
Mar 02 #HTML / CSS
You might like
PHP一些常用的正则表达式字符的一些转换
2008/07/29 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
Python显示进度条的方法
2014/09/20 Python
numpy中索引和切片详解
2017/12/15 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
pygame实现简易飞机大战
2018/09/11 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
大学本科毕业生的自我鉴定
2013/11/26 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
2014庆六一活动方案
2014/03/02 职场文书
企业员工集体活动方案
2014/08/17 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
党员年终个人总结
2015/02/14 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
python实现高效的遗传算法
2021/04/07 Python