童话说说技术创业美文职业
快好知
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

深度剖析!浏览器字体渲染的秘密

2月26日 相见欢投稿
  说到web性能,前端工程师很自然地反应是yahoo的30条优化规则。这些规则可以将网页加载从原来的几秒甚至十几秒较少到3s甚至1s以内。当一个完整界面展现在用户眼前时,内容就通过不同的字体、图片以及多媒体传达给用户。使用户在1s内看到网页和使用户留在网页上几分钟甚至几十分钟同样重要。字体作为内容承载信息的重要部分,若使用不“适当”的字体或者字体由于渲染等缘故对用户不友好,则会(有可能)造成不必要的用户流失。本文介绍浏览器的字体渲染,希望还未接触字体渲染的同事能通过本文对字体渲染有所了解。
  首先看下不同浏览器下的截图:
  很明显地看出,Chrome35截图中的非横竖笔画较IE11和Firefox30截图中的有明显的锯齿。
  理想的字体其边缘过渡平滑,而在屏幕上显示时,需要将字体栅格化(rasterization)为一个个像素点。采用黑白(blackandwhite)渲染无法体现字体的细节之处,会造成了边缘呈现锯齿状(jagged)的不平滑。为了解决这个问题,字体渲染引擎采用了以下方法进行平滑(Antialiasing):灰阶(grayscale)渲染、亚像素(subpixel)渲染。
  渲染方法
  灰阶渲染是一种通过控制字体轮廓上像素点的亮度达到字体原始形状的方法。
  亚像素渲染利用了LCD屏(液晶屏)中每个像素是由R、G、B三个亚像素的颜色和亮度混合而成一个完整像素的颜色这一原理,将字体轮廓上的像素点由三个亚像素体现以达到原始形状的方法。与灰阶渲染相比,分辨率在垂直方向放大了三倍,因此渲染效果更好,但是所耗内存也更多。因此在手机屏上,为了减少CPU开销,并未采用该字体渲染方法,而是采用的grayscale渲染。
  操作系统中的渲染API
  操作系统OS提供了支持不同的字体渲染方法的API。在windows下是GDI(GraphicsDeviceInterface)和DirectWrite,OSX下是Quartz。
  GDI分为GDIGrayscale和GDIClearType。前者为灰阶渲染API,后者是亚像素渲染API。由于GDIClearType并未对字体进行垂直方向的平滑,因此当字体较大时会出现边缘不平滑的情况。为了弥补GDIClearType的不足,MS实现了DirectWriteAPI,它在GDIClearType的基础上增加了垂直方向的平滑。
  但是!字体渲染的API都是由浏览器厂商自己选择的!
  使用同一颜色,感官上的颜色深浅为:黑白渲染subpixel。
  Chrome3536采用的是GDIClearType,因此在字体较大时边缘会出现毛刺,而FF30采用的DirectWrite则没有此类问题。如下图所示:
  
  根据以上两图可以发现,Chrome的字体渲染效果没有Firefox的好。为缩小Chrome与FFIE的差异,一种方法是使用webkittextstroke:0。5如果使用1px的话就有点粗了。
  虽然该hack使Chrome下字体的边缘有所光滑,但字体在webkit内核浏览器中看上去“模糊”了。
  常用字体在浏览器中的渲染情况
  
  
  
  从使用MicrosoftYahei,Tahoma和Arial字体可以看出,在Chrome35中,由于转换成GDIGrayscale渲染,49px的字比48px的边缘光滑很多。字体较大时,GDIGrayscale比GDIClearType具有更好的渲染效果。
  在实际中会遇到在如TahomaArial字体下17px和18px的“字重”有明显差别。这个现象涉及到字体设计,简单地说就是在浏览器渲染字体之前,字体本身会调整字型和笔画所占像素。想了解更多细节,请参考acloserlookatTrueTypehinting。
  启动Chrome中的DirectWrite
  在chrome:flags下启用实验性DirectWrite字体渲染系统:enabledirectwrite会使48px以下的字体均为subpixel渲染。仅适用于测试环境!(需重启Chrome)
  Chrome37beta将该特性移除实验特性,并将在Chrome37中实现在windows下使用DirectWriteAPI对字体渲染,相信在Chrome37中以上提到的浏览器字体渲染差异会得到解决。
  字体格式在不同浏览器下的渲染
  fontsmoothing:
  对应为subpixel和grayscale。
  已废止!
  fontweight:
  Chrome35,IE78:与normal字体渲染一致(包括数字和字母);
  IE9FF30:grayscale,部分简单中文字体保持原有渲染。
  fontstyle:
  Chrome35,IE78:与normal字体渲染保持一致;
  IE9FF30:subpixel渲染。
  opacity:属性值1
  Chrome35:subpixel渲染的字体“降级”为grayscale渲染;
  IE9FF30:保持不变
  transform2D
  transform:rotate(n);
  n90kdeg(k整数),保持未旋转的字体渲染;
  others,subpixel渲染。Chrome35在48px为grayscale渲染。
  transform:scale(x,y);与字体大小m有关。以simsun为例,具体如下:
  Chrome35:
  12,Chrome35subpixel渲染;
  12484823042304grayscale渲染,12px24px存在一定范围的黑白渲染(tahoma是12px16px)。
  FF30、IE9:
  999998019801grayscale渲染。
  transform:skew(n);
  n90kdeg(k为整数),保持未倾斜的字体渲染;
  others,subpixel渲染。Chrome35在49px为grayscale渲染,IE9,FF30在100px为grayscale渲染。
  transform2Dtransition
  运动中:以12px为例:在Chrome35和FF30下,运动中的字体均是grayscale渲染;
  运动结束:Chrome35,FF30,IE9均为subpixel渲染。
  从运动开始到运动结束产生了两次渲染变化(subpixel到grayscale,grayscale到subpixel)会出现“闪现”的现象。
  Transform3D
  当元素进入GPU中渲染时,在Chrome35中的字体为grayscale渲染,IE11和FF30保持subpixel渲染不变。若transform值函数(如translate3d(),scale(),rotate()等)中的参数为非整数,会导致字体模糊。在使用iScroll模拟滚动的项目中会出现字体模糊。以下是对该问题的一个还原:
  webkittransform:translate3d(1。5px,1。5px,0);
  webkittransform:translate3d(1px,1px,0);
  Chrome36中使用transform不需要webkit前缀了!
  为了防止以上模糊情况的出现,可以通过JS中的Math。round()Math。ceil()Math。floor()等函数使其为整数。
  当加入perspective()值时,Firefox30渲染又有所不同。
  transform:perspective(1px)translate3d(1。5px,1。5px,0);在FF30中作用的元素为grayscale渲染。
  transform:perspective(1px)translate3d(1px,1px,0);在FF30中作用的元素为subpixel渲染
  E11均为subpixel渲染。
  此情况下运用1的声明,IE10为grayscale。
  Chrometransform:perspective()对文档后面元素的影响
  Chrome35,当transform中声明有perspective()时,若文档后面声明transform的元素进入该声明作用的元素的layerborders的区域时,仍然会受到该声明的影响。声明作用元素的溢出部分同样会对后面元素造成影响。合成渲染层内部文字进入GPU渲染。
  启动Showcompositedlayerborders,在Chrome中测试的结果截图为:
投诉 评论 转载

设计师该如何挣得一席之地?前eBay(易趣)设计经理、Flickr用户体验和设计总监PhilKing用身体力行的15年向大众证明了一个事理设计的重要程度与产品、商业、工业制造等战略要……哪些例子最好地说明了UI过度设计?小编首先整理了来自马力知乎的回答:我反对过度设计这个说法。目前看到的所有过度设计的例子,都恰恰是设计不足,设计不到位,而不是过度。换句话说,是设计错了,而不是设计过……当理性碰撞感性交互驱动下的设计平台设计中,不仅要考虑视觉表现力,更应该从严密的逻辑层次上进行思考。如何在感性和理性中找到平衡,是设计师需要思考的一个问题。离开QQ会员加入TGideas的大家庭也有一年……校园app,那些年我想要的那一款你死哪去了?最近机缘巧合在安卓商店搜了下“校园应用”,看到了令人节操碎一地的一幕:某一大姨妈应用排名第一。一款以关爱女性生理周期为诉求的app,产品体验再怎么好,核心功能做得再好,也应该不……又一个阅后即焚?Instagram上线新的聊天工具BoltInstagram最近悄悄在iOS和安卓系统上上线了一款可以“一键发送”的通信工具,Bolt。这个应用可以让你快速地把图片或者视频发送给朋友,你发送的图片在TA读取之后就会自动……APP动效之美需内外兼修移动互联网时代已经到来,APP已如天空的繁星,数也数不清。随着手机硬件的不断升级,实现炫酷且流畅的动效不再是遥远的梦想。如果你是APP达人,喜欢试用各种APP,你肯定会发现越来……玩家的体验:手游设计未来的一切都是移动端的。移动端技术不仅改变了我们搜索互联网和玩游戏的方式,也改变了我们的生活方式。所以它的发展吸引了投资者,紧接着,他们将移动端平台推向更广阔的人群,也属……用户体验:生活场景的导购设计生活中有很多碎片化时间,而在这些场景跟时间中,陪伴用户最多的就是手机或者平板电脑,而如何利用碎片化时间的特点融入设计,从而提供用户体验。不同于传统逛街和PC网页逛街的情景……时隔七年百度首页变脸,极简意何在百度首页正式启用了极简风格,整个页面变得异常的干净,作为亿万人每天打开浏览器的第一页面,百度首页的丝毫的变化都会引发极大的关注。那么百度时隔七年,以极简方式改版,有哪些逻辑?……深度剖析!浏览器字体渲染的秘密说到web性能,前端工程师很自然地反应是yahoo的30条优化规则。这些规则可以将网页加载从原来的几秒甚至十几秒较少到3s甚至1s以内。当一个完整界面展现在用户眼前时,内容就通……WebApp设计要素从去年开始就负责公司WebApp的产品跟设计工作,最近整体大改了两个版本,也算累积了一些实际的经验。在不断学习的过程中,发现对于WebApp可以直接用于项目上的资料比较零碎,在……产品设计中界面的过渡效果处理设计师都爱雕琢细节。多数时间都用来折腾像素级的按钮、表单样式、设定字体,还要把图标打磨得像图钉一样锋利。很好,满分,大家请继续保持。但是,还需要考虑一点,它们除了静态组合……
哪些条件会影响企业网站的优化效果【企业网站优化】企业网站内容优化的目的企业网站建设优化应注意哪些细节?【排名优化】如何提高关键词排名【企业网站建设模版】企业网站建设的趋势不容忽视SEO权重增长缓慢?核心优化技术“打破常规”【seo诊断】搜索引擎优化诊断包括什么如何快速建立企业网站?无需编程搭建企业网站平台和站点建设企业网站培训平台时如何选择SAAS和本地化部署百度首页SEO软件中区域关键词的排序企业网站做SEO优化具有哪些优势?
双子座男人与摩羯星座女生配对(摩羯女和双子女合得来吗)杨澜经典语录孕妈分娩前吃这些水果江陵遇元九李六二侍御纪事书情我爱你经典个性语录大全奥迪如何设置车内蓝牙名称奥迪怎么设置车内蓝牙名称怎么查酒店入住记录查询(酒店入住记录查询系统)中国十大上古僵尸强悍非凡的犼原是天神后成僵尸始祖读书名言好句交办造句用交办造句大全农历八月二十六是什么星座(农历11月25日出生的人)冀和冀州

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界