简单说就浏览器渲染的问题,以windows7以上的系统为例,并非所有的宋体都是“无”渲染的,12-14px如你所说渲染方式“无”,试试16/18或者以上,是不是也和微软雅黑一样类似于PS里的“锐利”呢

---------------携程UED的分割线----------------

说到web性能,前端工程师很自然地反应是yahoo的30+条优化规则。这些规则可以将网页加载从原来的几秒甚至十几秒较少到3s甚至1s以内。当一个完整界面展现在用户眼前时,内容就通过不同的字体、图片以及多媒体传达给用户。使用户在1s内看到网页和使用户留在网页上几分钟甚至几十分钟同样重要。字体作为内容承载信息的重要部分,若使用不“适当”的字体或者字体由于渲染等缘故对用户不友好,则会(有可能)造成不必要的用户流失。本文介绍浏览器的字体渲染,希望还未接触字体渲染的同事能通过本文对字体渲染有所了解。

首先看下不同浏览器下的截图,来自携程-攻略社区。

很明显地看出,Chrome35截图中的非横竖笔画较IE11和Firefox30截图中的有明显的锯齿。

理想的字体其边缘过渡平滑,而在屏幕上显示时,需要将字体栅格化(rasterization)为一个个像素点。采用黑白(black and white)渲染无法体现字体的细节之处,会造成了边缘呈现锯齿状(jagged)的不平滑。为了解决这个问题,字体渲染引擎采用了以下方法进行平滑(Antialiasing):灰阶(grayscale)渲染、亚像素(sub-pixel)渲染。

渲染方法

灰阶渲染是一种通过控制字体轮廓上像素点的亮度达到字体原始形状的方法。

亚像素渲染利用了LCD屏(液晶屏)中每个像素是由R、G、B三个亚像素的颜色和亮度混合而成一个完整像素的颜色这一原理,将字体轮廓上的像素点由三个亚像素体现以达到原始形状的方法。与灰阶渲染相比,分辨率在垂直方向放大了三倍,因此渲染效果更好,但是所耗内存也更多。因此在手机屏上,为了减少CPU开销,并未采用该字体渲染方法,而是采用的grayscale渲染。

操作系统中的渲染API

操作系统OS提供了支持不同的字体渲染方法的API。在windows下是GDI(Graphics Device Interface)和DirectWrite,OS X下是Quartz。

GDI分为GDI Grayscale和GDI ClearType。前者为灰阶渲染API,后者是亚像素渲染API。由于GDI ClearType并未对字体进行垂直方向的平滑,因此当字体较大时会出现边缘不平滑的情况。为了弥补GDI ClearType的不足,MS实现了DirectWrite API,它在GDI ClearType的基础上增加了垂直方向的平滑。

但是!字体渲染的API都是由浏览器厂商自己选择的!

使用同一颜色,感官上的颜色深浅为:黑白渲染>grayscale>sub-pixel。

Chrome35/36采用的是GDI ClearType,因此在字体较大时边缘会出现毛刺,而FF30采用的DirectWrite则没有此类问题。如下图所示:

根据以上两图可以发现,Chrome的字体渲染效果没有Firefox的好。为缩小Chrome与FF/IE的差异,一种方法是使用-webkit-text-stroke:0.5px;如果使用1px的话就有点粗了。

Ctrip携程攻略2014

Ctrip携程攻略2014

虽然该hack使Chrome下字体的边缘有所光滑,但字体在webkit内核浏览器中看上去“模糊”了。

常用字体在浏览器中的渲染情况Simsun“Microsoft Yahei”/Tahoma/ArialChrome3512px-17px:黑白渲染18px-48px:GDI ClearType49px+:GDI Grayscale12px-48px:GDI ClearType49px+:GDI GrayscaleFF30/IE9+12px-17px:黑白渲染18px-99px:DirectWrite100px+:GDI Grayscale12px-99px:DirectWrite100px+:GDI GrayscaleIE7/8GDI ClearType

FF30/IE7+中的数字和英文字符12px-17px为sub-pixel渲染,而Chrome35为黑白渲染。Simsun

12px携程|14px携程|16px携程|17px携程|18px携程|20px携程|30px携程|40px携程|48px携程|49px携程|99px携程|100px携程Microsoft Yahei

12px携程|14px携程|16px携程|17px携程|18px携程|20px携程|30px携程|40px携程|48px携程|49px携程|99px携程|100px携程Tahoma

12pxCtrip2014|14pxCtrip2014|16pxCtrip2014|17pxCtrip2014|18pxCtrip2014|20pxCtrip2014|30pxCtrip2014|40pxCtrip2014|48pxCtrip2014|49pxCtrip2014|99pxCtrip2014|100pxCtrip2014Arial

12pxCtrip2014|14pxCtrip2014|16pxCtrip2014|17pxCtrip2014|18pxCtrip2014|20pxCtrip2014|30pxCtrip2014|40pxCtrip2014|48pxCtrip2014|49pxCtrip2014|99pxCtrip2014|100pxCtrip2014

从使用Microsoft Yahei, Tahoma和Arial字体可以看出,在Chrome35中,由于转换成GDI Grayscale渲染,49px的字比48px的边缘光滑很多。字体较大时,GDI Grayscale比GDI ClearType具有更好的渲染效果。

在实际中会遇到在如Tahoma/Arial字体下17px和18px的“字重”有明显差别。这个现象涉及到字体设计,简单地说就是在浏览器渲染字体之前,字体本身会调整字型和笔画所占像素。想了解更多细节,请参考a closer look at TrueType hinting。

启动Chrome中的DirectWrite

在chrome://flags下启用实验性DirectWrite字体渲染系统:#enable-direct-write会使48px以下的字体均为sub-pixel渲染。仅适用于测试环境!(需重启Chrome)

Chrome37 beta将该特性移除实验特性,并将在Chrome37中实现在windows下使用DirectWrite API对字体渲染,相信在Chrome37中以上提到的浏览器字体渲染差异会得到解决。

字体格式在不同浏览器下的渲染Chrome35Firefox30IE9/10/11IE7/8TTF48px-:GDI ClearType

49px+:GDI Grayscale99px-:GDI ClearType

100px+:GDI Grayscale99px-:DirectWrite

100px+:GDI GrayscaleGDI GrayscaleEOT//99px-:DirectWrite

100px+:GDI GrayscaleGDI GrayscaleOTFGDI Grayscale99px-:DirectWrite

100px+:GDI Grayscale//WOFF48px-:GDI ClearType

49px+:GDI Grayscale99px-:DirectWrite

100px+:GDI Grayscale99px-:DirectWrite

100px+:GDI Grayscale/SVGGDI Grayscale///

CSS属性对字体渲染的影响font-smoothing: subpixel-antialiased | antialiased;对应为sub-pixel和grayscale。已废止!font-weight: bold;Chrome35, IE7/8:与normal字体渲染一致(包括数字和字母);IE9+/FF30:grayscale,部分简单中文字体保持原有渲染。font-style:italic;Chrome35, IE7/8:与normal字体渲染保持一致;IE9+/FF30:sub-pixel渲染。opacity: 属性值<1Chrome35:sub-pixel渲染的字体“降级”为grayscale渲染;IE9+/FF30:保持不变transform 2Dtransform: rotate(n);n=90*k deg(k=整数), 保持未旋转的字体渲染;others,sub-pixel渲染。Chrome35在48px+为grayscale渲染。

transform: scale(x,y); 与字体大小m有关。以simsun为例,具体如下:Chrome35:x*y*m<12, Chrome35 sub-pixel渲染;122304 grayscale渲染,12px-24px存在一定范围的黑白渲染(tahoma是12px-16px)。FF30、IE9+:m*m*n<=99*99=9801 sub-pixel渲染;m*m*n>9801 grayscale渲染。transform: skew(n);n=90*k deg(k为整数), 保持未倾斜的字体渲染;others, sub-pixel渲染。Chrome35在49px+为grayscale渲染,IE9+, FF30在100px+为grayscale渲染。transform 2D & transition

运动中:以12px为例: 在Chrome35和FF30下,运动中的字体均是grayscale渲染;

运动结束:Chrome35, FF30, IE9+均为sub-pixel渲染。

从运动开始到运动结束产生了两次渲染变化(sub-pixel到grayscale,grayscale到sub-pixel)会出现“闪现”的现象。Transform 3D

当元素进入GPU中渲染时,在Chrome35+中的字体为grayscale渲染,IE11和FF30保持sub-pixel渲染不变。若transform值函数(如translate3d(), scale(), rotate()等)中的参数为非整数,会导致字体模糊。在使用iScroll模拟滚动的项目中会出现字体模糊。以下是对该问题的一个还原:

-webkit-transform: translate3d(1.5px, 1.5px,0);

20像素新宋abcABC一二三日昌晶囊攮馕

-webkit-transform: translate3d(1px, 1px,0);

20像素新宋abcABC一二三日昌晶囊攮馕

Chrome 36中使用transform不需要-webkit-前缀了!

为了防止以上模糊情况的出现,可以通过JS中的Math.round()/Math.ceil()/Math.floor()等函数使其为整数。

当加入perspective()值时,Firefox30渲染又有所不同。

transform: perspective(1px) translate3d(1.5px, 1.5px,0);在FF30中作用的元素为grayscale渲染。

20像素新宋abcABC一二三日昌晶囊攮馕

transform: perspective(1px) translate3d(1px, 1px,0); 在FF30中作用的元素为sub-pixel渲染

20像素新宋abcABC一二三日昌晶囊攮馕

IE11均为sub-pixel渲染。

此情况下运用opacity<1的声明,IE10+为grayscale。

20像素新宋abcABC一二三日昌晶囊攮馕Chrome transform: perspective()对文档后面元素的影响

Chrome35+,当transform中声明有perspective()时,若文档后面声明transform的元素进入该声明作用的元素的layer-borders的区域时,仍然会受到该声明的影响。声明作用元素的溢出部分同样会对后面元素造成影响。合成渲染层内部文字进入GPU渲染。

Ctrip携程2014

进入GPU渲染

Ctrip携程2014

未进入GPU渲染

启动Show composited layer borders,在Chrome中测试的结果截图为:

总结

字体渲染与操作系统、浏览器、字体格式以及CSS属性有关。本文重点罗列了一些在Windows Chrome中字体渲染与FF/IE的差异和对应缓解/解决问题的方案。Chrome在字体渲染上目前落后于IE/FF,但之前官方博客称Chrome 37将实现在windows下使用DirectWrite API,Chrome在字体渲染方面将赶上IE/FF等浏览器,以上的差异性也将减小甚至消失。

原文阅读:字体渲染 – 携程设计委员会

skewx 字体模糊_为什么网站设计宋体消除锯齿要用无,而其他字体如黑体用平滑,还有英文字体要用那种消除锯齿方式?...相关推荐

  1. HTML5期末大作业_影视网站设计——_指环王:护戒使者(13页) TML+CSS+JavaScript 学生DWHTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作

    HTML5期末大作业:影视网站设计--"指环王:护戒使者(13页) TML+CSS+JavaScript 学生DWHTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作 常 ...

  2. 动态网站的制作与设计_动态网站设计要注意那些细节

    细节部分如页面的访问速度,客户的使用反馈和交流,内容的更新等都对于用户来说能够起到不小的作用.客户在浏览网页时,很少会进入需要等候的网页,在网络上的三秒的等候时间都显得久了.网站在进行设计时应该留有用 ...

  3. 环保建设和环保理念_环保网站设计展示

    灵感的最佳来源是什么? 大自然 ! 通过生活在这个美丽的地球母亲中,我们可以从天空,树木,草丛甚至地面上获得很多灵感,您的大脑就是极限! 目睹他们的美丽,对于网页设计师而言,将自然的这些要素实现到所谓 ...

  4. 网站设计和平面设计区别_平面网站设计终极指南

    鲜艳的色彩和奇特的排版相结合,为独特的平面界面铺平了道路. 极简主义是这种设计理念的重要组成部分,您可以看到近几个月来这些趋势的流行程度. 平面网站设计是一个绝妙的概念,因为它只关注内容. 但是许多设 ...

  5. 笔记本高分屏字体模糊_笔记本win8系统设置1920*1080高分屏后字体模糊的解决方法...

    有不少笔记本win8系统用户将电脑屏幕分辨率设置为1920*1080高分屏之后,发现一些第三方应用字体模糊的问题,遇到这样的问题该怎么办呢,现在给大家分享一下笔记本win8系统设置1920*1080高 ...

  6. 设计企业网站大纲_企业网站设计布局

    网站制作一年350元,五站合一,快速建站 ,www.sxjcwzjs.com,只需进入网站右上角注册快速建站即可(需要电脑登录注册),需要联系我吧!电话:13752214574,微信号:m107858 ...

  7. 笔记本高分屏字体模糊_高分屏软件字体模糊的参考解决办法

    经过多年的发展,现在1080P的全高清显示屏正逐渐成为大多数笔记本的主流配置,高分屏带来了更精致.细腻的显示效果,让用户有了更好的视觉体验.但是也带了一些小问题,目前不少使用1080P高分屏笔记本用户 ...

  8. 笔记本高分屏字体模糊_高分屏字体模糊win10怎么办_Win10系统高分屏字体模糊解决方法...

    2018-03-20 18:48:02 现在的显示器屏幕分辨率越来越高,而可能也会发现高分屏的电脑字体比较小,通过放大屏幕缩放比例来增大字体的话,就会遇到字体模糊的情况,那么Windows10系统高分 ...

  9. 动态网站的制作与设计_北京网站设计的新秀——“动态网页”

    随着互联网技术的不断发展和更迭,网站的发展变得越加多样性.一个北京网站设计需要实现它最基本的显示信息功能,在一定程度上实现与访问的用户进行交互的功能.在北京网站设计中用户的交互和体验会逐渐演变成现在网 ...

最新文章

  1. Centos下源码安装golang
  2. 吴恩达机器学习笔记:(五)区别于微积分的正规方程求解最优解
  3. html给网页加图片背景颜色,0035 如何设置网页背景图和在网页中插入图片
  4. context:component-scan使用说明
  5. Lvs Tun隧道模式配置
  6. android系统功耗优化(1)---高通平台功耗优化的基础知识
  7. 厉害!你的 CT 片子,AI 就能分析
  8. 使用Zabbix进行风险管理
  9. 苹果iPod设计及商业操作内幕
  10. labview入门到出家11(补充)——基于单片机和labview开发的虚拟示波器
  11. N-gage QD等S60 V1.2机型C盘减肥80K的办法(超越3600KB)
  12. 【Python】完美采集淘宝数据(附完整源代码和视频教程)
  13. 我养的无名花草,四季开花
  14. EMV技术学习和研究(十一)QPBOC
  15. Windows查看网络连接并清理缓存
  16. 解释一下什么是鲁棒性
  17. 猴子搬香蕉Java实现,儿童编程游戏CodeMonkey,让你的小猴子不停地吃香蕉
  18. 第四节 单因素、多因素方差分析
  19. 数字信号处理学习笔记
  20. Mongodb从配置到应用

热门文章

  1. 《论离离原上谱这个梗》
  2. 安装Sql Server:以前的某个安装需要重新引导计算机以便使其更改生效。若要继续,请重启计算机,然后再次运行安装程序。
  3. 美翻你的朋友圈,Python生成蒙太奇马赛克图片
  4. HCIE华为面试-BGP负载分担
  5. Ural 1671 - Anansi's Cobweb 倒过来做...并查集维护..
  6. 利用ajax从jsp中返回的字符串时出现回车符号解决办法
  7. 计算机应用基础评价内容,计算机应用基础教学中过程性评价的研究
  8. 使用Axure完成交互式UI设计
  9. Obsidian中如何创作思维导图Mind-map
  10. thinkphp5调用shell脚本_ThinkPHP 5.x远程命令执行测试工具(可getshell)