11---
2- title : 文本渲染
2+ title : text-rendering
33slug : Web/CSS/Reference/Properties/text-rendering
4+ l10n :
5+ sourceCommit : e316a03cc74a78004dbba837c9d5df297e2eb0aa
46---
57
6- ` text-rendering ` CSS 属性定义浏览器渲染引擎如何渲染字体。浏览器会在速度、清晰度、几何精度之间进行权衡 。
8+ ** ` text-rendering ` ** [ CSS] ( /zh-CN/docs/Web/CSS ) 属性向渲染引擎提供信息,说明在渲染文本时应针对哪些方面进行优化 。
79
8- > [ !NOTE]
9- > 该属性是 SVG 的属性而不是标准的 CSS 属性。但是 Gecko(Firefox)和 Webkit(Chrome、Safari)内核的浏览器允许该属性在 Windows、Mac OS 和 Linux 操作系统中应用于 HTML 和 XML 内容。
10+ 浏览器会在速度、清晰度、几何精度之间进行权衡。
1011
11- 一个视觉上很明显的效果是,` optimizeLegibility ` 属性值会在某些字体(比如,微软的 _ Calibri_ 、_ Candara_ 、_ Constantia_ 和 _ Corbel_ ,或者 _ DejaVu_ 系列字体)小于 20px 时把某些相邻字符连接起来(比如 ff、fi、fl 等)。
12+ > [ !NOTE]
13+ > ` text-rendering ` 属性是 SVG 属性,未在任何 CSS 标准中定义。然而,Gecko 和 WebKit 浏览器允许你在 Windows、macOS 和 Linux 系统上将此属性应用于 HTML 和 XML 内容。
1214
13- {{cssinfo}}
15+ 一个视觉上很明显的效果是, ` optimizeLegibility ` 属性值会在某些字体(比如,微软的 _ Calibri _ 、 _ Candara _ 、 _ Constantia _ 和 _ Corbel _ ,或者 _ DejaVu _ 字体家族)小于 20px 时启用连字效果(比如 ff、fi、fl 等)。
1416
1517## 语法
1618
1719``` css
18- /* Keyword values */
20+ /* 关键字值 */
1921text-rendering : auto;
2022text-rendering : optimizeSpeed;
2123text-rendering : optimizeLegibility;
2224text-rendering : geometricPrecision;
2325
24- /* Global values */
26+ /* 全局值 */
2527text-rendering : inherit;
2628text-rendering : initial;
2729text-rendering : revert;
@@ -32,51 +34,112 @@ text-rendering: unset;
3234### 值
3335
3436- `auto`
35- - : 浏览器依照某些根据去推测在绘制文本时,何时该优化速度,易读性或者几何精度。对于该值在不同浏览器中解释的差异,请看兼容性表。
37+ - : 浏览器在绘制文本时,会根据经验判断何时该优化速度、易读性和几何精度。对于该值在不同浏览器中解释的差异,请看兼容性表。
38+
39+ `auto` 值是平衡质量与性能的良好默认选择,尤其适用于较长的纯文本内容。
40+
3641- `optimizeSpeed`
3742 - : 浏览器在绘制文本时将着重考虑渲染速度,而不是易读性和几何精度。它会使字间距和连字无效。
43+
44+ 在资源受限的渲染场景中(例如处理器速度较慢或电池电量不足时),建议使用 `optimizeSpeed` 值。
45+
3846- `optimizeLegibility`
39- - : 浏览器在绘制文本时将着重考虑易读性,而不是渲染速度和几何精度。它会使字间距和连字有效。** 该属性值在移动设备上会造成比较明显的性能问题** ,详细查看 [text-rendering ](https://css-tricks .com/almanac/properties/t/text-rendering /)。
47+ - : 浏览器在绘制文本时将着重考虑易读性,而不是渲染速度和几何精度。它会使字间距和连字有效。
48+
49+ `optimizeLegibility` 值适用于尺寸较大但内容较短的文本(如标题或横幅),可提升其可读性。该设置同样适用于出版文章等高质量专业排版场景。但因可能影响性能,不建议用于常规文章。
50+
4051- `geometricPrecision`
41- - : 浏览器在绘制文本时将着重考虑几何精度,而不是渲染速度和易读性。字体的某些方面—比如字间距—不再线性缩放,所以该值可以使使用某些字体的文本看起来不错。
52+ - : 浏览器在绘制文本时将着重考虑几何精度,而不是渲染速度和易读性。字体某些特性(如字距调整)无法线性缩放,因此此参数能使使用这些字体的文本呈现良好效果。
53+
54+ 在 SVG 中,当文本被放大或缩小时,浏览器会计算文本的最终尺寸(由指定字号和应用的缩放比例决定),并向平台字体系统请求该计算尺寸的字体。但若请求字号为 9 且缩放比例为 140%,计算出的 12.6 号字在字体系统中并不存在,浏览器会将其四舍五入为 12 号。这将导致文本出现阶梯状缩放效果。
55+
56+ 但当渲染引擎完全支持 `geometricPrecision` 属性时,它能让文本实现流畅缩放。在大幅缩放时,文本渲染效果可能不够美观,但尺寸会符合预期——既不会被四舍五入到 Windows 或 Linux 支持的最近字号,也不会被舍入到更小尺寸。
4257
43- 对于 SVG,当文本缩放时,浏览器会计算文本最终大小(取决于特定的字体大小和相应的缩放比例)并且从操作平台的字体系统中请求一个符合该计算值的字体大小。但如果你请求一个字体大小,比如 9 并且 140% 的缩放,这个最终的字体大小为 12 .6,字体系统中明显不存在,所以浏览器会向下取整到 12。这导致文本缩放是阶梯式的 。
58+ `geometricPrecision` 值既不优化可读性也不提升性能。它通常适用于 SVG 场景,此时需要图形在缩放时忠实还原文本尺寸而不失真 。
4459
45- 但这个 geometricPrecision 特性——当被渲染引擎完全支持时——会使文本缩放是流畅的。对于大比例的缩放,你可能看到并不太漂亮的文本渲染,但这个字体大小是你期望的,而不是被 Windows 或 Linux 系统四舍五入或向下取整的字体大小。
60+ > [!NOTE ]
61+ > WebKit 准确地的实现了这个值,但是 Gecko 把这个值按照 `optimizeLegibility` 处理。
4662
47- ** 提示** : WebKit 准确地的实现了这个值,但是 Gecko 把这个值按照 `optimizeLegibility` 处理。
63+ ## 形式定义
64+
65+ {{CSSInfo }}
66+
67+ ## 形式语法
68+
69+ {{csssyntax }}
4870
4971## 示例
5072
51- ```css
52- /* make sure all fonts in the HTML document display in all its glory,
53- but avoid inadequate ligatures in class foo elements */
73+ ### 自动应用 optimizeLegibility
5474
55- body {
56- text-rendering : optimizeLegibility ;
75+ 以下示例说明当 `font-size ` 小于 `20px` 时,浏览器会自动使用 `optimizeLegibility`。
76+
77+ #### HTML
78+
79+ ```html
80+ <p class="small"> LYoWAT - ff fi fl ffl</p >
81+ <p class="big"> LYoWAT - ff fi fl ffl</p >
82+ ```
83+
84+ #### CSS
85+
86+ ```css
87+ .small {
88+ font :
89+ 19.9px " Constantia" ,
90+ " Times New Roman" ,
91+ " Georgia" ,
92+ " Palatino" ,
93+ serif ;
5794}
58- .foo {
59- text-rendering : optimizeSpeed ;
95+ .big {
96+ font :
97+ 20px " Constantia" ,
98+ " Times New Roman" ,
99+ " Georgia" ,
100+ " Palatino" ,
101+ serif ;
60102}
61103```
62104
63- #### Live Example
105+ #### 结果
64106
65- > [ !NOTE]
66- > 没有在 Chrome 中看出例子中的区别来,可以移步看看这篇文章 [ text-rendering] ( https://css-tricks.com/almanac/properties/t/text-rendering/ ) 。
107+ {{ EmbedLiveSample('自动应用 optimizeLegibility') }}
108+
109+ ### optimizeSpeed 与 optimizeLegibility
110+
111+ 此示例展示了 ` optimizeSpeed ` 与 ` optimizeLegibility ` 在浏览器中的外观差异(具体效果因浏览器而异)。
67112
68- | CSS code | Kerning | Ligatures |
69- | ------------------------------------------------------------------------ | ------- | ------------ |
70- | font: 19.9px 'DejaVu Serif',Constantia; | LYoWAT | ff fi fl ffl |
71- | font: 20px 'DejaVu Serif',Constantia; | LYoWAT | ff fi fl ffl |
72- | font: 3em 'DejaVu Serif',Constantia; text-rendering: optimizeSpeed; | LYoWAT | ff fi fl ffl |
73- | font: 3em 'Dejavu Serif',Constantia; text-rendering: optimizeLegibility; | LYoWAT | ff fi fl ffl |
113+ #### HTML
74114
75- ### Gecko 注释
115+ ``` html
116+ <p class =" speed" >LYoWAT - ff fi fl ffl</p >
117+ <p class =" legibility" >LYoWAT - ff fi fl ffl</p >
118+ ```
76119
77- auto 选项的 20px 字体大小的阈值可以被 ` browser.display.auto_quality_min_font_size ` 值改变。
120+ #### CSS
78121
79- ` optimizeSpeed ` 选项在 Gecko 2.0 上已经没有效果了,因为标准的文字渲染代码已经非常快,而且目前还没有更快的渲染方法。详见 [ Firefox bug 595688] ( https://bugzil.la/595688 ) 。
122+ ``` css
123+ p {
124+ font :
125+ 1.5em " Constantia" ,
126+ " Times New Roman" ,
127+ " Georgia" ,
128+ " Palatino" ,
129+ serif ;
130+ }
131+
132+ .speed {
133+ text-rendering : optimizeSpeed ;
134+ }
135+ .legibility {
136+ text-rendering : optimizeLegibility ;
137+ }
138+ ```
139+
140+ #### 结果
141+
142+ {{ EmbedLiveSample('optimizeSpeed 与 optimizeLegibility') }}
80143
81144## 规范
82145
@@ -85,3 +148,16 @@ auto 选项的 20px 字体大小的阈值可以被 `browser.display.auto_quality
85148## 浏览器兼容性
86149
87150{{Compat}}
151+
152+ ## 参见
153+
154+ - [ 在 ` <canvas> ` 中绘制文本] ( /zh-CN/docs/Web/API/Canvas_API/Tutorial/Drawing_text )
155+ - [ CSS 文本装饰] ( /zh-CN/docs/Web/CSS/Guides/Text_decoration ) CSS 模块
156+ - 相关 CSS 属性
157+ - [ ` text-decoration ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-decoration ) (及其完整属性值,如 [ ` text-decoration-line ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-decoration-line ) 、[ ` text-decoration-style ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-decoration-style ) 和 [ ` text-decoration-thickness ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-decoration-thickness ) )
158+ - [ ` text-emphasis ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-emphasis ) (及其完整属性值,如 [ ` text-emphasis-color ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-emphasis-color ) 、[ ` text-emphasis-position ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-emphasis-position ) 和 [ ` text-emphasis-style ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-emphasis-style ) )
159+ - [ ` text-shadow ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-shadow )
160+ - [ ` text-transform ` ] ( /zh-CN/docs/Web/CSS/Reference/Properties/text-transform )
161+
162+ - [ SVG] ( /zh-CN/docs/Web/SVG ) {{SVGAttr("text-rendering")}} 属性
163+ - [ SVG 与 CSS] ( /zh-CN/docs/Web/SVG/Tutorials/SVG_from_scratch/SVG_and_CSS )
0 commit comments