轻松掌握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和html制作泡沫对话框实现代码
Mar 21 HTML / CSS
CSS3区域模块region相关编写示例
Aug 28 HTML / CSS
CSS3+JavaScript实现炫酷呼吸效果的示例代码
Jun 15 HTML / CSS
Html5如何唤起百度地图App的方法
Jan 27 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
Oct 17 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
Apr 29 HTML / CSS
用html5绘制折线图的实例代码
Mar 25 HTML / CSS
HTML5单页面手势滑屏切换原理分析
Jul 10 HTML / CSS
uniapp+Html5端实现PC端适配
Jul 15 HTML / CSS
浅析HTML5 meta viewport参数
Oct 28 HTML / CSS
HTML5在手机端实现视频全屏展示方法
Nov 23 HTML / CSS
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
Oct 16 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
在Windows版的PHP中使用ADO
2006/10/09 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
PHP _construct()函数讲解
2019/02/03 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
tensorflow自定义激活函数实例
2020/02/04 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
python ssh 执行shell命令的示例
2020/09/29 Python
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
公司活动方案范文
2014/03/06 职场文书
老人祝寿主持词
2014/03/28 职场文书
品酒会策划方案
2014/05/26 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python