详解CSS之Web 字体

简介: 详解CSS之Web 字体

在模块的第一篇文章中,我们探讨了用于样式化字体和文本的基本 CSS 特性。在这篇文章中,我们将更进一步,详细地探索 web 字体——它们允许你下载自定义字体和你的 web 页面,以允许更多不同的、自定义的文本样式。

前提:

基本计算机素养,HTML 基础 (学习 Introduction to HTML), CSS 基础 (学习Introduction to CSS), CSS 文本和字体基础 。

目标:

学习如何将 web 字体应用到 web 页面,使用第三方服务,或者编写自己的代码。

字体种类回顾

正如我们在基本文本和字体样式中所看到的那样,应用到你的 HTML 的字体可以使用 font-family属性来控制。你需要提供一个或多个字体种类名称,浏览器会在列表中搜寻,直到找到它所运行的系统上可用的字体。

CSSCopy to Clipboard
p {
  font-family: Helvetica, "Trebuchet MS", Verdana, sans-serif;
}

这个系统运行良好,但是对于传统的 web 开发人员来说,字体选择是有限的。只有少数几种字体可以保证兼容所有流行的操作系统——这就是所谓的 Web-safe 字体。你可以使用字体堆栈来指定可选择的字体,后面是 Web-safe 的替代选项,然后是默认的系统字体,但是为了确保你的设计在每种字体中都显示正常,这样增加了测试的开销。

Web 字体

但是还有一种选择,它非常有效,回到 IE 版本 6。Web 字体是一种 CSS 特性,允许你指定在访问时随你的网站一起下载的字体文件,这意味着任何支持 Web 字体的浏览器都可以使用你指定的字体。太酷啦!所需的语法如下所示:

首先,在 CSS 的开始处有一个@font-face块,它指定要下载的字体文件:

CSSCopy to Clipboard
@font-face {
  font-family: "myFont";
  src: url("myFont.ttf");
}

在这个下面,你可以使用 @font-face 中指定的字体种类名称来将你的定制字体应用到你喜欢的任何东西上,比如说:

CSSCopy to Clipboard
html {
  font-family: "myFont", "Bitstream Vera Serif", serif;
}

语法确实比这更复杂,下面我们将详细介绍。

关于网页字体有两件重要的事情要记住:

浏览器支持不同的字体格式,因此你需要多种字体格式以获得良好的跨浏览器支持。例如,大多数现代浏览器都支持 WOFF / WOFF2(Web Open Font Format versions 1 and 2,Web 开放字体格式版本 1 和 2),它是最有效的格式,但是旧版本 IE 只支持 EOT (Embedded Open Type,嵌入式开放类型) 的字体,你可能需要包括一个 SVG 版本的字体支持旧版本的 iPhone 和 Android 浏览器。我们将向你展示如何生成所需的代码。

字体一般都不能自由使用。你必须为他们付费,或者遵循其他许可条件,比如在代码中 (或者在你的站点上) 提供字体创建者。你不应该在没有适当的授权的情况下偷窃字体。

备注: Web 字体作为一种技术从 Internet Explorer 4 开始就得到了的支持!

自主学习:web 字体示例

记住这一点,让我们从最初的原则构建一个基本的 web 字体示例。使用嵌入的 live 示例很难演示这一点,因此,我们希望你按照下面几节中详细介绍的步骤来了解这个过程。

你应该使用 web-font-start.html 和 web-font-start.css 文件作为开始添加到你的代码中(又见预览版。)现在,在你的电脑上的一个新目录中复制这些文件。在 web-font-start.css文件中,你将找到一些最小的 CSS 来处理这个示例的基本布局和排版。

查找字体

对于本例,我们将使用两种 web 字体,一种用于标题,另一种用于正文文本。首先,我们需要找到包含字体的字体文件。字体是由字体铸造厂创建的,并且存储在不同的文件格式中。通常有三种类型的网站可以获得字体:

免费的字体经销商:这是一个可以下载免费字体的网站 (可能还有一些许可条件,比如对字体创建者的信赖)。比如: Font Squirre,dafont 和 Everything Fonts。

收费的字体经销商:这是一个收费则字体可用的网站,例如fonts.com或myfonts.com。你也可以直接从字体铸造厂中购买字体,例如Linotype,Monotype 或 Exljbris。

在线字体服务:这是一个存储和为你提供字体的网站,它使整个过程更容易。更多细节见使用在线字体服务。

让我们找到一些字体!前往Font Squirrel 并选择两种字体——一种用于标题的有趣的字体 (可能是一种不错的显示字体或无衬线字体),和一种用于段落,稍微不那么华丽,更易于阅读的字体。当你找到每种字体时,按下下载按钮,并将该文件保存在与你先前保存的 HTML 和 CSS 文件相同的目录中。无论它们是 TTF(True Type Fonts)) 还是 OTF(Open Type 字体) 都不重要。

在每种情况下,都要解压字体包 (Web 字体通常分布在包含字体文件和许可信息的 ZIP 文件中。) 你可能会在包中发现多个字体文件,一些字体是作为一个具有不同变体的家庭分布的,例如,瘦、中、粗体、斜体、斜体等等。对于这个例子,我们只是想让你自己考虑一个单一的字体文件。

备注: 在右边栏的“查找字体”部分中,你可以单击不同的标记和分类来筛选显示的选项。

生成所需代码

现在你需要生成所需的代码 (以及字体格式)。对于每种字体,遵循以下步骤:

确保你已经满足了任何许可证的要求,如果你打算在一个商业和/或 Web 项目中使用它。

前往 Fontsquirrel Webfont Generator.

使用上传字体按钮上传你的两个字体文件。

勾选复选框,“是的,我上传的字体符合网络嵌入的合法条件。

点击下载你的套件(kit)。

在生成器完成处理之后,你应该得到一个 ZIP 文件,将它保存在与 HTML 和 CSS 相同的目录中。

在演示中实现代码

在这一点上解压你刚刚生成的 webfont 套件。在解压的目录中,你将看到三个有用的条目:

每个字体的多个版本:(比如 .ttf, .woff, .woff2…… 随着浏览器支持需求的改变,提供的字体将随着时间的推移而不断更新。)正如上面提到的,跨浏览器支持需要使用多种字体——这是 Fontsquirrel 的方法,确保你得到了你需要的一切。

每个字体的一个演示 HTML 文件在你的浏览器中加载,看看在不同的使用环境下字体会是什么样子。

一个 stylesheet.css 文件,它包含了你需要的生成好的 @font-face 代码。

要在演示中实现这些字体,请遵循以下步骤:

将解压缩的目录重命名为简易的目录,比如fonts

打开 stylesheet.css 文件,把包含在你的网页中的 @font-face 块复制到你的 web-font-start.css 文件——你需要把它们放在最上面,在你的 CSS 之前,因为字体需要导入才能在你的网站上使用。

每个url()函数指向一个我们想要导入到我们的 CSS 中的字体文件——我们需要确保文件的路径是正确的,因此,在每个路径的开头添加fonts/ (必要时进行调整)。

现在,你可以在字体栈中使用这些字体,就像任何 web 安全或默认的系统字体一样。例如:

CSSCopy to Clipboard
font-family: "zantrokeregular", serif;

你应该得到一个演示页面,上面有一些漂亮的字体。因为不同字体的字体大小不同,你可能需要调整大小、间距等,以区分外观和感觉。

image.png

备注: 如果对于要让它正常工作你有任何问题,可以自由地将你的版本与我们完成的文件进行比较——见 web-font-finished.html 和 web-font-finished.css (运行完成的示例)。

使用在线字体服务

在线字体服务通常会为你存储和服务字体,这样你就不用担心写@font-face代码了,通常只需要在你的网站上插入一两行代码就可以让一切都运行。例子包括Typekit 和Cloud.typography。大多数这些服务都是基于订阅的,除了Google Fonts,这是一个有用的免费服务,特别是对于快速的测试工作和编写演示。

大多数这些服务都很容易使用,所以我们不会详细地介绍它们。让我们快速浏览一下 Google Fonts,这样你就能明白它的意思了。再次的,使用web-font-start.html 和 web-font-start.css a 的副本作为你的开始。

前往 Google Fonts.

使用左边的过滤器来显示你想要选择的字体类型,并选择一些你喜欢的字体。

要选择字体种类,按下按钮旁边的 ⊕ 按钮。

当你选择好字体种类时,按下页面底部的*[Number]* 种类选择。

在生成的屏幕中,首先需要复制所显示的 HTML 代码行,并将其粘贴到 HTML 文件的头部。将其置于现有的<link>元素之上,使得字体是导入的,然后在你的 CSS 中使用它。

然后,你需要将 CSS 声明复制到你的 CSS 中,以便将自定义字体应用到你的 HTML。

备注: 如果你需要对比我们的,你可以在 google-font.html和google-font.css找到完整版本的。(见预览版)

关于 @font-face 的更多细节

让我们来探索由 fontsquirrel 为你生成的@font-face语法。这是其中一个块的样子:

CSSCopy to Clipboard
@font-face {
  font-family: "ciclefina";
  src: url("fonts/cicle_fina-webfont.eot");
  src:
    url("fonts/cicle_fina-webfont.eot?#iefix") format("embedded-opentype"),
    url("fonts/cicle_fina-webfont.woff2") format("woff2"),
    url("fonts/cicle_fina-webfont.woff") format("woff"),
    url("fonts/cicle_fina-webfont.ttf") format("truetype"),
    url("fonts/cicle_fina-webfont.svg#ciclefina") format("svg");
  font-weight: normal;
  font-style: normal;
}

这被称为"bulletproof @font-face syntax(刀枪不入的 @font-face 语法)", 这是 Paul Irish 早期的一篇文章提及后 @font-face 开始流行起来 (Bulletproof @font-face Syntax。让我们来看看它是怎么做的:

font-family:这一行指定了你想要引用的字体的名称。你可以把它作为你喜欢的任何东西,只要你在你的 CSS 中始终如一地使用它。

src:这些行指定要导入到你的 CSS(url部分) 的字体文件的路径,以及每种字体文件的格式 (format部分)。后面的部分不是必要的,但是声明它是很有用的,因为它允许浏览器更快地找到可以使用的字体。可以列出多个声明,用逗号分隔——浏览器会搜索并使用它能找到的第一个——因此,最好是把新的、更好的格式比如 WOFF2 放在前面,把偏老的,不是那么好的格式像 TTF 这样的放在后面。唯一的例外是 EOT 字体——他们首先在旧版本的 IE 中修复了几个 bug,这样它就会尝试使用它找到的第一件东西,即使它不能真正使用字体。

font-weight/font-style: 这些行指定字体的粗细,以及它是否斜体。如果你正在导入相同字体的多个粗细,你可以指定它们的粗细/样式,然后使用不同的font-weight/font-style来选择它们之间的不同值,而不必调用字体种类不同名称的所有不同成员。Roger Johansson 写的 @font-face tip: define font-weight and font-style to keep your CSS simple 更详细地说明了该做些什么。

备注: 你还可以为你的 web 字体指定特定的font-variant 和 font-stretch ) 值。在较新的浏览器中,你还可以指定一个unicode-range值,这是一个你需要使用什么 web 字体的特定范围的字符——在支持浏览器中,只有指定的字符才会被下载,省去了不必要的下载。Drew McLellan 写的Creating Custom Font Stacks with Unicode-Range在如何利用这个问题上提供了一些有用的建议。


目录
相关文章
|
13天前
|
前端开发
css 设置背景色渐变、字体颜色渐变
css 设置背景色渐变、字体颜色渐变
|
2月前
|
前端开发 JavaScript C++
揭秘Web前端CSS引入秘籍:Link vs @import,你的选择决定页面加载速度,你选对了吗?
【8月更文挑战第26天】本文探讨了Web前端开发中CSS的引用方法,主要包括行内样式、内部样式表及外部样式表三种形式。重点对比了外部样式表中的`&lt;link&gt;`和`@import`两种引入方式。`&lt;link&gt;`作为HTML元素,在页面加载初期就开始加载样式资源,支持并行加载,对提高页面加载速度有益。而`@import`作为一种CSS规则,仅能在CSS文件中使用,其引入的样式表会在页面完成加载后才开始加载,可能导致渲染延迟且不支持并行加载。因此,在多数情况下,推荐采用`&lt;link&gt;`方式引入外部样式表,以确保更佳的性能表现和浏览器兼容性。
85 2
|
1月前
|
前端开发
【前端web入门第四天】02 CSS三大特性+背景图
本文详细介绍了CSS的三大特性:继承性、层叠性和优先级,并深入讲解了背景图的相关属性,包括背景属性、背景图的平铺方式、位置设定、缩放、固定以及复合属性。其中,继承性指子元素自动继承父元素的文字控制属性;层叠性指相同属性后定义覆盖前定义,不同属性可叠加;优先级涉及选择器权重,包括行内样式、ID选择器等。背景图部分则通过具体示例展示了如何设置背景图像的位置、大小及固定方式等。
243 91
|
9天前
|
编解码 前端开发 JavaScript
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
24 2
|
1月前
|
前端开发
【前端web入门第三天】02 CSS字体和文本
本文详细介绍了CSS中字体和文本的相关属性。字体部分涵盖字体大小、粗细、样式、行高、字体族及`font`复合属性,通过具体示例展示了如何设置和使用这些属性。文本部分则讲解了文本缩进、对齐方式、修饰线及文字颜色等属性,并提供了实用的代码示例。此外,还简要介绍了调试工具中的一些细节,如错误属性标识和属性生效状态的控制。
57 28
|
1天前
|
存储 前端开发 JavaScript
CSS:现代Web设计的不同技术
【10月更文挑战第11天】 CSS:现代Web设计的不同技术
|
1月前
|
前端开发 JavaScript
【前端web入门第三天】01 css定义和引入方式 四种标签选择器
本文档详细介绍了CSS的基础知识及其应用。内容涵盖了CSS的定义、CSS在HTML中的引入方式,包括内部样式表、外部样式表及行内样式表的使用场景与方法。此外,还深入解析了不同种类的选择器:标签选择器、类选择器、ID选择器以及通配符选择器的功能与应用场景,并提供了实例帮助理解。最后,通过具体的新属性示例,指导如何使用这些选择器来实现基本的盒子绘制。适合初学者系统学习CSS。
44 15
|
1月前
|
前端开发
|
1月前
|
前端开发
【前端web入门第六天】01 CSS浮动
这是关于CSS布局第六天学习目标的介绍,主要解决多个`&lt;div&gt;`标签在同一行显示的问题,即一个在左边,另一个在右边。文中介绍了标准流、浮动及flex布局的概念,重点推荐使用flex布局。文章详细讲解了浮动的基本使用、布局技巧及清除浮动的方法,包括额外标签法、单伪元素法、双伪元素法和`overflow`隐藏法,并提供了示例代码帮助理解。
|
2月前
|
移动开发 JavaScript 前端开发
揭秘!如何用Web2py+HTML5/CSS3/jQuery打造超炫响应式网站?你的设计梦想即将照进现实!
【8月更文挑战第31天】本文详细介绍如何利用Web2py框架及HTML5、CSS3与jQuery构建响应式网站。首先需安装Python和Web2py,并启动服务器。接着,在Web2py中创建新应用,例如命名为“ResponsiveSite”。随后,编写HTML5基本结构,包括头部、导航栏等元素。在`styles.css`文件中添加CSS3样式代码,实现响应式布局。最后,通过在`scripts.js`中加入jQuery脚本提升页面交互性,如点击导航项时平滑滚动至目标区域。此教程为你打下响应式网站设计的基础,便于进一步扩展和优化。
19 1