CSS关于文本渲染的属性text-rendering
CSS关于文本渲染的属性text-rendering告诉渲染引擎工作时如何优化显示文本。 浏览器会在渲染速度、易读性(清晰度)和几何精度方面做一个权衡。
我们知道,SVG-可缩放矢量图形(Scalable Vector Graphics)是由W3C制定的, 基于
可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG严格遵从 XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率 无关的矢量图形格式。IE 9、Firefox、Opera、Chrome 以及 Safari 支持内联 SVG。IE 8或更早版本,可通过安装Adobe SVG Viewer以支持SVG。
而属性text-rendering正是一个SVG属性,目前尚没有任何的CSS标准对其进行定 义。
不过Gecko(for Firefox)和WebKit核心的浏览器已经允许你在 Windows/Mac/Linux系统的HTML/XML内容中应用该属性。
对于某些小于20px的字体来说,当你把该属性设为optimizeLegibility时,包含 诸如ff、fl、fi这种连字的文本会产生一个非常明显的效果,比如Microsoft's Calibri, Candara, Constantia, Corbel和DejaVu类字体。如果你对连字不太理 解,可以参考维基百科的解释 http://en.wikipedia.org/wiki/Typographic_ligature
默认值:auto
适用于:文本元素
继承性:yes
媒介类型(Media Types):可视型(公认的媒介类型包括哪些?参见W3C文档 http://www.w3.org/TR/CSS2/media.html)
语法:
格式:text-rendering: auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit
值:
auto:
当绘制文本时,浏览器会进行智能识别,何时应该从速度、清晰度和几何精度方 面进行优化。关于各浏览器对该属性解释的差别,参见下面的兼容性表格。
optimizeSpeed:
当绘制文本时,浏览器会着重渲染速度,而不是清晰度和几何精度。该属性值不 能用于字距调整和连字。Gecko默认开启该属性,Firefox 是默认20px以下开启该属性。
optimizeLegibility:
当绘制文本时,浏览器会侧重文本的可读性(清晰度),而不是渲染速度和几何 精度。该属性值可以用于字距调整和连字。
使用CSS 3的@font-face来渲染文字的情况越来越多,易读性开始被关注和重视。尤其是小号的文字。由于目前还没有CSS属性控制显示在线字体的微妙细节,Safari 5,Chrome和Webkit系列浏览器支持text-rendering启用kerning 和 ligatures。
Gecko 和WebKit 浏览器处理这个属性的方式很不一样。前者默认启用这个特性, 而后者,你需要将其设置为optimizeLegibility。Firefox默认20px以上字体文本会开启该属性。
geometricPrecision:
当绘制文本时,浏览器会着重几何精度,而不是清晰度和渲染速度。字体的某些 方面,比如字间距并不是按照线性比例进行渲染的,因此该属性可以使得设置为 这些字体的文本看起来很整洁。
在SVG中,当文本被放大或缩小,浏览器会计算文本的最终尺寸(即指定字体大小 和应用比例),然后按照计算出来的尺寸,从系统的字体库中请求一种合适的字 体。但是,如果你要求的字体大小,比如9px字号的140%的比例,产生的字号12.6 在字体库中并不存在,所以此时浏览器会将字号舍为12px。这导致了文本的阶梯 缩放。
不过,当渲染引擎完全支持几何精度属性时,你可以利用几何精度属性流畅地缩 放文本。对于比较大的缩放因子,你可能看不到特别完美的渲染效果,但显示字 号将会是你所期待的大小,既不会向上也不向下四舍五入Windows/Linux支持的字 号大小。
如果定义为geometricPrecision,Webkit精确应用定义的属性值,Gecko则将 geometricPrecision解释为optimizeLegibility,其表现与设置为 optimizeLegibility的表现是一样的.
实例
/* 对body应用optimizeLegibility保证整个html文档的易读性,但可能出现文字连写的效果,对元素应用class='foo'可以避免出现文字连写现象 */
- body { text-rendering: optimizeLegibility; }
- .foo { text-rendering: optimizeSpeed; }
CSS 代码 | 字间距Kerning | 连字效果Ligatures |
---|---|---|
font: 19.9px 'DejaVu Serif',Constantia; | LYoWAT | ff fi fl ffl |
font: 20px 'DejaVu Serif',Constantia; | LYoWAT | ff fi fl ffl |
font: 3em 'DejaVu Serif',Constantia; text-rendering: optimizeSpeed; |
LYoWAT | ff fi fl ffl |
font: 3em 'Dejavu Serif',Constantia; text-rendering: optimizeLegibility; |
LYoWAT | ff fi fl ffl |
Gecko核心浏览器注意事项:
属性值设为auto时有个20px的渲染阈值,这个阈值可以通过更改偏好设置browser.display.auto_quality_min_font_size这一项。(对于Firefox,首先在浏览器键入about:config回车即可进入,更多更改配置选项的方法参见这里http://kb.mozillazine.org/Editing_configuration),如果你想了解更多有关mozilla preference-browser.display.auto_quality_min_font_size的介绍可以查看官方文档http://kb.mozillazine.org/Browser.display.auto_quality_min_font_size。
optimizeSpeed选项在Gecko2.0(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)上无效。因为文本渲染的标准代码已经足够快,没有比它更快的代码路径。这是一个bug。参见bug 595688 .https://bugzilla.mozilla.org/show_bug.cgi?id=595688
浏览器兼容表:
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support for Windows and Linux |
4.0 but the implementation known bugs on Windows and Linux which can break font substitition,small-caps,letter-spacing or cause text to overlap |
3.0 (1.9) | Not supported | Not supported | 5.0 (532.5) |
Basic support for other operating systems | Not supported | Not supported | Not supported | Not supported | Not supported |
auto |
Chrome treats this as optimizeSpeed .Work is continuing onWebKit bug 41363 |
If the font size is 20 px or higher, Gecko browsers use optimizeLegibility ; for smaller text, they useoptimizeSpeed . |
Not supported | Not supported | Safari treats this as optimizeSpeed .Work is continuing onWebKit bug 41363 |
geometricPrecision |
13 supports true geometric precision, without rounding up or down to the nearest supported font size in the operating system. Introduced in WebKit 535.1 WebKit bug 60317 |
Gecko treats the value the same as optimizeLegibility . |
Not supported | Not supported |
存在的问题:
混合使用optimizeLegibility和font-variant: small-caps会导致small-caps渲染失败。最糟糕的情况是文本不显示在Web页面上,在低配置的移动设备上可能导致页面无法正常加载。(问题bug原文http://code.google.com/p/chromium/issues/detail?id=51973)
对Safari 5,使用ex作为 margin, padding, border-width ,outline-width的度量单位,同时使用optimizeLegibility会导致浏览器崩溃。不过本人测试Safari 5.1.7(7534.57.2)中文版貌似已经修复了崩溃的问题。(测试页面地址http://quorning.net/safari_crash.htm)
CSS关于文本渲染的属性text-rendering的更多相关文章
- css构造文本
1. 1. 文本缩进text-indent:值:值为数字,最常用的数值单位是px(像素),也可以直接是百分比!text-indent:100px;text-indent:10%;2. 文本对齐text ...
- CSS Animation triggers text rendering change in Safari
薄荷新首页上周五内测,花哥反馈在 MacBook Safari 浏览器下 鼠标移动到第一个商品的时候后面几个商品的文字会加粗.这是什么鬼??? 待我回到家打开笔记本,鼠标蹭蹭蹭的发现问题远不止如此: ...
- 关于css禁止文本复制属性
最近在做DHTMLX框架替换,新框架dhx的grid是不能选中内容复制的 虽然相对来说是安全些的,但是客户体验度一定会大打折扣 网页上禁止复制主要靠JavaScript来实现.<BODY onc ...
- jq选择器(jq 与 js 互相转换),jq操作css样式 / 文本内容, jq操作类名,jq操作全局属性,jq获取盒子信息,jq获取位置信息
jq选择器(jq 与 js 互相转换) // 获取所有的页面元素jq对象 $('css3选择器语法'); var $box = $(".box:nth-child(1)"); 获取 ...
- css常用文本属性
[CSS常用文本属性] 1. 字体.字号类: ① font-weight: 字体粗细. bold-加粗.normal-正常.lighter-细体 也可以使用100-900数值,400表示normal, ...
- css基础语法二(常用文本与背景属性)
[CSS常用文本属性] 1. 字体.字号类:① font-weight: 字体粗细. bold-加粗.normal-正常.lighter-细体 也可以使用100-900数值,400表示normal,7 ...
- 闲记 单元格与单元格之间的边 ///字体属性都是font开头,除了颜色属性 ///文本属性都是text开的,除了设置行高。
这两天一直在做网页没有什么太大的问题,期间也考了一场试,对答案的时候老师讲了一些小知识,因此来记录一下. 单元格与单元格之间的边距(cellspaling) list-type-image可以使用图像 ...
- 【CSS学习】--- 文本水平对齐属性text-align和元素垂直对齐属性vertical-align
一.文本水平对齐属性---text-align text-align属性是将块级标签以及单元格里面的内容进行相应的对齐,块级标签里的内联元素会被整体进行移动,而子块级元素或子单元格则会继承父元素的te ...
- 复习-css控制文本字体属性
css控制文本字体属性 font-family:字体系列,如”serif“”sans-serif“ font-size:尺寸 font-style:字体样式,如“normal,italic(斜体).o ...
随机推荐
- Python小白学习之路(八)—【变量】【基本数据类型分类】【集合】【集合的功能】
一.变量 变量的作用:记录状态的变化变量的值:描述不同的状态 二.五大基本数据类型的分类 五大基本数据类型(数字 字符串 列表 元祖 字典) 按照可变不可变来进行分类 可变:列表.字典 不可变:字符串 ...
- 如何解决liunx链接远程数据库10038错误提示
关于在windows下链接liunx系统下远程数据库报错2003--提示10038的解决方案如下: 在liunx系统中安装配置mysql数据库默认是没有对外开启3600端口,如果出现10038: 1, ...
- docker安装指定版本TAG的镜像
在docker中安装镜像,一般过程是,docker search 软件名称. 本文以tomcat为例,讲解下载指定版本TAG的tomcat. 搜索tomcat镜像 $ sudo docker sear ...
- leetcode-914-卡牌分组
题目描述: 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 ...
- Xcode 9 Analyzing Crash Reports
Analyzing Crash Reports After you distribute your app for testing by using TestFlight or after you m ...
- POJ 2291
#include<iostream> #include<stdio.h> using namespace std; int compare(void const *,void ...
- Numpy 数组的切片操作
实例+解释如下(表格):关键是要明白python中数组的下标体系.一套从左往右,一套从右往左. 1 import numpy as np 2 import sys 3 4 def main(): 5 ...
- Netty核心概念(7)之Java线程池
1.前言 本章本来要讲解Netty的线程模型的,但是由于其是基于Java线程池设计而封装的,所以我们先详细学习一下Java中的线程池的设计.之前也说过Netty5被放弃的原因之一就是forkjoin结 ...
- python——利用selenium模仿键盘输入跳转
这是我以前遇到的一个网站:人卫临床助手,这个网站比较奇怪,不能点击右键查看源码,但是大家可以使用ctrl+U,打开开发者选项,点击network,然后点击第2页和第3页: 可以看到上面的URL是一模一 ...
- phpdocumentor生成代码注释文档(linux)
1,默认安装lnmp环境(php7),默认pear安装 2, pear channel-discover pear.phpdoc.org pear install phpdoc/phpDocume ...