text-rendering

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

text-rendering CSS 属性向渲染引擎提供关于渲染文本时应优化哪些方面的信息。

浏览器在速度、易读性和几何精度之间进行权衡。

注意:text-rendering 属性是一个 SVG 属性,未在任何 CSS 标准中定义。但是,Gecko 和 WebKit 浏览器允许您在 Windows、macOS 和 Linux 上将此属性应用于 HTML 和 XML 内容。

一个非常明显的效果是 optimizeLegibility,它可以在小于 20px 的文本中为某些字体(例如,微软的 CalibriCandaraConstantiaCorbel,或 DejaVu 字体家族)启用连字(ff、fi、fl 等)。

语法

css
/* Keyword values */
text-rendering: auto;
text-rendering: optimizeSpeed;
text-rendering: optimizeLegibility;
text-rendering: geometricPrecision;

/* Global values */
text-rendering: inherit;
text-rendering: initial;
text-rendering: revert;
text-rendering: revert-layer;
text-rendering: unset;

auto

浏览器在绘制文本时会根据经验来猜测何时优化速度、易读性和几何精度。有关浏览器如何解释此值的差异,请参阅兼容性表格。

auto 值是平衡质量和性能的良好默认值,特别是对于大量纯文本。

optimizeSpeed

浏览器在绘制文本时强调渲染速度,而非易读性和几何精度。它会禁用字距调整和连字。

在资源受限的渲染场景(例如慢速处理器或低电量)中,optimizeSpeed 值更可取。

optimizeLegibility

浏览器强调易读性,而非渲染速度和几何精度。这会启用字距调整和可选连字。

optimizeLegibility 值更适合尺寸大但内容短的文本,例如标题或横幅,以提高其可读性。它也可以用于高质量的专业排版,例如已发布的文章。由于潜在的性能影响,不建议将其用于典型文章。

geometricPrecision

浏览器强调几何精度,而非渲染速度和易读性。字体的某些方面(例如字距调整)不会线性缩放。因此,此值可以使使用这些字体的文本看起来更好。

在 SVG 中,当文本放大或缩小时,浏览器会计算文本的最终大小(由指定的字体大小和应用的比例决定),并从平台的字体系统请求该计算大小的字体。但是,如果您请求字体大小为 9,比例为 140%,则生成的字体大小 12.6 在字体系统中不存在,因此浏览器会将字体大小四舍五入到 12。这会导致文本的阶梯式缩放。

但是,当渲染引擎完全支持 geometricPrecision 属性时,它允许您流畅地缩放文本。对于较大的比例因子,您可能会看到不太美观的文本渲染,但大小会符合您的预期——既不会向上舍入也不会向下舍入到 Windows 或 Linux 支持的最接近的字体大小。

geometricPrecision 值既不优化可读性也不优化性能。它通常在 SVG 中有意义,您希望图形忠实地缩放而不扭曲文本尺寸。

注意:WebKit 精确应用指定值,但 Gecko 将该值视为与 optimizeLegibility 相同。

正式定义

初始值auto
应用于文本元素
继承性
计算值同指定值
动画类型离散

正式语法

text-rendering = 
auto |
optimizeSpeed |
optimizeLegibility |
geometricPrecision
此语法反映了 CSS 规范 中的最新标准。并非所有浏览器都可能已实现所有部分。有关支持信息,请参阅浏览器兼容性

示例

optimizeLegibility 的自动应用

这演示了当 font-size 小于 20px 时,浏览器如何自动使用 optimizeLegibility

HTML

html
<p class="small">LYoWAT - ff fi fl ffl</p>
<p class="big">LYoWAT - ff fi fl ffl</p>

CSS

css
.small {
  font:
    19.9px "Constantia",
    "Times New Roman",
    "Georgia",
    "Palatino",
    serif;
}
.big {
  font:
    20px "Constantia",
    "Times New Roman",
    "Georgia",
    "Palatino",
    serif;
}

结果

optimizeSpeed vs. optimizeLegibility

此示例显示了 optimizeSpeedoptimizeLegibility 的外观差异(在您的浏览器中;其他浏览器可能会有所不同)。

HTML

html
<p class="speed">LYoWAT - ff fi fl ffl</p>
<p class="legibility">LYoWAT - ff fi fl ffl</p>

CSS

css
p {
  font:
    1.5em "Constantia",
    "Times New Roman",
    "Georgia",
    "Palatino",
    serif;
}

.speed {
  text-rendering: optimizeSpeed;
}
.legibility {
  text-rendering: optimizeLegibility;
}

结果

规范

规范
Scalable Vector Graphics (SVG) 2
# TextRenderingProperty

浏览器兼容性

另见