个人收藏用,转载自:http://www.w3cplus.com/css3/define-font-size-with-css3-rem

在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: em vs. px vs. pt vs. percent这样的PK大局。不幸的是,仍然有不同的利弊,使各种技术都不太理想,但又无法不去用。真是进也难,退也难呀。

最近在学习em的相关知识的时候,无意之间让我拾得一宝,就是使用rem来设置Web页面的字体大小。让我一下子就来劲了,一口气看完并测试了一回,还真是爽歪歪的呀。师傅说好东西不能吃独食,于我就在这里给大家吹吹这个从没见过的REM

在详细介绍rem之前,我们先一起来回顾一下我们常用的两种记量单位,也是备受争论的两个:

  1. PX为单位
  2. EM为单位

PX为单位

在Web页面初期制作中,我们都是使用“px”来设置我们的文本,因为他比较稳定和精确。但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,他改变了浏览器的字体大小,这时会使用我们的Web页面布局被打破。这样对于那些关心自己网站可用性的用户来说,就是一个大问题了。因此,这时就提出了使用“em”来定义Web页面的字体。

em为单位

前面也说了,使用是“px”为单位是比较方便,而又一致,但在浏览器中放大或缩放浏览页面时会存在一个问题,要解决这个问题,我们可以使用“em”单位。Richard Rutter'在《How to size text using ems》一文中有做过详细的介绍,追至早一点,Richard Rutter也在《How to Size Text in CSS》中进行过深入的剖析。

这种技术需要一个参考点,一般都是以<body>的“font-size”为基准。比如说我们使用“1em”等于“10px”来改变默认值“1em=16px”,这样一来,我们设置字体大小相当于“14px”时,只需要将其值设置为“1.4em”。

    body {font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/}h1 {font-size: 2.4em; /*2.4em × 10 = 24px */}p    {font-size: 1.4em; /*1.4em × 10 = 14px */}li {font-size: 1.4em; /*1.4 × ? = 14px ? */}

为什么“li”的“1.4em”是不是“14px”将是一个问号呢?如果你了解过“em”后,你会觉得这个问题是多问的。前面也简单的介绍过一回,在使用“em”作单位时,一定需要知道其父元素的设置,因为“em”就是一个相对值,而且是一个相对于父元素的值,其真正的计算公式是:

1 ÷ 父元素的font-size × 需要转换的像素值 = em值

这样的情况下“1.4em”可以是“14px”,也可以是“20px”,或者说是“24px”,总之是一个不确定值,那么解决这样的问题,要么你知道其父元素的值,要么呢在任何子元素中都使用“1em”。这样一来可能又不是我们所需要的方法。

这里我只是简单的介绍了一个这两个单位的使用,具体一点的大家可以参阅:

  1. Best Practices的站长Kyle的《CSS Font-Size: em vs. px vs. pt vs. percent》
  2. Converting px into percentage and em for relative CSS font sizes
  3. Em Vs Percent Widths
  4. CSS: Units of Measurement
  5. Jennifer Kyrnin的Using Points, Pixels, Ems, or Percentages for CSS Fonts

Rem为单位

CSS3的出现,他同时引进了一些新的单位,包括我们今天所说的rem。在W3C官网上是这样描述rem的——“font size of the root element” 。下面我们就一起来详细的了解rem。

前面说了“em”是相对于其父元素来设置字体大小的,这样就会存在一个问题,进行任何元素设置,都有可能需要知道他父元素的大小,在我们多次使用时,就会带来无法预知的错误风险。而rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个参考值,,在根元素中设置多大的字体,这完全可以根据您自己的需,大家也可以参考下图:

我们来看一个简单的代码实例:

            html {font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/}body {font-size: 1.4rem;/*1.4 × 10px = 14px */}h1 { font-size: 2.4rem;/*2.4 × 10px = 24px*/}

我在根元素<html>中定义了一个基本字体大小为62.5%(也就是10px。设置这个值主要方便计算,如果没有设置,将是以“16px”为基准 )。从上面的计算结果,我们使用“rem”就像使用“px”一样的方便,而且同时解决了“px”和“em”两者不同之处。

浏览器的兼容性

rem是CSS3新引进来的一个度量单位,大家心里肯定会觉得心灰意冷呀,担心浏览器的支持情况。其实大家不用害怕,你可能会惊讶,支持的浏览器还是蛮多的,比如:Mozilla Firefox 3.6 、Apple Safari 5 、Google Chrome、IE9 和Opera11 。只是可怜的IE6-8无法,你们就把他们当透明了吧,我向来都是如此。

不过使用单位设置字体,可不能完全不考虑IE了,如果你想使用这个REM,但也想兼容IE下的效果,可你可考虑“px”和“rem”一起使用,用"px"来实现IE6-8下的效果,然后使用“Rem”来实现代浏览器的效果。就让IE6-8不能随文字的改变而改变吧,谁让这个Ie6-8这么老呢?哈。。。。大家不仿试试,还蛮有意思,说不定这个就是主流的度量单位了。

rem、px、em之间的区别以及网页响应式设计写法相关推荐

  1. CSS样式-网页响应式设计

    响应式设计-网页CSS样式知识 百分比布局 弹性布局 网格布局 最大最小宽度 视图窗口 多媒体查询 最大最小宽度 竖屏横屏 尺寸比 容器属性 容器查询单位 伪类has 百分比布局 简单的讲就是将元素按 ...

  2. 转自CSDNattilax的专栏 :自适应网页设计 跟 响应式 设计的区别跟原理and实践总结...

    响应式Web设计(Responsive Web design)的理念是: 1 #-----------自适应布局VS响应式布局 2 设计思路Mobile First 2 #---手机and平板分辨率  ...

  3. html中字体响应式怎么写,css字体单位之间的区分以及字体响应式实现_html/css_WEB-ITnose...

    问题场景: 在实现响应式布局的过程中,如何设置字体大小在不同的视窗尺寸以及不同的移动设备的可读性? 需要了解的有: 1.px,em,pt之间的换算关系 1em = 16px 1px = 1/16 em ...

  4. 一个简单demo通过em实现‘响应式设计、em、文字图标svg’

    大多数网站所谓的响应式设计,只是在不同大小屏幕上能正常显示罢了,在大屏幕上显示全部页面,在小屏幕上隐藏一部分不重要的页面,这样的响应式设计 只是为了兼容pc和移动,但在移动上的效果却是很不理想的,隐藏 ...

  5. 网页 布局响应式设计

    一.为什么要使用响应式设计? 我们想让我们的网站通过响应用户的行为.设备的屏幕大小和屏幕方向,从而在所有设备上都能用. 二.一个碎片化的世界 截止2013年,有成千上万种不同的设备在浏览网页,所以我们 ...

  6. 经典网页设计:10个响应式设计的国外购物网站

    今天我想与大家分享电子商务主题的网站设计,更精确地说是为设计在线商店提供新思想.每个人都知道移动技术的市场发展迅速,已经很难找到一个人没有手机的人了.响应设计给我们提供了一个巨大的机遇:站点的访问量的 ...

  7. [css] 说说响应式设计(responsive design)和自适应设计(adaptive design)的区别?

    [css] 说说响应式设计(responsive design)和自适应设计(adaptive design)的区别? 响应式是通过视口分辨率识别不同客户端展现不同的布局和内容,一套代码.自适应是通过 ...

  8. 响应式网页设计教程:展示响应式设计的基本原理

    响应式网页设计,毫无疑问地变得越来越重要了.如果你还没听说过响应式设计,可以先看看我之前发的文章响应式网站.对新手来说, 响应式设计听起来可能会有点复杂, 但事实上,它比你想象的简单得多.为了让你能快 ...

  9. pc网页响应式在手机网页宽度980px问题方案

    pc网页响应式在手机网页宽度980px问题方案 html中加上如下代码: <meta name="viewport" content="width=device-w ...

最新文章

  1. IT技术文章示例(附源码)
  2. 均值滤波java_均值滤波,中值滤波,最大最小值滤波
  3. mysql 8.0.19 winx64安装及修改初始密码
  4. 【★★★★★】提高PHP代码质量的36个技巧
  5. 如何使用Service的Context弹出Dialog对话框,即全局性对话框
  6. Node-webpack基本使用和详细案例
  7. 我的2008,专注而行
  8. 算法详解_【MOT】详解SORT与卡尔曼滤波算法
  9. 三菱GXWorks2 变换梯形图
  10. 国际市场营销知识框架图_留学热门丨伦敦里士满大学市场营销本科专业
  11. 百度之星2017 HDU 6114 Chess 组合数学
  12. 深度优先搜索--不撞南墙不回头
  13. 百度音频文件转写正式上线商用
  14. http-杂货铺.md
  15. UVA 11549 calcular conundrum 计算机老谜题
  16. 曼联彻底无缘下季欧冠
  17. Python解压缩ZIP格式
  18. 【独立版】零点城市社交电商V2.1.8.5全开源+VUE前端,新增券码等插件
  19. 使用 Tkinter 制作记事本
  20. 学习C#高级编程之XML

热门文章

  1. pandas处理csv
  2. 剑指offer(一):二维数组中的查找
  3. 美国华尔街拥抱区块链是最大的威胁
  4. jQuery UI全教程之一(dialog的使用教程)
  5. 字符,字符串,int之间互相转换
  6. HTML--HTML对象的关于位置和大小的属性的图解
  7. 不等式约束的拉格朗日乘数法_Abaqus血管支架仿真|接触约束执行方式
  8. tf.clip_by_value()
  9. static函数与普通函数区别
  10. docker启动odoo提示module没有安装_Ubuntu20.04通过docker安装微信