轻松掌握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圆角样式分享自定义按钮样式
Dec 27 HTML / CSS
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
Aug 15 HTML / CSS
浅谈css3中calc在less编译时被计算的解决办法
Dec 04 HTML / CSS
canvas实现飞机打怪兽射击小游戏的示例代码
Jul 09 HTML / CSS
使用html2canvas将页面转成图并使用用canvas2image下载
Apr 04 HTML / CSS
仿酷狗html5手机音乐播放器主要部分代码
May 15 HTML / CSS
一波HTML5 Canvas基础绘图实例代码集合
Feb 28 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
May 13 HTML / CSS
详解如何获取localStorage最大存储大小的方法
May 21 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
Feb 03 HTML / CSS
css3新特性的应用示例分析
Mar 16 HTML / CSS
什么是css原子化,有什么用?
Apr 24 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php时间计算相关问题小结
2016/05/09 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
Prototype Class对象学习
2009/07/19 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
详解Python中的type和object
2018/08/15 Python
python logging日志模块原理及操作解析
2019/10/12 Python
python opencv进行图像拼接
2020/03/27 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
初中高效课堂实施方案
2014/02/26 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
科技活动总结范文
2015/05/11 职场文书
爱护公物主题班会
2015/08/17 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL