CSS: CSS 文本与字体
网页中最主要的内容就是文本。CSS 提供了丰富的属性来控制文本的字体、大小、颜色、间距和对齐方式。
1. 字体属性
(1) 字体属性速查表
| 属性 | 常用值 | 作用 |
|---|---|---|
font-family |
"Microsoft YaHei", Arial, sans-serif |
设置字体(可写多个备选) |
font-size |
16px, 1.2em, 1rem, 100% |
字体大小 |
font-weight |
normal(400), bold(700), 100~900 |
字体粗细 |
font-style |
normal, italic, oblique |
字体样式(斜体/正常) |
line-height |
1.5(无单位), 24px, 150% |
行高(推荐正文1.5~1.8) |
font |
italic bold 16px/1.8 sans-serif |
简写属性,可同时设置多个 |
(2) 字体属性详解
(3) font-family(字体)
设置文本的字体。可以指定多个字体作为备选:
▶ 示例
HTML
<style>
p {
font-family: "Microsoft YaHei", "PingFang SC", Arial, sans-serif;
}
</style>
<p>这是一个段落示例。</p>
<p style="font-family: Arial, sans-serif;">Arial 字体演示</p>
浏览器会从左到右依次尝试使用字体,如果第一个字体不存在,则尝试下一个,以此类推。
(4) font-size(字体大小)
▶ 示例
HTML
<style>
h1 {
font-size: 32px;
}
p {
font-size: 16px;
}
.small {
font-size: 0.875em; /* 相对于父元素字体的0.875倍 */
}
</style>
<h1>一级标题</h1>
<p>这是一个段落示例。</p>
<div class="small">小号字体文本</div>
常用单位:px(像素)、em(相对自身字体)、rem(相对根元素字体)、%(百分比)
(5) font-weight(字体粗细)
▶ 示例
HTML
<style>
.bold {
font-weight: bold; /* 粗体,等同于700 */
}
.normal {
font-weight: normal; /* 正常,等同于400 */
}
.light {
font-weight: 300; /* 细体 */
}
.heavy {
font-weight: 900; /* 更粗 */
}
</style>
<div class="bold">加粗字体文本</div>
<div class="normal">正常字重文本</div>
<div class="light">细体字重文本</div>
<div class="heavy">特粗字重文本</div>
(6) font-style(字体样式)
▶ 示例
HTML
<style>
.italic {
font-style: italic; /* 斜体 */
}
.normal {
font-style: normal; /* 正常 */
}
</style>
<div class="italic">斜体文字样式</div>
<div class="normal">正常字重文本</div>
(7) line-height(行高)
控制行与行之间的间距,对阅读体验影响很大:
▶ 示例
HTML
<style>
p {
line-height: 1.8; /* 数字,相对于字体大小 */
}
.article {
line-height: 1.6; /* 正文推荐行高 */
}
.tight {
line-height: 1.2; /* 紧凑 */
}
</style>
<p>这是一个段落示例。</p>
<div class="article">这是一段文章内容,展示了文本排列效果</div>
<div class="tight">字间距紧凑的文本</div>
一般正文的 line-height 建议在 1.5 到 1.8 之间,阅读最舒适。
(8) font 简写属性
font 可以同时设置多个字体属性:
▶ 示例
HTML
<style>
p {
font: italic bold 16px/1.8 "Microsoft YaHei", sans-serif;
}
</style>
<p>这是一个段落示例。</p>
<span class="demo-italic">斜体文字</span>
<span class="demo-bold">粗体文字</span>
顺序:font-style font-weight font-size/line-height font-family
注意:font-size 和 font-family 是必需的,缺少它们整个声明会无效。
(9) @font-face 自定义字体
可以使用 @font-face 加载网页中的自定义字体(非系统自带):
▶ 示例
HTML
<style>
@font-face {
font-family: "myfont";
src: url("/assets/fonts/myfont.woff2") format("woff2"),
url("/assets/fonts/myfont.woff") format("woff");
font-weight: normal;
font-style: normal;
}
h1 {
font-family: "myfont", sans-serif;
}
</style>
<p>@font-face 用于加载自定义字体,需要配合实际字体文件才能看到效果。</p>
字体文件路径说明:
- 推荐使用 WebP 格式的字体文件(
.woff2),体积更小 - 路径使用绝对路径
/assets/fonts/,确保多语言版本都能正确引用 - 旧版字体格式(
.ttf、.eot)仅用于兼容旧浏览器
注意字体版权:使用自定义字体时请确保拥有合法授权,优先选择开源字体。
2. 文本外观属性
(1) 文本属性速查表
| 属性 | 常用值 | 作用 |
|---|---|---|
color |
#333, red, rgb(255,0,0), rgba(0,0,0,0.5) |
文本颜色 |
text-align |
left, center, right, justify |
文本水平对齐方式 |
text-decoration |
none, underline, overline, line-through |
文本装饰线 |
text-indent |
2em, 32px |
首行缩进 |
text-transform |
none, uppercase, lowercase, capitalize |
文本大小写转换 |
text-shadow |
2px 2px 4px rgba(0,0,0,0.5) |
文本阴影(偏移+模糊+颜色) |
letter-spacing |
2px, -1px, 0.1em |
字符间距 |
word-spacing |
4px, 0.5em |
单词间距 |
white-space |
normal, nowrap, pre, pre-wrap |
空白字符和换行处理 |
text-overflow |
clip, ellipsis |
文本溢出显示方式(需配合 overflow: hidden) |
(2) color(文本颜色)
设置文本的颜色:
▶ 示例
HTML
<style>
p {
color: #333; /* 深灰色,正文常用 */
}
h1 {
color: #e74c3c; /* 红色标题 */
}
</style>
<p>这是一个段落示例。</p>
<h1>一级标题</h1>
(3) text-align(文本对齐)
▶ 示例
HTML
<style>
.left {
text-align: left; /* 左对齐(默认) */
}
.center {
text-align: center; /* 居中对齐 */
}
.right {
text-align: right; /* 右对齐 */
}
.justify {
text-align: justify; /* 两端对齐 */
}
</style>
<div class="left">左对齐文本内容</div>
<div class="center">水平居中的内容</div>
<div class="right">右对齐文本内容</div>
<div class="justify">两端对齐文本内容,自动调整词间距</div>
(4) text-decoration(文本装饰)
▶ 示例
HTML
<style>
.underline {
text-decoration: underline; /* 下划线 */
}
.overline {
text-decoration: overline; /* 上划线 */
}
.line-through {
text-decoration: line-through; /* 删除线 */
}
.none {
text-decoration: none; /* 无装饰,常用于去掉链接下划线 */
}
/* 也可以组合更多样式 */
.fancy {
text-decoration: underline wavy red 2px; /* 红色波浪下划线 */
}
</style>
<div class="underline">带有下划线的文字</div>
<div class="overline">带有上划线的文字</div>
<div class="line-through">带有删除线的文字</div>
<div class="none">无</div>
<div class="fancy">艺术装饰文字</div>
<span class="demo-underline">下划线文字</span>
<span class="demo-wavy">波浪线装饰</span>
<span class="demo-red">红色文本</span>
(5) text-indent(文本缩进)
段落首行缩进常用:
▶ 示例
HTML
<style>
p {
text-indent: 2em; /* 首行缩进2个字符 */
}
</style>
<p>这是一个段落示例。</p>
(6) letter-spacing(字符间距)
▶ 示例
HTML
<style>
.spread {
letter-spacing: 2px; /* 加大间距 */
}
.tight {
letter-spacing: -1px; /* 缩小间距 */
}
</style>
<div class="spread">字间距较大的文本</div>
<div class="tight">字间距紧凑的文本</div>
(7) text-shadow(文本阴影)
⚠️ 可读性提醒: 文字阴影(text-shadow)虽然好看,但过度使用会降低可读性。深色背景配深色阴影完全看不清——确保文字和背景有足够对比度才是首要任务。
▶ 示例
HTML
<style>
h1 {
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
/* 文字阴影 */
/* 水平偏移 垂直偏移 模糊半径 颜色 */
}
/* 多层阴影 */
h1 {
text-shadow: 1px 1px 2px red, 0 0 5px blue;
}
</style>
<h1>一级标题</h1>
<span class="demo-red">红色文本</span>
(8) white-space(空白处理)
▶ 示例
HTML
<style>
.nowrap {
white-space: nowrap; /* 不换行 */
}
.pre {
white-space: pre; /* 保留空白和换行(类似<pre>标签) */
}
</style>
<div class="nowrap">不换行的长文本内容</div>
<div class="pre">保留格式
的文本</div>
(9) text-overflow(文本溢出)
配合 overflow 和 white-space 使用,处理文本溢出容器的场景:
▶ 示例
HTML
<style>
.ellipsis {
white-space: nowrap; /* 不换行 */
overflow: hidden; /* 超出隐藏 */
text-overflow: ellipsis; /* 用省略号表示被截断的文本 */
}
</style>
<div class="ellipsis">这是一段超长文本,超出部分将被省略号截断</div>
3. 综合示例
▶ 示例
HTML
<style>
.article-card {
font-family: "宋体", "Times New Roman", serif;
font-size: 16px;
line-height: 1.8;
color: #333;
text-indent: 2em;
}
.article-card h2 {
font: bold 24px/1.4 "Microsoft YaHei", sans-serif;
color: #2c3e50;
text-align: center;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
}
.article-card .read-more {
color: #3498db;
text-decoration: none;
}
.article-card .read-more:hover {
text-decoration: underline;
}
</style>
<div class="article-card">Article card</div>
<span class="demo-New">字体名称</span>
<div class="article-card">Article card</div>
<h2>二级标题</h2>
<span class="demo-bold">粗体文字</span>
<div class="article-card">Article card</div>
<div class="read-more">点击此处展开阅读完整内容</div>
<div class="article-card">Article card</div>
<div class="read-more">点击此处展开阅读完整内容</div>
❓ 常见问题
Q 中文字体怎么设置字体栈?
A 推荐顺序:
font-family: "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;。Mac 用苹方(PingFang SC),Windows 用微软雅黑,然后回退到 Noto Sans 或系统无衬线字体。Q 加载 Google Fonts 会影响速度吗?
A 会。Google Fonts 需要额外发起网络请求。建议只加载需要的字重(不要一次性加载 300/400/500/700 全部),并且加上
display=swap 参数让浏览器先用后备字体渲染,等自定义字体加载完成后再替换。Q text-overflow: ellipsis 为什么有时候不生效?
A ellipsis 需要三个条件同时满足:
white-space: nowrap(禁止换行)、overflow: hidden(溢出隐藏)、width 或 max-width(有限宽)。三个缺一个都不行。📖 小节
- 文本是网页内容的主体,CSS 的字体和文本属性可以让你精确控制每一个字符的外观
- 从字体选择、大小粗细,到行高、对齐、缩进和阴影,合理搭配这些属性能让文章的阅读体验大大提升
- 记住正文行高推荐 1.5-1.8,首行缩进用
text-indent: 2em,文本溢出用text-overflow: ellipsis
📝 作业
- 创建一个文章阅读页面,包含标题、副标题、正文段落。使用不同的字体、字号和颜色区分层级。
- 在页面中演示
text-decoration的至少 4 种效果(下划线、上划线、删除线、波浪线)。 - 实现"单行文本溢出显示省略号"的效果——在固定宽度的容器中显示一段长文本,超出部分用
...表示。 - 使用
text-shadow给标题添加一个发光效果。