Jadual Kandungan
font-variant-ligatures
common-ligatures
discretionary-ligatures
contextual
font-variant-position
sub
super
font-variant-caps
small-caps
all-small-caps
petite-caps
all-petite-caps
unicase
titling-caps
font-variant-numeric
lining-nums
oldstyle-nums
proportional-nums
tabular-nums
diagonal-fractions
stacked-fractions
ordinal
slashed-zero
font-variant-alternates
historical-forms
font-variation-settings
总结
Rumah hujung hadapan web tutorial css css3字体变体font-variation详解

css3字体变体font-variation详解

Feb 10, 2018 pm 03:37 PM
css3

如果要用一个词来描述的话,可以把其称为字体变体(Font variants),对应的CSS属性就是font-variation-*属性,其包括连接(ligatures)、大写(caps)、数字(numerals)和替代字形(alternate glyphs)。这些属性可以让我们在Web上创建更精准、更漂亮的排版(文本)效果。

事实上,Web上的排版总是要落后于它在它印刷中的效果。但这是可以理解的,因为打印在页面上的字体已经经过几个世纪的发展,可以说发展到一个复杂的程度。而在浏览器要达到这样的一个层次,还是很难的。

但是,由于Web字体中OpenType功有的增加,以及CSS特性的完善与能力的提高,Web上排版和印刷上排版之间的差距在逐渐拉小。

那么今天这篇文章,借助前面的示例,我们来看看如何使用CSS控制OpenType特性,但请记住,你所使用的任何Web字体需要支持这些特性。

font-variant-*属性

在CSS中可以通过font-variant-*属性来控制大多数OpenType特性。也可以使用font-feature-settings用来支持低版本浏览器。然而,只要可能,你应该使用更现代的font-variant-*属性。在实际使用的时候,可以使用@supports规则来对font-variant-*做降级处理,对于支持的浏览器使用该属性,不支持的浏览器使用font-feature-settings

body {    font-feature-settings: "liga" 1;}@supports (font-variant-ligatures: common-ligatures) {    body {        font-feature-settings: normal;        font-variant-ligatures: common-ligatures;    }}
Salin selepas log masuk

可能到现在为止,你和我一样,都还不太明白上面的代码究竟起了什么作用。别担心,继续往后阅读,你会整明白的。

font-variant-*主要包括:

  • font-variant-ligatures

  • font-variant-caps

  • font-variant-numeric

  • font-variant-alternates

  • font-variant-east-asian

后面的内容简单的来看看这些属性。

font-variant-ligatures

连接是由两个或两个以上的字答组成的单个字形。它们通常能防止难看或尴尬的字母碰撞。主要是功能是有助于辨认

font-variant-ligatures可以用以下关键词做为其属性值:

/* Keyword values */
font-variant-ligatures: normal;
font-variant-ligatures: none;
font-variant-ligatures: common-ligatures;           /* <common-lig-values> */
font-variant-ligatures: no-common-ligatures;        /* <common-lig-values> */
font-variant-ligatures: discretionary-ligatures;    /* <discretionary-lig-values> */
font-variant-ligatures: no-discretionary-ligatures; /* <discretionary-lig-values> */
font-variant-ligatures: historical-ligatures;       /* <historical-lig-values> */
font-variant-ligatures: no-historical-ligatures;    /* <historical-lig-values> */
font-variant-ligatures: contextual;                 /* <contextual-alt-values> */
font-variant-ligatures: no-contextual;              /* <contextual-alt-values> */
font-variant-ligatures: contextual;                 /* <no-historical-ligatures> <common-ligatures> */

/* Global values */
font-variant-ligatures: inherit;
font-variant-ligatures: initial;
font-variant-ligatures: unset;
Salin selepas log masuk

common-ligatures

这些连接是设计者决定在正常情况下使用的连接。在大多数情况下,应该使用这些,因为大数浏览器都默认启用它们。

最常见的连接值是fiffith或者类似的。它们对应的OpenType值为ligaclig。两个值都是有可能的:

  • common-ligatures:激活连接

  • no-common-ligatures:禁用连接

比如:

font-variant-ligatures: common-ligatures; /* 开启 */font-variant-ligatures: no-common-ligatures; /* 禁用 */font-feature-settings: &#39;liga&#39; 1; /* 低版本浏览器 开启 */font-feature-settings: &#39;liga&#39; 0; /* 低版本浏览器 禁用 */
Salin selepas log masuk

效果如下:

上一行开启连接,下一行禁用连接的效果

discretionary-ligatures

这些可以用于印刷方面的连接,可以达到特殊效果。这些默认是禁用的。也可以理解为,这些值可以用来控制特定的连接,指定的字体并由OpenType设计器来定义。它们对应的是OpenType值dig。它也有两个可能的值:

  • discretionary-ligatures:激活连接

  • no-discretionary-ligatures:禁用连接

如果你的代码中设置了:

font-variant-ligatures: discretionary-ligatures; /* 激活 */font-variant-ligatures: no-discretionary-ligatures; /* 禁用 */font-feature-settings: &#39;dlig&#39; 1; /* 低版本浏览器 激活 */font-feature-settings: &#39;dlig&#39; 0; /* 低版本浏览器 禁用 */
Salin selepas log masuk

效果如下:

第一行开启连接,第二行禁用连接

contextual

这些值控制字母是否适应它们的上下文。也就是说,它们是否适应周围的字母。这些值对应于OpenType中的calt。同样的contextual表示启用;no-contextual表示禁用。

font-variant-ligatures: contextual; /* enable */font-variant-ligatures: no-contextual; /* disable */font-feature-settings: &#39;calt&#39; 1; /* low-level enable */font-feature-settings: &#39;calt&#39; 0; /* low-level disable */historical-ligatures
Salin selepas log masuk

使用这些值,看上去就像德文中的tz显示成ß。它对应的OpenType值是hlighistorical-ligatures环开启,而no-historical-ligatures禁用。

font-variant-ligatures: historical-ligatures; /* enable */font-variant-ligatures: no-historical-ligatures; /* disable */font-feature-settings: &#39;hlig&#39; 1; /* low-level enable */font-feature-settings: &#39;hlig&#39; 0; /* low-level disable */
Salin selepas log masuk

font-variant-position

我们经常使用了subsup元素的来改为字符在垂直方向的位置。默认情况下,浏览器会使用一个常规的数字字符,使font-size更小,并使用vertical-align来提高或降低它。这些都不是真正的subsup,而且通常会显得很难看,更不用说它们会打乱line-height

值得庆幸的是,现在有一种方法可以使用font-variant-position真正实现subsup这样的效果。不过目前该属性只在Firefox中得到支持。

/* Keyword values */font-variant-position: normal;
font-variant-position: sub;
font-variant-position: super;/* Global values */font-variant-position: inherit;
font-variant-position: initial;
font-variant-position: unset;
Salin selepas log masuk

sub

实现类似于<sub>标签的下标字符效果:

font-variant-position: sub; /* enable */font-variant-position: normal; /* disable both variants */font-feature-settings: &#39;subs&#39; 1; /* low-level enable */font-feature-settings: &#39;subs&#39; 0; /* low-level disable */
Salin selepas log masuk

super

实现类似于<sup>标签的上标字符效果:

font-variant-position: super; /* enable */font-variant-position: normal; /* disable both variants */font-feature-settings: &#39;sups&#39; 1; /* low-level enable */font-feature-settings: &#39;sups&#39; 0; /* low-level disable */
Salin selepas log masuk

font-variant-caps

font-variant-caps属性用来控制字母大写。只不过这里启用的是小型大写。

/* Keyword values */font-variant-caps: normal;
font-variant-caps: small-caps;
font-variant-caps: all-small-caps;
font-variant-caps: petite-caps;
font-variant-caps: all-petite-caps;
font-variant-caps: unicase;
font-variant-caps: titling-caps;/* Global values */font-variant-caps: inherit;
font-variant-caps: initial;
font-variant-caps: unset;
Salin selepas log masuk

small-caps

小型大写字母的设计与小写字母相同,用于在运行文本中大写字母。它们使段落更具内聚力和可读性。

font-variant-caps: small-caps; /* enable */font-variant-caps: normal; /* disable all variants */font-feature-settings: &#39;smcp&#39; 1; /* low-level enable */font-feature-settings: &#39;smcp&#39; 0; /* low-level disable */
Salin selepas log masuk

all-small-caps

small-caps只是替换了小写字母为大写字母。要是想将所有字母都变成小的大写字母,需要使用all-small-caps

font-variant-caps: all-small-caps; /* enable */font-variant-caps: normal; /* disable all variants */font-feature-settings: &#39;smcp&#39; 1, &#39;c2sc&#39; 1; /* low-level enable */font-feature-settings: &#39;smcp&#39; 1, &#39;c2sc&#39; 0; /* low-level disable */
Salin selepas log masuk

petite-caps

标准的小型大写字母通常会比字体的x高度略大一些。一些字体有额外的小型大写,与x高度匹配。这些被称为petite-caps

font-variant-caps: petite-caps; /* enable */font-variant-caps: normal; /* disable all variants */font-feature-settings: &#39;pcap&#39; 1; /* low-level enable */font-feature-settings: &#39;pcap&#39; 0; /* low-level disable */
Salin selepas log masuk

all-petite-caps

all-small-caps类似,它将所有字母包括小写字母和大写字母,都转换成小型大写字母,而且和字体的x字母高度相匹配。

font-variant-caps: all-petite-caps; /* enable */font-variant-caps: normal; /* disable all variants */font-feature-settings: &#39;pcap&#39; 1, &#39;c2pc&#39; 1; /* low-level enable */font-feature-settings: &#39;pcap&#39; 1, &#39;c2pc&#39; 0; /* low-level disable */
Salin selepas log masuk

unicase

该功能将大写和小写字母映射到混合的小写字母和小写的大型字母,创建一个单一case的字母表。有时这些小写字母是实际的小型大写字母,有时它们是特别设计的unicase形式。这个特性的实现从字体到字体各不相同。

font-variant-caps: unicase; /* enable */font-variant-caps: normal; /* disable all variants */font-feature-settings: &#39;unic&#39; 1; /* low-level enable */font-feature-settings: &#39;unic&#39; 0; /* low-level disable */
Salin selepas log masuk

titling-caps

标准的大写字母设计是用来与小写字母一起使用的,当它们被用在所有大写字母的字符串时,它们会显得过于大一点。有些字体还特别适合这种情况。

font-variant-caps: titling-caps; /* enable */font-variant-caps: normal; /* disable all variants */font-feature-settings: &#39;titl&#39; 1; /* low-level enable */font-feature-settings: &#39;titl&#39; 0; /* low-level disable */
Salin selepas log masuk

font-variant-numeric

font-variant-numeric属性用来控制对数字、分数和序号标记的处理。数字的正确显示取决于上下文的不同,以下是一些一般性的规则:

  • 运行于文本正文中的数字,使用比例的是旧式数字

  • 运行在标题中的数字,使用的比例是内联数字

  • 在数字表格中的数字,使用的比例是表格内联数字

常用的属性:

font-variant-numeric: normal;font-variant-numeric: ordinal;font-variant-numeric: slashed-zero;font-variant-numeric: lining-nums;         /* <numeric-figure-values> */font-variant-numeric: oldstyle-nums;       /* <numeric-figure-values> */font-variant-numeric: proportional-nums;   /* <numeric-spacing-values> */font-variant-numeric: tabular-nums;        /* <numeric-spacing-values> */font-variant-numeric: diagonal-fractions;  /* <numeric-fraction-values> */font-variant-numeric: stacked-fractions;   /* <numeric-fraction-values> */font-variant-numeric: oldstyle-nums stacked-fractions;/* Global values */font-variant-numeric: inherit;
font-variant-numeric: initial;
font-variant-numeric: unset;
Salin selepas log masuk

lining-nums

lining-nums里的数字近似大写字母,高度一致。它们应该用于标题或表格中的数字。通常情况下,数字是默认的。

font-variant-numeric: lining-nums; /* enable */font-variant-numeric: normal; /* disable all variants */font-feature-settings: &#39;lnum&#39; 1; /* low-level enable */font-feature-settings: &#39;lnum&#39; 0; /* low-level disable */
Salin selepas log masuk

oldstyle-nums

旧式数字(Old-style)有不同的高度和对齐方式,因此更类似于小写字母。它们应该用于正文文本中。

font-variant-numeric: oldstyle-nums; /* enable */font-variant-numeric: normal; /* disable all variants */font-feature-settings: &#39;onum&#39; 1; /* low-level enable */font-feature-settings: &#39;onum&#39; 0; /* low-level disable */
Salin selepas log masuk

proportional-nums

比例(Proportional)数字具有可变的间距,并与水平文本相融合。它们应该在大多数情况下使用,除了数据表格中。其中垂直对齐很重要。通常数字在默认情况下是比例数字。

font-variant-numeric: proportional-nums; /* enable */font-variant-numeric: normal; /* disable all variants */font-feature-settings: &#39;pnum&#39; 1; /* low-level enable */font-feature-settings: &#39;pnum&#39; 0; /* low-level disable */
Salin selepas log masuk

tabular-nums

表格数字具有相同的宽度,应该在数据表格中使用,以允许数字垂直对齐。

font-variant-numeric: tabular-nums; /* enable */font-variant-numeric: normal; /* disable all variants */font-feature-settings: &#39;tnum&#39; 1; /* low-level enable */font-feature-settings: &#39;tnum&#39; 0; /* low-level disable */
Salin selepas log masuk

diagonal-fractions

默认情况下,分数将以小写字母的形式显示。适当的分数将被格式化,以匹配一个衬里图形的高度,可以是对象线或堆叠。

font-variant-numeric: diagonal-fractions; /* enable */font-variant-numeric: normal; /* disable all variants */font-feature-settings: &#39;frac&#39; 1; /* low-level enable */font-feature-settings: &#39;frac&#39; 0; /* low-level disable */
Salin selepas log masuk

stacked-fractions

在大多数Web字体中,堆叠分数并不像对角线分数那样普遍,但它应该被证明是有用的。这在大量的科学或数学中用得多。

font-variant-numeric: stacked-fractions; /* enable */font-variant-numeric: normal; /* disable all variants */font-feature-settings: &#39;afrc&#39; 1; /* low-level enable */font-feature-settings: &#39;afrc&#39; 0; /* low-level disable */
Salin selepas log masuk

ordinal

Ordinal像stndrdth这样的序号默认显示为标准小写字母。然而,理想情况下,这些数字会随着数字的增加而增加。序数值支持这一点。

font-variant-numeric: ordinal; /* enable */font-variant-numeric: normal; /* disable all variants */font-feature-settings: &#39;ordn&#39; 1; /* low-level enable */font-feature-settings: &#39;ordn&#39; 0; /* low-level disable */
Salin selepas log masuk

slashed-zero

可以使用斜线来替换零字符。

font-variant-numeric: slashed-zero; /* enable */font-variant-numeric: normal; /* disable all variants */font-feature-settings: &#39;zero&#39; 1; /* low-level enable */font-feature-settings: &#39;zero&#39; 0; /* low-level disable */
Salin selepas log masuk

font-variant-alternates

字体可以为任何字符提供多种替换。font-variant-alternates属性提供了许多控制字符替换的方法。

/* Keyword values */font-variant-alternates: normal;
font-variant-alternates: historical-forms;/* Functional notation values */font-variant-alternates: stylistic(user-defined-ident);
font-variant-alternates: styleset(user-defined-ident);font-variant-alternates: character-variant(user-defined-ident);
font-variant-alternates: swash(user-defined-ident);
font-variant-alternates: ornaments(user-defined-ident);
font-variant-alternates: annotation(user-defined-ident);
font-variant-alternates: swash(ident1) annotation(ident2);/* Global values */font-variant-alternates: initial;
font-variant-alternates: inherit;
font-variant-alternates: unset;
Salin selepas log masuk

historical-forms

被运用于周期表。请注意这与连接中的效果还是有不同之处。

font-variant-numeric: historical-forms; /* enable */font-variant-numeric: normal; /* disable all variants */font-feature-settings: &#39;hist&#39; 1; /* low-level enable */font-feature-settings: &#39;hist&#39; 0; /* low-level disable */
Salin selepas log masuk

除此之外,根据不同的场景选择不同的属性值。

font-variation-settings

font-variation-settings属性主要用于指定需要更改的特性,其主要有由个字母和它们的变化值组成。该属性提供了对OpenType或TrueType字体变体的在低浏览器的控制。

/* Use the default settings */font-variation-settings: normal;/* Set values for OpenType axis names */font-variation-settings: "XHGT" 0.7;/* Global values */font-variation-settings: inherit;
font-variation-settings: initial;
font-variation-settings: unset;
Salin selepas log masuk

这就是在我们文章的开头的示例中看到的font-variation-settings: 'INLN' 0;font-variation-settings: 'INLN' 1000, 'SWRM' 1000;等。每个值都有4个ASCII字符和一个表示axis值的数字组成。如果<string>有更多或更少的字符或包含U+20至U+7E的codepoint范围之外的字符,那么整个属性都是无效的。而<number>可以是分数,也可以是负数。

总结

撸了一圈font-variation-*相关的属性,总算是了解了这个Demo的实现原理了。但要完全掌握这些知识,还是需要一定的时间的。必竟有很多知识点都和字体以及排版相关的。这需要具备一些印刷相关的知识,或许能帮助我们更好的掌握这些属性的特性,以及使用的场景。

另外,目前这些属性,浏览器能支持的为数不多,不过不要紧,感兴趣的可以玩玩,体验一下。或者自己把文章开头的示例修改一下下,说不定能达到另外的效果。

相关推荐:

CSS3 font-feature-settings特性减除字体动画震颤效果实例分享

javascript字体颜色控件的开发

CSS的文本字体颜色如何设置

Atas ialah kandungan terperinci css3字体变体font-variation详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mencapai kesan gelombang dengan CSS3 tulen? (contoh kod) Bagaimana untuk mencapai kesan gelombang dengan CSS3 tulen? (contoh kod) Jun 28, 2022 pm 01:39 PM

Bagaimana untuk mencapai kesan gelombang dengan CSS3 tulen? Artikel ini akan memperkenalkan kepada anda cara menggunakan animasi SVG dan CSS untuk mencipta kesan gelombang Saya harap ia akan membantu anda!

Gunakan CSS dengan mahir untuk merealisasikan pelbagai butang berbentuk pelik (dengan kod) Gunakan CSS dengan mahir untuk merealisasikan pelbagai butang berbentuk pelik (dengan kod) Jul 19, 2022 am 11:28 AM

Artikel ini akan menunjukkan kepada anda cara menggunakan CSS untuk melaksanakan pelbagai butang berbentuk pelik yang kerap muncul. Saya harap ia akan membantu anda!

Bagaimana untuk menyembunyikan elemen dalam css tanpa mengambil ruang Bagaimana untuk menyembunyikan elemen dalam css tanpa mengambil ruang Jun 01, 2022 pm 07:15 PM

Dua kaedah: 1. Menggunakan atribut paparan, cuma tambah gaya "display:none;" pada elemen. 2. Gunakan kedudukan dan atribut teratas untuk menetapkan kedudukan mutlak elemen untuk menyembunyikan elemen. Cuma tambahkan gaya "position:absolute;top:-9999px;".

Bagaimana untuk melaksanakan sempadan renda dalam css3 Bagaimana untuk melaksanakan sempadan renda dalam css3 Sep 16, 2022 pm 07:11 PM

Dalam CSS, anda boleh menggunakan atribut imej sempadan untuk mencapai sempadan renda. Atribut imej sempadan boleh menggunakan imej untuk membuat sempadan, iaitu, menambah imej latar belakang ke sempadan Anda hanya perlu menentukan imej latar belakang sebagai gaya renda; lebar sempadan imej ke dalam. Sama ada permulaan diulang;".

Bagaimana untuk membesarkan imej dengan mengklik tetikus dalam css3 Bagaimana untuk membesarkan imej dengan mengklik tetikus dalam css3 Apr 25, 2022 pm 04:52 PM

Kaedah pelaksanaan: 1. Gunakan pemilih ":aktif" untuk memilih keadaan klik tetikus pada gambar 2. Gunakan atribut transform dan fungsi skala() untuk mencapai kesan pembesaran gambar, sintaks "img:active {transform; : skala(pembesaran paksi-x, y Pembesaran paksi);}".

Ternyata karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen! Ternyata karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen! Jun 10, 2022 pm 01:00 PM

Bagaimana untuk mencipta karusel teks dan karusel imej? Perkara pertama yang semua orang fikirkan ialah sama ada untuk menggunakan js Malah, karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen. Saya harap ia akan membantu semua orang.

Bagaimana untuk menetapkan kelajuan putaran animasi dalam css3 Bagaimana untuk menetapkan kelajuan putaran animasi dalam css3 Apr 28, 2022 pm 04:32 PM

Dalam CSS3, anda boleh menggunakan atribut "animation-timing-function" untuk menetapkan kelajuan putaran animasi Atribut ini digunakan untuk menentukan cara animasi akan melengkapkan kitaran dan menetapkan lengkung kelajuan animasi. animation-timing-function: nilai atribut kelajuan;}".

Adakah kesan animasi css3 mempunyai ubah bentuk? Adakah kesan animasi css3 mempunyai ubah bentuk? Apr 28, 2022 pm 02:20 PM

Kesan animasi dalam css3 mempunyai ubah bentuk; anda boleh menggunakan "animasi: atribut animasi @keyframes ..{..{transform: transformation attribute}}" untuk mencapai kesan animasi ubah bentuk Atribut animasi digunakan untuk menetapkan gaya animasi, dan atribut transform digunakan untuk menetapkan gaya ubah bentuk.

See all articles