轻松掌握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实现表单验证效果(非常不错)
Jan 18 HTML / CSS
CSS3支持IE6, 7, and 8的边框border属性
Dec 28 HTML / CSS
CSS3实现王者匹配时的粒子动画效果
Apr 12 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
Apr 29 HTML / CSS
用HTML5制作数字时钟的教程
May 11 HTML / CSS
详解HTML5中的manifest缓存使用
Sep 09 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
Nov 16 HTML / CSS
web字体加载方案优化小结
Nov 29 HTML / CSS
H5页面适配iPhoneX(就是那么简单)
Dec 02 HTML / CSS
html2canvas截图空白问题的解决
Mar 24 HTML / CSS
详解canvas.toDataURL()报错的解决方案全都在这了
Mar 31 HTML / CSS
小程序实现悬浮按钮的全过程记录
Oct 16 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
关于尾递归的使用详解
2013/05/02 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
类似CSDN图片切换效果脚本
2009/09/17 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
《长相思》听课反思
2014/04/10 职场文书
导游词之长城八达岭
2019/09/24 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技