单位转换工具
px
px是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(Dots Per Inch,每英寸像素数),在扫描打印时一般都有DPI可选。Windows系统默认是96dpi,Apple系统默认是72dpi。
特点
- IE无法调整那些使用px作为单位的字体大小(缩放)
- 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位
- Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核)
em
em
指字体高,所有浏览器的默认字体高都是16px
。所以未经调整的浏览器都符合: 1em=16px
。那么12px=0.75em
, 10px=0.625em
。为了简化font -size
的换算,需要在css中的body选择器中声明Font-size=62.5%
,这就使em
值变为16px*62.5%=10px
, 这样12px=1.2em
, 10px=1em
, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。
特点
1em
指的是一个字体的大小,它会继承父级元素的字体大小,所以不是一个固定的值。任何浏览器的默认字体大小都是16px
。所以12px = 0.75em
。实际应用中为了方便换算,通常会如下设置样式:
body {
font-size: 62.5%;
}
这样,1em = 10px
。常用的1.2em
上就是12px
。
在中文文章的格式中,每个段落开头都要空出2格,如果用px做单位,对于12px的字体则需要24px,以此类推,但是对于em来说就相对简单了。
p {
text-indent: 2em;
}
注意点
- 标签嵌套字体增大
em是想对父元素的font-size
属性来决定字高的。那么在多级嵌套下就会出现1.2em * 1.2em = 1.44em
的问题出现。如:
<style>
body { font-size: 62.5%; }
.container { font-size: 1.2em; }
.container p { font-size: 1.2em; }
</style>
<div class="container">
我是文字1
<p>我是文字2</p>
</div>
在上述例子中'我是文字2'
会比'我是文字1'
大,因为p
的font-size
属性是基于1em = 12px
的字高去计算自身内部的em
值:
/* 1em = 16px -> 计算后 1em = 10px */
body { font-size: 62.5%; }
/* 1em = 10px -> 计算后 1em = 12px */
/* 在container中的字体 都会为12px */
.container { font-size: 1.2em; }
/* 1em = 12px -> 计算后 1em = 14.4px */
/* 在p中的字体 都会为14.4px */
.container p { font-size: 1.2em; }
所以如果想在p
中使用同样大小的字,不能设置为1.2em
,只能设置为1em
。
- IE中12px的汉字偏大
12px
(1.2em)大小的汉字在IE中并不等于直接用12px
定义的字体大小,而是稍大一点。你只需在body
选择器中把62.5%
换成63%
就能正常显示了。原因可能是IE处理汉字时,对于浮点的取值精确度有限。
该象只发生在
12px
的汉字,英文不存在此现象。
body {
font-size: 63%;
}
rem
rem
是CSS3新增的一个相对单位(root em,根em)。这个单位与em的区别在于使用rem
相对的是HTML
根元素。只要根元素不修改font-size
属性,那么rem
的想对大小不会变,而em
是相对父元素的font-size
设置想对大小。
可以避免em
字体大小逐层复合的连锁反应。目前,除了IE8
及更早版本外,所有浏览器均已支持rem
。对于不支持它的浏览器,应对方法也很简单,就是多写一个绝对单位的声明。这些浏览器会忽略用rem设定的字体大小。
p {
font-size: 14px;
font-size: .875rem;
}
优点
不会出现像em
那样1.2em * 1.2em = 1.44em
的情况出现,因为rem
是相对html
的font-size
设置,而em
是相对父元素的font-size
<style>
html { font-size: 62.5%; }
.container { font-size: 1.2rem; }
.container p { font-size: 1.2rem; }
</style>
<div class="container">
<!-- '我是文字1'和'我是文字2'是一样大的 -->
我是文字1
<p>我是文字2</p>
</div>
必须设置html的css样式,否则会按照默认的
1rem = 16px
。
缺点
CSS3新增的特性,所以只有支持C3的浏览器才兼容。解决方法低版本浏览器使用px,高版本使用rem。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。