CSS的字体单位

首先,本文所讨论的“坑”是在做回应式网页设计( Responsive Web Design 以下简称 RWD)时显现的,如果你还只是在做传统的Web设计这算不上是一个坑,因为传统的Web页面是死的,不会自动调节不能适应各类设备屏幕尺寸自然不会产生任何尺寸变化的问题。相反地,要为不同设备上的用户提供最好的阅读或使用体验我们不可避免的就是对元素或字体的尺寸的测量与控制。由其是字体的尺寸,不知道你是否有以下的经历

同样的一个网页,同一份样式表,但:

  • 字体在mac 上很漂亮,但在windows很难看 ?
  • 文字在PC上位置正确,但在iPad上却错了位 ?
  • 文字块在Chrome上长度适合,但换了FireFox却变长了,甚至换了行 ?

如果不幸地被言中,那么真得好好检查一下样式表的字体尺寸单位与行高所使用的单位是否正确了。在CSS3中我们可以应用很多的字体单位,如: pt, px, em, rem 和百分比(这里只讨论字体单位,对于vw / vh这类元素长度单位不在此讨论范畴),这些单位的具体含义是什么,在什么场合使用,选择哪个单位在RWD中最为适合呢 ?那么就先来一个一个地去了解它们的意义与用法再对具体应用作出选择。

点阵单位(pt)

PT是point(磅)缩写,是一种固定长度的度量单位,大小为1/72英寸。如果在web上使用pt做单位的文字,字体的大小在不同屏幕(同样分辨率)下一样,这样可能会对排版有影响,但在Word中使用pt相当方便。因为使用Word主要目的都不是为了屏幕浏览,而是输出打印。当打印到实体时,pt作为一个自然长度单位就方便实用了:比如Word中普通的文档都用“宋体 9pt”,标题用“黑体 16pt”等等,无论电脑怎么设置,打印出来永远就是这么大。

可见如果将pt作为Web上的首选字体单位那就是一个大坑!pt只适用于打印与普通文档文字排版并不适用于Web.

像素单位 (px)

根据显示器的分辨率来确定长度,在老式web应用中多采用该单位;像素是相对于显示器屏幕分辨率而言的。譬如,WONDOWS的用户所使用的分辨率一般是96像素/英寸。而MAC的用户所使用的分辨率一般是72像素/英寸。

两种关系:一英寸=72pt(点)=96px(像素),网页中最常用到的:9pt=12px

px本身是一个极大的坑,也是最多人愿意跳进去的。相对于同一分辨率的屏幕它是一个具体准确的测量单位,我们用做矢量图也最喜欢使用这个单位(px值是绝对值), 所有的浏览器也是默认使用px来作为尺寸的测量单位,因此在网页设计时都会将px作为标准的尺寸单位使用。当没有互动移连网时代,没有RWD之前这是一个正确的选择,但时代变了px并不能适用于可变字体尺寸的场景,使用它会产生排版的变形。

像素单位会因屏幕分辨率变化而变型,不适于用作在各种设备上显示的网页的首选尺寸单位。

相对长度单位 (em)

em 是一个相对于父节点尺寸的相对长度单位,可以理解为字体尺寸的百分比单位,但与百分比不同的是 em是有默认常量值的,当不明确指定父节点字体尺寸时,任意浏览器的默认字体高(line-height)都是16px。所以未经调整的浏览器都符合: 1em=16px , 那么12px=0.75em, 10px=0.625em。这是一个极为常用的换算公式。 em 是最适用于RWD的一种标准字体尺寸,支持字体放缩,可根据屏幕分辨率以及不同浏览器间的显示差异作出微调,确保字体在不同的设备上,保持视觉与设计的一至性。值得注意的是,既然是相对单位就必定有参照物(元素),如果参照物不存在侧采用16px作为真实尺寸。以此理论我们就可以为我们的站点的样式表的最开始部分加上以下的代码:

html { font-size: 100%; // 通常默认值为 16px }
body { font-size: 0.75em; // 12px }
h1 { font-size: 2em; // 24px }

如果我们想将1em=16px这个默认规则改变的话,如将1em=12px可以写成这样:

html { font-size: 75%; // 12px }
body { font-size: 1em; // 12px }
h1 { font-size: 2em; // 24px }

如果我们希望在桌面显示的字体更为精细,而在移动设备上显示的字体可更为清晰的话也可以这样来写:

html { font-size: 75%; // 12px }
@media only screen and (max-device-width: 480px) {
    html { font-size: 100%; // 16px }
}

以上是举出最简单的例子以帮助我们理解em的用法,而在实际应用中则需要解决另一方面的问题:默认元素样式。各种浏览器对不同的标准元素有不同的默认样式,由其是字体。如果要保持字体的一至性就需要在样式表中明确地重写这些样式以保证浏览器间的兼容性。如:li 的字体会按照ul的字体尺寸计算相对的大小:

html { font-size: 75%; // 12px }
body { font-size: 1em; // 12px }
li { font-size: 0.833em; // 10px }

当然<button/>, <h1>~<h6>, <summary/>, <detail> 等还有很多的元素都需要进行这个标准化的过程,如果觉得这个工作很麻烦也可以去下载著名的 normalize.css 样式表完成这个重置工作,虽然看起来很麻烦,但是这却可以避免在整个项目设计的过程中掉入这些由于尺寸所带来的不必要而耗时的调整。

相对根节点长度单位 (rem)

CSS3引入新的字体尺寸单位 rem ,可以简单记忆为root rm。

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

em单位是相对于父节点的font-size,会有一些组合的问题,而rem是相对于根节点(或者是html节点),意思就是说你可以在html节点定义一个单独的字体大小,然后所有其他元素使用rem相对于这个字体的百分比进行设置

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

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*/}

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

如果你习惯了使用px作为测量单位而又希望可以使用到rem 这种相对单位的话 , 那么我们可以做一个简单的mixin:

@base-font: 12px;
@mixin font-size(@font-size){
    font-size: @font-size;
    font-size: (@font-size/@base-font-size)*1rem;
}
li { font-size(10px); }

关于兼容性的考虑

rem 是CSS3新引进来的一个度量单位,大家心里肯定会担心浏览器的支持情况。其实支持的浏览器还是蛮多的,比如:Mozilla Firefox 3.6+、Apple Safari 5+、Google Chrome、IE9+和Opera11+。只是可怜的IE6-8不支持。不过使用单位设置字体,可不能完全不考虑IE了,如果你想使用这个REM,但也想兼容IE下的效果,可你可考虑“px”和“rem”一起使用,用”px”来实现IE6-8下的效果,然后使用“Rem”来实现代浏览器的效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容