轻松掌握CSS3中的字体大小单位rem的使用方法


Posted in HTML / CSS onMay 24, 2016

CSS3中新的字体单位rem
前段时间无意中在wordpress主题中接触到一种字体单位rem,当时我就很好奇,毕竟以前没有见过,于是我马上查找资料,并测试了一回.

众所周知在web中有很多字体单位(font-size)较常见的有em,px,让我们对比一下这两种单位:

px是绝对值,准确而稳定.但是它的改变会影响页面布局.
em是相对值,它以父元素的大小为基准单位,来计算大小.所以很难把握.
考虑到这么多字体单位的优缺点,在CSS3中rem诞生了.rem也是相对单位(rem=root em)很明显rem是由em变化而来,或者说rem是em的升级版,具体来历.我们就不要去追究了,从字体表面上看,它就是这么回事.

root em,就是相对于根目录的em而不是相对于父元素,也就是说,它虽然是绝对值,但是只是相对于根目录来说也就是html,它不会随着其它元素的改变而改变.也就是说,我们只要设定html的文字大小就可以了.而不用考虑其它因素.

而且他还具有非常好的支持Chrome,Firefox,Safari,Opera,IE9+.IE6,7,8就只能使用px或者em了.

XML/HTML Code复制内容到剪贴板
  1. html{      
  2.     font-size:62.5%;      
  3. }  

为什么要这么设置呢?因为网页上的字体默认是16px,而16px的62.5%就是10px;也就是说这样的活1rem就等于10px,这个对于我们来说是非常棒的,font-size:1.2rem,当然为了兼容IE的低级版本还要写font-size:12px,别忘了要写在rem的前面.

在这里我要提到一点的就是,假如你要是用rem来设置行高,边距之类的单位.请在html中加入这么一句话:-webkit-text-size-adjust:none;来消除webkit的默认属性.否则在其它的地方rem不是以根目录作为基准值了.

canvas无法使用rem单位的解决方案
我们在使用canvas时需要设置画布的大小,即设置canvas标签的width,height属性。

XML/HTML Code复制内容到剪贴板
  1. <canvas width="200px" height="200px"></canvas>  

在移动端,画布的大小要根据屏幕的大小进行适配,我们一般采用rem结合媒体查询的方式。使用canvas时就遇到遇到一些问题:

canvas的width属性不支持rem单位(如果使用样式当然支持rem,但注意canvas的width属性与style中的width是有区别的),如下

CSS Code复制内容到剪贴板
  1. <canvas width="2.5rem" height="2.5rem"></canvas>  

translate方法传参是坐标位置,不带单位,如ctx.translate(10,10);
适配屏幕是必须的,但如何解决?用最原始的百分比布局就可以:

JavaScript Code复制内容到剪贴板
  1. //获取屏幕的宽度   
  2. var  clientWidth = document.documentElement.clientWidth;   
  3. //根据设计图中的canvas画布的占比进行设置   
  4. var canvasWidth = Math.floor(clientWidth*200/720);   
  5. canvas.setAttribute('width',canvasWidth+'px');   
  6. canvas.setAttribute('height',canvasWidth+'px');   
  7. //translate方法也可以直接传入像素点坐标  
HTML / CSS 相关文章推荐
纯CSS3绘制打火机动画火焰效果
Jul 18 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
Oct 19 HTML / CSS
CSS3 按钮边框动画的实现
Nov 12 HTML / CSS
html5中canvas学习笔记2-判断浏览器是否支持canvas
Jan 06 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(二)
Jan 21 HTML / CSS
基于第一个PhoneGap(cordova)的应用详解
May 03 HTML / CSS
Html5与App的通讯方式详解
Oct 24 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
Jan 14 HTML / CSS
前端H5 Video常见使用场景简介
Aug 21 HTML / CSS
HTML5 drag和drop具体使用详解
Jan 18 HTML / CSS
css display table 自适应高度、宽度问题的解决
May 07 HTML / CSS
微信小程序纯CSS实现无限弹幕滚动效果
Sep 23 HTML / CSS
CSS3中的Media Queries学习笔记
May 23 #HTML / CSS
详解CSS3的perspective属性设置3D变换距离的方法
May 23 #HTML / CSS
CSS3中设置3D变形的transform-style属性详解
May 23 #HTML / CSS
css 元素选择器的简单实例
May 23 #HTML / CSS
css sprite简单实例
May 23 #HTML / CSS
CSS3中的Transition过度与Animation动画属性使用要点
May 20 #HTML / CSS
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
May 17 #HTML / CSS
You might like
PHP实现图片简单上传
2006/10/09 PHP
phpize的深入理解
2013/06/03 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
Vue.directive使用注意(小结)
2018/08/31 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
Python的另外几种语言实现
2015/01/29 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
小学生常见病防治方案
2014/06/06 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
改进工作作风心得体会
2016/01/23 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript