前,瀏覽器只能展示本地安裝的字體。如果字體未安裝,網頁顯示效果會大打折扣。
為了解決這個問題,CSS 引入 web 字體,允許瀏覽器從服務器下載字體,下載完成后再重新渲染字體。
使用 web 字體前,需要了解常用的字體文件格式。
TTF 字體文件,即 TrueType 字體,是由蘋果和微軟在 20 世紀 80 年代末開發的字體標準。它是 macOS 和 Windows 操作系統使用最廣泛的字體格式。
OTF 字體文件,即 OpenType 字體,是一種可縮放的計算機字體格式。它建立在 TrueType 基礎上,是微軟的注冊商標。OpenType 字體目前在主要的計算機平臺上廣泛使用。
WOFF 字體文件,即 The Web Open Font Format 字體,是一種用于網頁的字體格式,2009 年開發,如今是 W3C(萬維網聯盟)的推薦標準。WOFF 本質是 OpenType 或 TrueType 字體,但是經過壓縮并附加額外的元數據。在帶寬受限的網絡中,WOFF 能更好的支持從服務器到客戶端的字體傳輸。
WOFF 2.0 字體文件,相比于 WOFF,提供了更高的壓縮效率。
SVG 字體,將 SVG 用作顯示文本時的字形。SVG 1.1 規范定義了一個字體規范,允許在 SVG 文檔中創建字體。
EOT 字體文件,即 Embedded OpenType Fonts 文件,是微軟設計的一種用于網頁的嵌入式字體,它是 OpenType 字體的緊湊形式。
不同字體格式的瀏覽器兼容性下圖所示:
不同字體格式的瀏覽器兼容性,截圖數據來自 w3schools.com
使用 @font-face CSS 指令定義自定義字體。使用前需要把字體文件放在服務器目錄,然后定義新的字體名稱,并指向字體所在位置。
以京華老宋體為例,這是一款可以免費商用的中文字體。下載字體文件后,放到和 index.html 同級的目錄,重命名為 jh-song.ttf。
下載字體文件
在 @font-face 指令內,使用 font-family 定義字體名稱,src 屬性定義字體文件路徑。
定義 web 字體
然后,像使用普通字體一樣,使用自定義字體樣式:
使用 web 字體
完
前端開發過程中難免會用到特殊字體,如何引入特殊字體?
@font-face {
font-family: 'icomoon'; // 這里自定義字體名稱
src: url('fonts/icomoon.eot?'); // 文件路徑或者服務器路徑
src: url('fonts/icomoon.eot?') format('embedded-opentype'), // format屬性:字體的格式 主要用于瀏覽器識別
url('fonts/icomoon.ttf?') format('truetype'),
url('fonts/icomoon.woff?') format('woff'),
url('fonts/icomoon.svg?') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
/* 調用 */
body{
font-family:'icomoon'
}
注:eot為IE專用,ttf官方說是蘋果和微軟為PostScript 而開發的字體格式,個人理解為通用格式。woff是壓縮過后輕量級,svg對文本支持不太好
頁中添加滾動字幕效果
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>滾動字體的設置</title>
</head>
<body>
<canvas id="canvas1" width="600" height="600" style="border:1px solid #000000"></canvas>
<script type="text/javascript">
var canvas1 = document.querySelector("#canvas1") // 1.找到畫布對象
var ctx = canvas1.getContext("2d") // 2.上下文對象(畫筆)
ctx.shadowBlur = 10; // 陰影距離
ctx.shadowColor = "red" // 陰影顏色
ctx.shadowOffsetX = 30 // 陰影偏移
ctx.shadowOffsetY = 30 // 陰影偏移
ctx.font = "150px 楷體"
ctx.fillText("你好!", 20,150)
ctx.fillText("你好!", 20,350)
ctx.strokeText('你好!',23, 153)
ctx.strokeText('你好',23, 553)
canvas繪制文字
var x = 600
setInterval(function(){
if(x > -350){
//清空畫布
ctx.clearRect(0,0,600,600)
ctx.strokeText('你好!',x, 153)
ctx.fillText("你好!", x,350)
ctx.font = "50px 宋體"
ctx.strokeText('每天學習一點點',x, 553)
x -= 3
}else{x=590}
}, 16)
</script>
</body>
</html>
*請認真填寫需求信息,我們會在24小時內與您取得聯系。