轻松掌握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的checked伪类实现OL的隐藏显示的方法
Dec 18 HTML / CSS
10个很棒的 CSS3 开发工具 推荐
May 16 HTML / CSS
使用CSS3的appearance属性改变任何元素的浏览器默认风格
Dec 24 HTML / CSS
利用CSS3实现开门效果实例源码
Aug 22 HTML / CSS
CSS3 Notes: -webkit-box-reflect实现倒影的实例
Dec 08 HTML / CSS
详解CSS3新增的背景属性
Dec 25 HTML / CSS
使用HTML5中的contentEditable来将多行文本自动增高
Mar 01 HTML / CSS
使用phonegap创建联系人的实现方法
Mar 30 HTML / CSS
通过canvas转换颜色为RGBA格式及性能问题的解决
Nov 22 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
May 26 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
Aug 06 HTML / CSS
详解flex:1什么意思
Jul 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
星际流派综述
2020/03/04 星际争霸
php中的常用魔术方法总结
2013/08/02 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
Python获取apk文件URL地址实例
2013/11/01 Python
python简单实现旋转图片的方法
2015/05/30 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
python使用递归的方式建立二叉树
2019/07/03 Python
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
修理厂厂长岗位职责
2014/01/30 职场文书
yy司仪主持词
2014/03/22 职场文书
项目投资意向书
2014/04/01 职场文书
世博会口号
2014/06/20 职场文书
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技