轻松掌握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动画之利用requestAnimationFrame触发重新播放功能
Sep 11 HTML / CSS
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
Nov 29 HTML / CSS
css3和jquery实现自定义checkbox和radiobox组件
Apr 22 HTML / CSS
纯CSS实现设置半个字符的样式
Jul 03 HTML / CSS
简单总结CSS3中视窗单位Viewport的常见用法
Feb 04 HTML / CSS
CSS3 transforms应用于背景图像的解决方法
Apr 16 HTML / CSS
详解HTML5中垂直上下居中的解决方案
Dec 20 HTML / CSS
详解FireFox下Canvas使用图像合成绘制SVG的Bug
Jul 10 HTML / CSS
HTML5之tabindex属性全面解析
Jul 07 HTML / CSS
详解前端HTML5几种存储方式的总结
Dec 27 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
Aug 28 HTML / CSS
Unicode中的CJK(中日韩统一表意文字)字符小结
Dec 06 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 星际争霸
用来解析.htgroup文件的PHP类
2012/09/05 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
使用js获取QueryString的方法小结
2010/02/28 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
python修改字典内key对应值的方法
2015/07/11 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
Python从零开始创建区块链
2018/03/06 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
opencv3/C++ 平面对象识别&amp;透视变换方式
2019/12/11 Python
如何通过python实现人脸识别验证
2020/01/17 Python
python爬取代理ip的示例
2020/12/18 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
巾帼文明岗申报材料
2014/05/01 职场文书
女生节标语
2014/06/26 职场文书
高考升学宴答谢词
2015/01/20 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
详解在OpenCV中如何使用图像像素
2022/03/03 Python
MySQL创建管理RANGE分区
2022/04/13 MySQL