>  기사  >  웹 프론트엔드  >  CSS3 글꼴 변형에 대한 자세한 설명

CSS3 글꼴 변형에 대한 자세한 설명

小云云
小云云원래의
2018-02-10 15:37:164419검색

한 단어로 설명하려면 글꼴 변형이라고 부를 수 있습니다. 해당 CSS 속성은 합자, 대문자, 숫자 및 대체를 포함하는 font-variation-* 속성입니다. 글리프. 이러한 속성을 사용하면 웹에서 보다 정확하고 아름다운 타이포그래피(텍스트) 효과를 만들 수 있습니다. 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;    }}

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

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;

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; /* 低版本浏览器 禁用 */

效果如下:

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

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; /* 低版本浏览器 禁用 */

效果如下:

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

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

使用这些值,看上去就像德文中的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 */

font-variant-position

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

值得庆幸的是,现在有一种方法可以使用font-variant-position真正实现subsup

사실 웹의 타이포그래피는 인쇄에서의 효율성보다 항상 뒤떨어집니다. 하지만 페이지에 인쇄된 글꼴은 수세기에 걸쳐 세련된 수준으로 발전해 왔기 때문에 이는 이해할 수 있는 일입니다. 브라우저에서 이러한 수준에 도달하는 것은 여전히 ​​어렵습니다. 🎜🎜그러나 웹 글꼴의 OpenType 기능이 증가하고 CSS 기능이 향상됨에 따라 웹에서의 조판과 인쇄용 조판의 격차가 점차 좁아지고 있습니다. 🎜🎜그래서 오늘 기사에서는 이전 예의 도움을 받아 CSS를 사용하여 OpenType 기능을 제어하는 ​​방법을 살펴보겠습니다. 하지만 사용하는 모든 웹 글꼴은 이러한 기능을 지원해야 한다는 점을 기억하세요. 🎜

font-variant-*속성

🎜대부분의 OpenType 기능은 CSS의 font-variant-* 속성을 ​​통해 제어할 수 있습니다. font-feature-settings를 사용하여 낮은 버전의 브라우저를 지원할 수도 있습니다. 그러나 가능하다면 보다 현대적인 font-variant-* 속성을 ​​사용해야 합니다. 실제 사용에서는 @supports 규칙을 사용하여 font-variant-*를 다운그레이드할 수 있습니다. 지원되는 브라우저와 지원되지 않는 브라우저에 이 속성을 사용하세요. -설정. 🎜
/* 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;
🎜아마도 지금까지 여러분은 저처럼 위 코드의 기능을 아직 잘 이해하지 못할 수도 있습니다. 걱정하지 마시고 계속 읽으시면 알게 될 것입니다. 🎜🎜font-variant-*주로 포함: 🎜
  • 🎜font-variant-ligatures🎜
  • 🎜글꼴 변형 대문자🎜
  • 🎜글꼴 변형 숫자🎜
  • 🎜 글꼴 변형-대체🎜
  • 🎜글꼴-변형-동아시아🎜
🎜 다음을 간단히 살펴보겠습니다. 이러한 속성을 콘텐츠로 활용하세요. 🎜

font-variant-ligatures

🎜링크는 두 개 이상의 글리프로 구성된 단일 글리프입니다. 보기 흉하거나 어색한 글자 충돌을 방지하는 경우가 많습니다. 주요 기능은 식별을 돕는 것입니다. 🎜🎜font-variant-ligatures는 다음 키워드를 속성 값으로 사용할 수 있습니다: 🎜
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 */

common-ligatures

🎜이러한 연결은 디자이너가 무엇인지 결정합니다. 정상적인 상황에서 사용하기 위한 연결입니다. 대부분의 브라우저에서는 기본적으로 이를 활성화하므로 대부분의 경우 이를 사용해야 합니다. 🎜🎜가장 일반적인 연결 값은 fi, ffi, th 또는 이와 유사한 것입니다. 해당 OpenType 값은 ligaclig입니다. 두 값 모두 가능합니다: 🎜
  • 🎜common-ligatures: 연결 활성화 🎜
  • 🎜no -common-ligatures: 연결 비활성화🎜
🎜예: 🎜
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 */
🎜효과는 다음과 같습니다.🎜🎜이전 줄에서 연결을 활성화하고 비활성화하는 효과 다음 줄의 연결🎜

discretionary-ligatures

🎜특수 효과를 얻기 위해 연결을 인쇄하는 데 사용할 수 있습니다. 이는 기본적으로 비활성화되어 있습니다. 또한 이러한 값은 특정 연결, 특정 글꼴을 제어하고 OpenType 디자이너가 정의하는 데 사용될 수 있음을 이해할 수 있습니다. 이는 OpenType 값 dig에 해당합니다. 또한 두 가지 가능한 값이 있습니다: 🎜
  • 🎜discretionary-ligatures: 연결 활성화 🎜
  • 🎜 no-discretionary-ligatures: 연결 비활성화 🎜
🎜코드에 설정된 경우: 🎜
/* 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;
🎜효과는 다음과 같습니다: 🎜🎜첫 번째 줄은 연결을 열고, 두 번째 줄 연결 비활성화🎜

문맥

🎜이 값은 문자가 문맥에 적응하는지 여부를 제어합니다. 즉, 주변의 글자와 잘 어울리는지 여부입니다. 이 값은 OpenType의 calt에 해당합니다. 마찬가지로 contextual은 활성화됨을 의미하고, no-contextual은 비활성화됨을 의미합니다. 🎜
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 */
🎜이 값을 사용하면 독일어로 tzß로 나타나는 것처럼 보입니다. 해당 OpenType 값은 hlig입니다. historical-ligatures 링은 활성화되고 no-historical-ligatures 링은 비활성화됩니다. 🎜
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 */

font-variant-position

🎜문자를 세로 방향으로 변경하기 위해 subsup 요소를 자주 사용합니다. 위치. 기본적으로 브라우저는 일반 숫자 문자를 사용하여 글꼴 크기를 작게 만들고 세로 정렬을 사용하여 높이거나 낮춥니다. 이는 실제로 subsup가 아니며 줄 높이를 엉망으로 만드는 것은 물론 보기에도 좋지 않습니다. 🎜🎜다행히 이제 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;

sub

实现类似于b96cac025db4031319c29e1eb68f19d6标签的下标字符效果:

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 */

super

实现类似于2cdea26b4c3988e37d674b56660962a7标签的上标字符效果:

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 */

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;

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 */

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 */

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 */

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 */

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 */

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 */

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;

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 */

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 */

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 */

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 */

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 */

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 */

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 */

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 */

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;

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 */

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

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;

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

总结

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

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

相关推荐:

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

javascript字体颜色控件的开发

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

위 내용은 CSS3 글꼴 변형에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.