一、px与em

用px设置文字大小是再正常不过的事情,比如

html {font-size: 12px;}

随处可见的在设置width、height使用px,这也是细致稳妥的设置方法,这样做的缺点在于调整浏览器的文字大小并未影响以px为单位的文本,这对一部分用户造成了不便。

用em设置文字大小弥补了这个问题,em是一个相对单位。文字大小用em表示的情况下,可以随着浏览器字号(比如在chrome下“设置->高级设置->字号”)的变大(变小)而变大(变小),使用格式与px基本一样,比如

p {font-size: 1em;}

以上面这个p元素为例,em的计算方式是这样的:

  1. 若p的父元素设置了文字大小,如font-size:20px,则1em=20px;
  2. 若父元素没有设置文字大小,则继续寻找上层节点的文字大小,直到根节点html;
  3. 若根节点html没有设置文字大小,则取浏览器默认文字大小16px。

使用em有一个令人头疼的地方:

假设的文档结构是这样的:html>p>span,样式是这样的:

html {
font-size: 62.5%;/* 10px÷16px=62.5% */
}
p {
font-size: 1.4em;/* 14px */
}

现在我想设置span的文字大小为12px,我需要计算12/14=85.7%

span {
font-size: 0.857em/* 12px/14px=85.7% */
}

若还要设置span里面子节点的文字大小,计算会越来越痛苦。。。

这就是该rem出现的时候了。

二、rem

在CSS3中引入了rem,rem是指根元素(root element,html)的文字大小,IE9+与Firefox、Chrome、Safari、Opera等主流版本都支持。

设置过根节点的文字大小后,所有子节点的文字大小全部相对于根节点计算。比如html为10px,则1.2rem=12px,2rem=20px...以此类推。

html {
font-size: 62.5%;/* 10px÷16px=62.5% */
}
p {
font-size: 14px;
font-size: 1.4rem;
}
span {
font-size: 12px;
font-size: 1.2rem;
}

为了兼容不支持rem的浏览器,要在设置rem的前面写上对应的px值,实现优雅降级。

使用rem的好处是:它具有em的相对特性(相对浏览器),又不会像em一样难以计算和控制。

用rem设置文字大小的更多相关文章

  1. 响应式十日谈第一日:使用 rem 设置文字大小

    上面回顾: 在序言中我们已经提到了响应式的一些基本理念,比如: 响应式网页不仅仅是响应不同类型的设备,而且需要响应不同的用户需求.响应式的初衷是为了让信息更好的传递交流,让所有人无障碍的获取信息,同时 ...

  2. 使用 rem 设置文字大小

    一.那到底什么是 rem 呢? 规范中明确写道: Equal to the computed value of ‘font-size’ on the root element. 「rem」是指根元素( ...

  3. 【转】CSS3的REM设置字体大小

    rem 长度单位   在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: ...

  4. CSS3的REM设置字体大小

    在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: em vs. px v ...

  5. Android中设置文字大小的定义类型

    在Android中所有的组件可以设置大小,但是在设置大小的时候需要指定其单位,这些单位如下: px(pixels):像素: dip(device independent pixels):依赖于设备的像 ...

  6. QLabel设置文字大小和颜色

    https://blog.csdn.net/fm0517/article/details/4805462 ui.label是QLabel ui.label_4->setText("so ...

  7. Eclipse设置文字大小

    1,选择窗口,preference 2,general

  8. UIButton修改文字大小问题

    一.问题描述 通过UIButton对象font属性设置文字大小,却发现该属性在2.0.3.0就已经被废弃,ios不建议使用. 图1-1:点出UIButton对象的font属性提示被废弃 图1-2:UI ...

  9. iOS UIAlertView 文字对其方式 文字大小 设置方法

    - (void) willPresentAlertView:(UIAlertView *)alertView { for (UIView *subViewin alertView.subviews) ...

随机推荐

  1. tracert和traceroute使用

    Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析.每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间. 转自 ...

  2. java并发-同步容器类

    java平台类库包含了丰富的并发基础构建模块,如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类. 同步容器类 同步容器类包括Vector和Hashtable,是早期JDK的一部分 ...

  3. [ python ] 网络编程(2)

    黏包问题 这样一个实例 import socket import subprocess sk_server = socket.socket() # 创建 socket对象 sk_server.bind ...

  4. ASP.NET Core 2.0 MVC 发布部署--------- SUSE 16 Linux Enterprise Server 12 SP2 X64 具体操作

    .Net Core 部署到 SUSE 16 Linux Enterprise Server 12 SP2 64 位中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk ...

  5. 转:在CentOS 7.3使用yum安装 MySql5.6.24

    按照CentOS 6.5的方法在CentOS 7上安装会失败,需要按照下文进行安装. 1.安装rpm包 Linux系统自带的repo是不会自动更新每个软件的最新版本(基本都是比较靠后的稳定版),所以无 ...

  6. csu 1806 & csu 1742 (simpson公式+最短路)

    1806: Toll Time Limit: 5 Sec  Memory Limit: 128 MB  Special JudgeSubmit: 256  Solved: 74[Submit][Sta ...

  7. HBase 入门笔记-安装篇

    一.前言 接触HBase已近半年,从一无所知到问题的解决,在数据落地方面也有了一定的了解,在此记录这半年来碰到的一些问题和对一些数据落地方面的见解,本篇主要介绍一下hbase安装方面的信息 二.安装环 ...

  8. java中Property类的基本用法

    1 配置.properties文件 2 获取输入流的方法 1)FileInputStream fi = new FileInputStream(properties文件路径); 2)InputStre ...

  9. oracle 12C wmsys.wm_concat()函数

    http://blog.itpub.net/31392094/viewspace-2149577/

  10. GUC-5 CountDownLatch闭锁

    /* * CountDownLatch :闭锁,在完成某些运算是,只有其他所有线程的运算全部完成,当前运算才继续执行 */ public class TestCountDownLatch { publ ...