轻松掌握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 26 HTML / CSS
利用CSS3把图片变成灰色模式的实例代码
Sep 06 HTML / CSS
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
Dec 06 HTML / CSS
CSS3使用transition属性实现过渡效果
Apr 18 HTML / CSS
HTML5 canvas 基本语法
Aug 26 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
Jan 04 HTML / CSS
Html5大文件断点续传实现方法
Dec 05 HTML / CSS
字中字效果的实现【html5实例】
May 03 HTML / CSS
three.js模拟实现太阳系行星体系功能
Sep 03 HTML / CSS
前端H5 Video常见使用场景简介
Aug 21 HTML / CSS
关于flex 上下文中自动 margin的问题(完整例子)
May 20 HTML / CSS
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
Nov 11 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_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
javascript实现简单留言板案例
2021/02/09 Javascript
Python实现微信小程序支付功能
2019/07/25 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
pygame实现五子棋游戏
2019/10/29 Python
悦木之源美国官网:Origins美国
2016/08/01 全球购物
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
银行办公室岗位职责
2014/03/10 职场文书
社区服务活动总结
2014/05/07 职场文书
单位授权委托书范文
2014/08/02 职场文书
信仰心得体会
2014/09/05 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
员工年度工作总结2015
2015/05/18 职场文书
队列队形口号
2015/12/25 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs