轻松掌握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实现粒子旋转伸缩加载动画
Apr 22 HTML / CSS
CSS3属性box-shadow使用指南
Dec 09 HTML / CSS
html5中 media(播放器)的api使用指南
Dec 26 HTML / CSS
使用HTML5里的classList操作CSS类
Jun 28 HTML / CSS
利用三角函数在canvas上画虚线的方法
Jan 11 HTML / CSS
微信端html5页面调用分享接口示例
Mar 14 HTML / CSS
canvas离屏技术与放大镜实现代码示例
Aug 31 HTML / CSS
html5自动播放mov格式视频的实例代码
Jan 14 HTML / CSS
清除canvas画布内容(点擦除+线擦除)
Aug 12 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
Aug 17 HTML / CSS
HTML速写之Emmet语法规则的实现
Apr 07 HTML / CSS
深入理解CSS 中 transform matrix矩阵变换问题
Aug 30 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
php实现小程序支付完整版
2018/10/09 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
Javascript下的keyCode键码值表
2007/04/10 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
python制作花瓣网美女图片爬虫
2015/10/28 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Django values()和value_list()的使用
2020/03/31 Python
虚拟机下载python是否需要联网
2020/07/27 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
Ejb技术面试题
2015/04/29 面试题
《老王》教学反思
2014/02/23 职场文书
副处级干部考察材料
2014/05/17 职场文书
音乐节策划方案
2014/06/09 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
小鞋子观后感
2015/06/05 职场文书
Python实现自动玩连连看的脚本分享
2022/04/04 Python