轻松掌握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的新特性
Sep 05 HTML / CSS
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
Apr 01 HTML / CSS
10 套华丽的CSS3 按钮小结
Oct 03 HTML / CSS
CSS3制作半透明边框(Facebox)类似渐变
Dec 09 HTML / CSS
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
Jan 06 HTML / CSS
css3给背景图片加颜色遮罩的方法
Nov 05 HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
Jun 23 HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
Jan 11 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
Apr 17 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
Apr 15 HTML / CSS
基于HTML十秒做出淘宝页面
Oct 24 HTML / CSS
CSS实现渐变色边框(Gradient borders)的5种方法
Mar 25 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 array_multisort()函数的使用札记
2011/07/03 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
js 分栏效果实现代码
2009/08/29 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
JSX在render函数中的应用详解
2019/09/04 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
win7安装python生成随机数代码分享
2013/12/27 Python
深入浅出学习python装饰器
2017/09/29 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
简单了解python反射机制的一些知识
2019/07/13 Python
Python实现搜索算法的实例代码
2020/01/02 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
Python 操作 MySQL数据库
2020/09/18 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
水电维修专业推荐信
2014/09/06 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server