轻松掌握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 响应式媒体查询的示例代码
Sep 25 HTML / CSS
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
Nov 18 HTML / CSS
2分钟教你实现环形/扇形菜单(基础版)
Jan 15 HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
Mar 15 HTML / CSS
Html5移动端弹幕动画实现示例代码
Aug 27 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
Jan 31 HTML / CSS
HTML5在线预览PDF的示例代码
Sep 14 HTML / CSS
canvas实现漂亮的下雨效果的示例
Apr 18 HTML / CSS
关于canvas绘制模糊问题的解决方法
Sep 24 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
Oct 08 HTML / CSS
CSS实现多个元素在盒子内两端对齐效果
Mar 30 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
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
vue mounted组件的使用
2018/06/18 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
Python字典简介以及用法详解
2016/11/15 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
Python 获取项目根路径的代码
2019/09/27 Python
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
班长竞选演讲稿
2014/04/24 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
关于车尾的标语大全
2015/08/11 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
python 远程执行命令的详细代码
2022/02/15 Python
Go语言grpc和protobuf
2022/04/13 Golang