惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
Vercel News
Vercel News
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
Jina AI
Jina AI
B
Blog
Recorded Future
Recorded Future
MyScale Blog
MyScale Blog
I
InfoQ
aimingoo的专栏
aimingoo的专栏
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
爱范儿
爱范儿
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
博客园 - Franky
Schneier on Security
Schneier on Security
V
V2EX
TaoSecurity Blog
TaoSecurity Blog
H
Hacker News: Front Page
Cloudbric
Cloudbric
D
DataBreaches.Net
B
Blog RSS Feed
P
Palo Alto Networks Blog
云风的 BLOG
云风的 BLOG
NISL@THU
NISL@THU
I
Intezer
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyberwarzone
Cyberwarzone
F
Fortinet All Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
K
Kaspersky official blog
Forbes - Security
Forbes - Security

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 大白话 | Java初学指♂男:“说说初学的误区与死结”( 壹 | 反射与Field ) - 技术改变视野 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解! - 技术改变视野 🎨 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 - 技术改变视野 我在 GitHub 上的开源项目 - 技术改变视野 为IDEA/Git配置GPG密钥,点亮GitHub Verified Commit标识 - 技术改变视野 从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf - 技术改变视野 无题 - 技术改变视野 年轻人的第一辆京牌电动车 - 技术改变视野 我们忙碌且漫长的一生,有多久是为自己而活? - 技术改变视野 一个最简单的实例理解Semaphore在Java中的作用 - 技术改变视野 说说《后浪》 - 技术改变视野 实例带你学会简单的Java Thread多线程 - 技术改变视野 一个实例理解Java的接口(interface)用处与用法 - 技术改变视野 一个实例带你理解JavaBean - 技术改变视野 WebFilter-SpringBoot过滤器注解实例讲解 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用 - 技术改变视野 实例带你获取多线程Thread的返回值之 (壹) - Callable的运行 - 技术改变视野 实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据 - 技术改变视野 一个实例理解Java Runnable多线程用处与用法 - 技术改变视野 从零开始OpenSSL之 (壹) - 使用genrsa、rsa、rsautl生成公私钥 - 技术改变视野 从零开始 OpenSSL 之 (贰) - 使用 rsautl 解密文件 - 技术改变视野 大白话之Docker(壹):快速入门&&简单官方实例 - 技术改变视野 大白话之Docker(贰):简单部署一个Tomcat服务并发布内容 - 技术改变视野 大白话之从零讲解DVWA(壹)-SQL注入(SQL Injection) Low Level - 技术改变视野 大白话之从零讲解DVWA(贰)-SQL注入(SQL Injection) Medium/High Level - 技术改变视野 Java日志插件-Slog4J下载 - 技术改变视野 大白话之必会Java Atomic | 线程一点也不安全(一):比自增和synchronized更快速、靠谱的原子操作(调用C语言) - 技术改变视野 Log-MySQL root用户登录后无法查看数据库全部表/正常访问数据库 Access denied for user 'root'@'localhost' to database - 技术改变视野 大白话之Docker(叁):制作一个运行Tomcat服务端的Docker镜像 - 技术改变视野 Github仅保留指定文件/文件夹当前Commit,删除所有历史记录,清除「敏感信息」 - 技术改变视野 将Tomcat、MySQL从Linux迁移到Windows的心路历程(干货):令人恐惧的字符编码 - 技术改变视野 Spring: java.lang.NoSuchMethodError: clearCache | ClassNotFoundException | Error during artifact deployment 思路及解决办法 - 技术改变视野 大白话之Java反射-初学最迷的概念:能干啥?咋用? - 技术改变视野 大白话之Java面向接口编程:最“正经”的中文实例讲解,看不懂来打我! - 技术改变视野 大白话 | 课堂实践:使用Iterator对数组进行遍历 - 技术改变视野 大白话之fail-fast | fail-safe:为什么会有这个机制?它有什么作用? - 技术改变视野 刨根问底 | 大白话:在使用注解后,框架是怎么知道你哪个方法使用了注解的?用@RequestMapping注解举例详解! - 技术改变视野 大白话之必会Java Atomic | 线程一点也不安全(二):Atomic的ABA问题会导致什么情况?如何解决? - 技术改变视野 随笔 | 奇淫技巧 | Java:记return和短路运算符的妙用 - 技术改变视野 随笔 | Tomcat:续-从Linux迁移到Windows编码问题彻底解决 - 技术改变视野 大白话之AutoClosable接口 | try-with-resources:JDK1.7的新特性,提高重复回收效率 - 技术改变视野 大白话之Java多线程join方法:开局一张图,试学一分钟,你就费和我一样,理解介个方法 - 技术改变视野 大白话之Java Stream流:将类数组流化,便捷批量修改,通俗讲解! - 技术改变视野 Java 困扰三周の问题:使用byte[]或skip()方法读取字节流Stream文件尾部多/少/缺字节解决方法 - 技术改变视野 大白话之Java级联调用:一个类,一条语句,同时调用好几个方法,串成一串 - 技术改变视野
离线使用 Google Fonts:让你的网站更精致 | goofoffline 神器,一键下载生成离线字体库! - 技术改变视野
adlered · 2020-04-24 · via 技术改变视野

前言

你一定见过,很多优雅的网站都使用了十分美观且不同的字体。他们通常都是采用了来自 Google Fonts 的 Web 字体。

CSS 指定字体

通过将 font-family 定义在 CSS 的指定标签(例如下面例子中的 body 标签),该标签中的所有文字都会听从 font-family 的指挥,以指定的字体进行显示。

font-family 支持同时定义多个字体,为什么要定义多个字体呢:如果浏览器不支持定义的第一个字体,它将尝试应用下一个字体。

1body {
2    font-family: Arial, Helvetica, sans-serif;
3}

以上例子中,字体的尝试顺序是:ArialHelvetiicasans-serif

安全字体

由于每个浏览器用户使用的系统、浏览器不同,支持的字体也不同,所以我们定义多个字体是为了保险起见,一般我们都会备选几个支持的比较广泛的字体。

如想获得更多关于安全字体的组合,请看:CSS Web安全字体 | 菜鸟教程

Web 字体

简单来讲,就是当你打开一个网站时,如果这个网站定义了 Web 字体 ,那么你的浏览器会自动下载指定的 Web 字体 文件,并将它应用于当前页面中。

Web 字体系统字体 是没有区别的。唯一的区别就在于, 系统字体 不需要进行下载,已经提前在系统中预置 / 安装过了,免除了下载的等待时间。而 Web 字体 则需要浏览器主动对其下载并 临时安装

但并不是每次访问都要重新下载整个 Web 字体,绝大部分浏览器都有缓存系统,它们会将最近加载的静态文件放置在系统缓存中,下一次调用时就不需要再次下载了,直接从系统中获取,直到资源缓存过期或用户主动强制刷新资源(使用 Ctrl + F5 快捷键)才会重新下载。

使用 Web 字体

本地化 Google Fonts

请先安装

  • Node 和 npm

开始

  1. 挑选你喜欢的字体。

需要科学上网!
前往 fonts.google.com 挑选你喜欢的字体,这里以 Roboto 为例:

  • 选择字体粗细,这里选择 Light 300,点击右侧的 + Select this style

image.png

  • 此时右侧会弹出一个选项卡,选择 Embed,复制 <link 标签下 src="xxx" 中的 CSS 文件地址,同时备份 “CSS rules to specify families” 下的内容

image.png

  1. 通过 npm 安装 google-fonts-offline

google-fonts-offline 是一款开源的 Google Fonts 一键离线下载工具。

启动你的终端或命令行,输入以下命令安装:

1npm install -g google-fonts-offline

如果这里提示你 找不到命令 npm,说明你没有仔细阅读这篇文章的前段内容~

  1. 生成离线字体

我新建了一个 Web 目录:/Users/adler/testPage 用于本次测试,这里面包含了主页的 index.html 和即将下载的离线字体文件,目录不是固定的,定位到你的 Web 目录即可。

首先,切换目录到你的 Web 根目录(这里不要照着敲,改成你自己的 Web 目录):

1cd /Users/adler/testPage

还记得刚刚复制的 src="xxx" 中的内容吗?现在要用到它了!
输入命令,记得将地址替换成你自己的:

注意:此处直接粘贴网址到命令中可能会被加上反斜杠 \ ,记得主动删除掉!

1goofoffline "https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap"

运行结果:

 1Mimics to Mozilla/5.0 (MSIE 8.0; Windows NT 6.1; Trident/4.0)...
 2  Downloading Roboto_300_normal.eot...
 3Mimics to Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1...
 4  Downloading Roboto_300_normal.woff...
 5Mimics to Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.15 Version/10.00...
 6  Downloading Roboto_300_normal.ttf...
 7Mimics to Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10...
 8  Downloading Roboto_300_normal.svg...
 9Mimics to Mozilla/5.0 (Windows NT 6.1; rv:43.0) Gecko/20100101 Firefox/43.0...
10  Downloading Roboto_300_normal.woff2...
11Composing CSS file...
12Done!

在出现 Done! 的提示后,查看下当前目录的文件,你会发现多出了一个 fonts 文件夹:

1> $ ls
2fonts      index.html

进入 fonts 文件夹:

1> $ cd fonts && ls
2Roboto_300_normal.eot   Roboto_300_normal.ttf   Roboto_300_normal.woff2
3Roboto_300_normal.svg   Roboto_300_normal.woff  fonts.css

现在,我们只需要引用 fonts.css 到 HTML 中就可以了。

  1. 应用到 HTML

在 HTML 的 <head> 部分添加以下代码:

1<link rel="stylesheet" href="fonts/fonts.css">

image.png

访问页面,通过开发者工具,可以看到网页已经加载了 Web 字体

image.png

不要慌,我们还需要指定 <head> 标签下的所有文字使用该字体:

还记得刚开始复制的第二行代码吗?将以下代码写入 <style> 标签.css` 文件中:

1body {
2	font-family: 'Roboto', sans-serif;
3}

image.png

  1. 大功告成

刷新页面,你会发现字体变得更加骚气了!

image.png

后语

并不是所有的字体都支持中文,我推荐这款:

1https://fonts.googleapis.com/css?family=Noto+Sans+TC&subset=chinese-traditional

中文字库都很大,这款支持中文的字体将中文划分为多个 20KB 左右的小文件按需加载,大大优化了加载所需的时间。

快给你的 Web 项目安排一个 Web 字体 吧!提升网站质感的神器。