您好!欢迎访问家园网-www.jy.wang!

家园网

详细讲解css的‌‌‌‌font-family属性,并列表总结

网络 作者:本站 点击:

CSS font-family 属性详解

font-family 是 CSS 中用于指定元素文本字体的属性,它是网页排版和品牌视觉一致性的核心。

基本语法

font-family: [字体族名称 | 通用字体族], [字体族名称 | 通用字体族], ...;

字体指定机制

1. 字体栈(Font Stack)

浏览器按顺序尝试字体列表,直到找到可用的字体:

body {
    font-family: 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}
/* 优先使用Segoe UI,不可用则尝试Roboto,以此类推 */

2. 字体名称规则

带空格的字体名:必须用引号包裹

font-family: 'Times New Roman', serif;  /* 正确 */
font-family: Times New Roman, serif;    /* 错误 */

不带空格的字体名:引号可选

font-family: Arial, sans-serif;        /* 正确 */
font-family: 'Arial', sans-serif;      /* 正确 */

字体分类详解

1. 通用字体族(Generic Families)

通用族说明典型代表字体适用场景
serif衬线体Times New Roman, Georgia, 宋体印刷品、传统排版、长篇文章
sans-serif无衬线体Arial, Helvetica, Verdana, 微软雅黑网页UI、屏幕显示、现代设计
monospace等宽字体Courier New, Consolas, Monaco代码、终端、表格数据
cursive手写体Comic Sans MS, 草书字体装饰性标题、个性化设计
fantasy艺术字体Impact, Papyrus艺术设计、特殊效果
system-ui系统UI字体使用操作系统默认界面字体保持与操作系统一致
math数学字体专门用于数学符号和公式数学公式排版
emoji表情符号字体Segoe UI Emoji, Apple Color Emoji表情符号显示
fangsong仿宋体(中文)仿宋中文传统印刷

2. 中文字体栈示例

/* Windows优先 */
.chinese-win {
    font-family: 'Microsoft YaHei', '微软雅黑', SimHei, sans-serif;
}
/* macOS优先 */
.chinese-mac {
    font-family: 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC', sans-serif;
}
/* 跨平台方案 */
.chinese-cross {
    font-family: 
        'Microsoft YaHei', '微软雅黑',    /* Windows */
        'PingFang SC', 'Hiragino Sans GB', /* macOS */
        'Source Han Sans CN',             /* 思源黑体 */
        'Noto Sans CJK SC',               /* Google字体 */
        sans-serif;
}

Web字体使用

1. @font-face 规则

@font-face {
    font-family: 'CustomFont';          /* 定义字体名称 */
    src: url('font.woff2') format('woff2'),  /* 现代格式优先 */
         url('font.woff') format('woff');    /* 回退格式 */
    font-weight: 400;                   /* 字重 */
    font-style: normal;                 /* 样式 */
    font-display: swap;                 /* 显示策略 */
}
body {
    font-family: 'CustomFont', sans-serif;
}

2. 字体格式支持

格式扩展名压缩率浏览器支持特点
WOFF2.woff2最高Chrome 36+, Firefox 39+现代标准,最佳压缩
WOFF.woffIE9+, 所有现代浏览器广泛支持
TTF/OTF.ttf, .otf广泛支持原始字体文件
EOT.eotIE8-IE11IE专用格式
SVG.svg最高旧版iOS Safari矢量格式,现已不推荐

3. 字体加载优化

@font-face {
    font-family: 'OptimizedFont';
    src: url('font-light.woff2') format('woff2');
    font-weight: 300;
    font-display: swap;  /* 先显示后备字体,再交换 */
    unicode-range: U+0020-007F; /* 仅加载ASCII字符集 */
}
@font-face {
    font-family: 'OptimizedFont';
    src: url('font-regular.woff2') format('woff2');
    font-weight: 400;
    font-display: swap;
}

实用字体栈配置

1. 跨操作系统英文字体栈

/* 现代无衬线字体栈 */
.modern-sans {
    font-family: 
        -apple-system,           /* macOS San Francisco */
        BlinkMacSystemFont,      /* macOS Chrome备用 */
        'Segoe UI',              /* Windows */
        Roboto,                  /* Android/Chrome OS */
        'Helvetica Neue',        /* 旧版macOS */
        Arial,                   /* 广泛支持 */
        sans-serif;
}
/* 衬线字体栈 */
.serif-stack {
    font-family: 
        Georgia,                 /* Windows/macOS */
        'Times New Roman',       /* 广泛支持 */
        Times,                   /* Unix */
        serif;
}
/* 等宽字体栈(代码显示) */
.code-stack {
    font-family: 
        'SF Mono',               /* macOS */
        'Cascadia Code',         /* Windows Terminal */
        'Fira Code',             /* 编程连字 */
        Consolas,                /* Windows */
        'Courier New',           /* 广泛支持 */
        monospace;
}

2. 响应式字体选择

:root {
    --font-system: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    --font-mono: 'SF Mono', Consolas, monospace;
}
body {
    font-family: var(--font-system);
}
pre, code {
    font-family: var(--font-mono);
}
@media (prefers-color-scheme: dark) {
    /* 深色模式可能使用不同字体 */
    body {
        font-family: 
            'SF Pro Display',    /* macOS深色模式优化 */
            var(--font-system);
    }
}

字体属性组合

1. 与 font-weight 配合

@font-face {
    font-family: 'VariableFont';
    src: url('font.woff2') format('woff2-variations');
    font-weight: 100 900; /* 可变字体范围 */
}
.element {
    font-family: 'VariableFont', sans-serif;
    font-weight: 450; /* 使用中间值 */
}

2. 与 font-feature-settings 配合

.advanced-typography {
    font-family: 'Open Sans', sans-serif;
    font-feature-settings: 
        "kern" 1,        /* 字距调整 */
        "liga" 1,        /* 标准连字 */
        "clig" 1;        /* 上下文连字 */
}

性能优化策略

1. 字体子集化

/* 中文子集示例 - 仅加载常用字符 */
@font-face {
    font-family: 'SubsetFont';
    src: url('font-subset.woff2') format('woff2');
    unicode-range: U+4E00-4EFF, U+3000-30FF; /* 常用汉字和标点 */
}

2. 字体加载策略对比

/* 策略1:阻塞渲染(默认) */
.blocking {
    font-display: block; /* FOIT - 字体不可见闪烁 */
}
/* 策略2:交换(推荐) */
.swapping {
    font-display: swap; /* FOUT - 无样式文本闪烁 */
}
/* 策略3:自动(平衡) */
.auto {
    font-display: auto; /* 浏览器决定 */
}
/* 策略4:回退 */
.fallback {
    font-display: fallback; /* 短暂阻塞后回退 */
}
/* 策略5:可选 */
.optional {
    font-display: optional; /* 几乎不阻塞,可能不显示 */
}

浏览器兼容性处理

1. 特征检测字体可用性

// JavaScript检测字体是否加载
function checkFont(fontName) {
    return document.fonts.check(`12px "${fontName}"`);
}
// CSS配合使用
.element {
    font-family: fallback-sans;
}
.font-loaded .element {
    font-family: 'WebFont', fallback-sans;
}

2. 渐进增强字体加载

/* 基础 - 系统字体 */
body {
    font-family: system-ui, sans-serif;
}
/* 增强 - 如果字体加载成功 */
@supports (font-variation-settings: 'wght' 400) {
    .enhanced {
        font-family: 'VariableFont', system-ui, sans-serif;
    }
}


font-family 属性总结表

特性说明
继承性
初始值取决于浏览器/操作系统
适用元素所有元素
动画性
计算值按指定值
百分比值不支持
媒体查询支持

字体匹配算法步骤

  1. 用户代理维护字体数据库

  2. 按 font-family 列表顺序匹配

  3. 检查字体可用性(已安装/已加载)

  4. 匹配字体样式(weight, style, stretch)

  5. 如果未找到,使用默认字体

最佳实践指南

1. 设计原则

/* 建立设计系统字体变量 */
:root {
    --font-primary: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    --font-secondary: Georgia, 'Times New Roman', serif;
    --font-code: 'SF Mono', Consolas, monospace;
    --font-cn: 'PingFang SC', 'Microsoft YaHei', sans-serif;
}
/* 应用层使用 */
body { font-family: var(--font-primary); }
.heading { font-family: var(--font-secondary); }
code { font-family: var(--font-code); }
.chinese { font-family: var(--font-cn); }

2. 性能清单

  • ✅ 使用 WOFF2 格式

  • ✅ 实施字体子集化

  • ✅ 设置 font-display: swap

  • ✅ 使用 unicode-range 分割字体

  • ✅ 预加载关键字体

  • ❌ 避免过多字体文件

  • ❌ 避免使用大字体文件

3. 可访问性考虑

/* 支持操作系统偏好 */
@media (prefers-reduced-motion: no-preference) {
    .smooth-font {
        font-smooth: always;
        -webkit-font-smoothing: antialiased;
    }
}
/* 高对比度模式支持 */
@media (prefers-contrast: high) {
    body {
        font-family: 
            'Arial Black',      /* 更粗的字体 */
            sans-serif;
        font-weight: 900;
    }
}
/* 减少透明度时的字体调整 */
@media (prefers-reduced-transparency: reduce) {
    .text {
        font-family: sans-serif; /* 使用更清晰的字体 */
        text-shadow: none;
    }
}

4. 国际化支持

/* 多语言字体栈 */
.multilingual {
    font-family: 
        /* 拉丁字母 */
        -apple-system, BlinkMacSystemFont, 
        /* 西里尔字母 */
        'Roboto', 
        /* 阿拉伯语 */
        'SF Arabic',
        /* 日语 */
        'Hiragino Kaku Gothic ProN',
        /* 简体中文 */
        'PingFang SC', 'Microsoft YaHei',
        /* 通用回退 */
        sans-serif;
}

常见陷阱与解决方案

问题1:字体闪烁(FOUT/FOIT)

解决方案

@font-face {
    font-display: swap;  /* 避免FOIT */
}
/* 或使用字体加载API */
<script>
document.fonts.ready.then(() => {
    document.documentElement.classList.add('fonts-loaded');
});
</script>

问题2:字体文件过大

解决方案

# 使用工具优化
woff2_compress font.ttf          # 转换格式
pyftsubset font.ttf --text-file=常用字.txt  # 子集化

问题3:中英文混合排版


/* 错误:英文使用中文字体 */
.bad-example {
    font-family: 'Microsoft YaHei', sans-serif; /* 英文显示效果差 */
}
/* 正确:分别指定 */
.good-example {
    font-family: 
        -apple-system, BlinkMacSystemFont,  /* 英文字体 */
        'Microsoft YaHei',                  /* 中文字体 */
        sans-serif;
}
/* 更好:使用unicode-range */
@font-face {
    font-family: 'HybridFont';
    src: local('Arial');
    unicode-range: U+0020-007F; /* 基本拉丁字母 */
}
@font-face {
    font-family: 'HybridFont';
    src: local('Microsoft YaHei');
    unicode-range: U+4E00-9FFF; /* 汉字 */
}

font-family 是建立品牌视觉识别和确保跨平台一致性的关键属性。合理设计字体栈、优化字体加载、考虑国际化和可访问性,可以显著提升用户体验和网站性能。

标签: