CSS 排版
学习 CSS 排版的基本概念、CSS 排版属性以及实际应用示例,掌握如何在 CSS 中设置和控制文本样式。
CSS 排版概述
CSS 排版是指通过 CSS 控制文本的字体、大小、粗细、行高、对齐方式等属性,以创建美观、易读的文本布局。良好的排版可以提高用户体验和内容的可读性。
CSS 字体属性
1. font-family
设置元素的字体系列。
/* 设置字体系列 */
.element {
font-family: Arial, sans-serif; /* 设置字体系列为Arial,如果不可用则使用默认无衬线字体 */
}
/* 设置多个字体备选 */
.text {
font-family: "Microsoft YaHei", "PingFang SC", "Helvetica Neue", Arial, sans-serif; /* 设置中文字体系列,包含多个备选字体 */
}
/* 设置 serif 字体 */
.serif-text {
font-family: "Times New Roman", Times, serif; /* 设置字体系列为Times New Roman,如果不可用则使用默认衬线字体 */
}
/* 设置 monospace 字体 */
.code {
font-family: "Courier New", Courier, monospace; /* 设置字体系列为Courier New,如果不可用则使用等宽字体 */
}
2. font-size
设置元素的字体大小。
| 单位 | 描述 | 示例 |
|---|---|---|
| px | 像素,固定大小 | font-size: 16px; |
| em | 相对于父元素的字体大小 | font-size: 1.2em; |
| rem | 相对于根元素的字体大小 | font-size: 1.1rem; |
| % | 相对于父元素的字体大小的百分比 | font-size: 120%; |
| vw | 相对于视口宽度的百分比 | font-size: 5vw; |
| vh | 相对于视口高度的百分比 | font-size: 3vh; |
/* 设置字体大小 */
.element {
font-size: 16px; /* 设置字体大小为16像素 */
}
/* 使用相对单位 */
.relative-size {
font-size: 1.2em; /* 设置字体大小为父元素的1.2倍 */
}
/* 使用 rem 单位 */
.rem-size {
font-size: 1.1rem; /* 设置字体大小为根元素的1.1倍 */
}
/* 使用视口单位 */
.viewport-size {
font-size: 5vw; /* 设置字体大小为视口宽度的5% */
}
3. font-weight
设置元素的字体粗细。
| 值 | 描述 |
|---|---|
| normal | 默认值,正常粗细,等同于 400 |
| bold | 粗体,等同于 700 |
| bolder | 比父元素更粗 |
| lighter | 比父元素更细 |
| 100-900 | 数值表示的粗细,400 是 normal,700 是 bold |
/* 设置字体粗细 */
.element {
font-weight: normal; /* 设置字体粗细为正常,等同于400 */
}
.bold-text {
font-weight: bold; /* 设置字体粗细为粗体,等同于700 */
}
.light-text {
font-weight: 300; /* 设置字体粗细为300,较轻 */
}
.extra-bold {
font-weight: 800; /* 设置字体粗细为800,特粗 */
}
4. font-style
设置元素的字体样式。
| 值 | 描述 |
|---|---|
| normal | 默认值,正常样式 |
| italic | 斜体 |
| oblique | 倾斜体,与 italic 类似但不是真正的斜体 |
/* 设置字体样式 */
.element {
font-style: normal; /* 设置字体样式为正常 */
}
.italic-text {
font-style: italic; /* 设置字体样式为斜体 */
}
.oblique-text {
font-style: oblique; /* 设置字体样式为倾斜体,与italic类似但不是真正的斜体 */
}
5. font-variant
设置元素的字体变体。
| 值 | 描述 |
|---|---|
| normal | 默认值,正常变体 |
| small-caps | 小型大写字母 |
/* 设置字体变体 */
.element {
font-variant: normal; /* 设置字体变体为正常 */
}
.small-caps {
font-variant: small-caps; /* 设置字体变体为小型大写字母 */
}
6. font
字体属性的简写,按顺序设置 font-style、font-variant、font-weight、font-size/line-height、font-family。
/* 使用 font 简写属性 */
.element {
font: italic small-caps bold 16px/1.5 Arial, sans-serif; /* 简写设置字体样式为斜体,变体为小型大写字母,粗细为粗体,大小为16像素,行高为1.5,字体系列为Arial */
}
/* 最少需要设置 font-size 和 font-family */
.minimal {
font: 14px Arial, sans-serif; /* 最少需要设置字体大小和字体系列,这里设置为14像素和Arial */
}
CSS 文本属性
1. line-height
设置元素的行高。
| 值 | 描述 |
|---|---|
| normal | 默认值,正常行高 |
| number | 数字,乘以字体大小得到行高 |
| length | 具体的长度值,如 px、em 等 |
| % | 相对于字体大小的百分比 |
/* 设置行高 */
.element {
line-height: normal; /* 设置行高为正常 */
}
.number-line-height {
line-height: 1.5; /* 设置行高为字体大小的1.5倍 */
}
.length-line-height {
line-height: 24px; /* 设置行高为24像素 */
}
.percent-line-height {
line-height: 120%; /* 设置行高为字体大小的120% */
}
2. text-align
设置元素的文本对齐方式。
| 值 | 描述 |
|---|---|
| left | 左对齐 |
| right | 右对齐 |
| center | 居中对齐 |
| justify | 两端对齐 |
| justify-all | 两端对齐,包括最后一行 |
| start | 根据文本方向对齐到起始位置 |
| end | 根据文本方向对齐到结束位置 |
/* 设置文本对齐方式 */
.element {
text-align: left; /* 设置文本对齐方式为左对齐 */
}
.center-text {
text-align: center; /* 设置文本对齐方式为居中对齐 */
}
.right-text {
text-align: right; /* 设置文本对齐方式为右对齐 */
}
.justify-text {
text-align: justify; /* 设置文本对齐方式为两端对齐 */
}
3. text-decoration
设置元素的文本装饰。
| 值 | 描述 |
|---|---|
| none | 默认值,无装饰 |
| underline | 下划线 |
| overline | 上划线 |
| line-through | 删除线 |
| blink | 闪烁文本(已废弃) |
/* 设置文本装饰 */
.element {
text-decoration: none; /* 设置文本装饰为无 */
}
.underline {
text-decoration: underline; /* 设置文本装饰为下划线 */
}
.overline {
text-decoration: overline; /* 设置文本装饰为上划线 */
}
.line-through {
text-decoration: line-through; /* 设置文本装饰为删除线 */
}
/* 组合使用 */
.combined {
text-decoration: underline overline; /* 组合使用下划线和上划线 */
}
/* 设置装饰的颜色、样式和厚度 */
.decorated {
text-decoration: underline red wavy 2px; /* 设置文本装饰为红色波浪形下划线,厚度为2像素 */
}
4. text-transform
设置元素的文本转换。
| 值 | 描述 |
|---|---|
| none | 默认值,无转换 |
| capitalize | 首字母大写 |
| uppercase | 全部大写 |
| lowercase | 全部小写 |
| full-width | 全角显示 |
| full-size-kana | 全角假名 |
/* 设置文本转换 */
.element {
text-transform: none; /* 设置文本转换为无 */
}
.capitalize {
text-transform: capitalize; /* 设置文本转换为首字母大写 */
}
.uppercase {
text-transform: uppercase; /* 设置文本转换为全部大写 */
}
.lowercase {
text-transform: lowercase; /* 设置文本转换为全部小写 */
}
5. text-indent
设置元素的文本缩进。
/* 设置文本缩进 */
.element {
text-indent: 2em; /* 设置文本缩进为2em */
}
.negative-indent {
text-indent: -2em; /* 设置文本缩进为-2em,实现悬挂缩进效果 */
padding-left: 2em; /* 设置左侧内边距为2em,配合负缩进使用 */
}
.percent-indent {
text-indent: 10%; /* 设置文本缩进为10% */
}
6. letter-spacing
设置元素的字母间距。
/* 设置字母间距 */
.element {
letter-spacing: normal; /* 设置字母间距为正常 */
}
.wide-spacing {
letter-spacing: 2px; /* 设置字母间距为加宽2像素 */
}
.tight-spacing {
letter-spacing: -1px; /* 设置字母间距为收紧1像素 */
}
7. word-spacing
设置元素的单词间距。
/* 设置单词间距 */
.element {
word-spacing: normal; /* 设置单词间距为正常 */
}
.wide-word-spacing {
word-spacing: 10px; /* 设置单词间距为加宽10像素 */
}
.tight-word-spacing {
word-spacing: -2px; /* 设置单词间距为收紧2像素 */
}
8. text-shadow
设置元素的文本阴影。
/* 设置文本阴影 */
.element {
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); /* 设置文本阴影:水平偏移2px,垂直偏移2px,模糊半径4px,颜色为半透明黑色 */
}
/* 多重阴影 */
.multi-shadow {
text-shadow: 2px 2px 4px red, -2px -2px 4px blue; /* 设置多重文本阴影:红色阴影和蓝色阴影 */
}
/* 模糊效果 */
.blur-shadow {
text-shadow: 0 0 10px rgba(0, 0, 0, 0.5); /* 设置文本阴影:无偏移,模糊半径10px,颜色为半透明黑色,产生模糊效果 */
}
9. text-align-last
设置元素最后一行的对齐方式。
/* 设置最后一行对齐方式 */
.element {
text-align: justify; /* 设置文本对齐方式为两端对齐 */
text-align-last: center; /* 设置最后一行对齐方式为居中对齐 */
}
.right-last {
text-align: justify; /* 设置文本对齐方式为两端对齐 */
text-align-last: right; /* 设置最后一行对齐方式为右对齐 */
}
10. text-wrap
设置元素的文本换行方式。
/* 设置文本换行方式 */
.element {
text-wrap: normal; /* 设置文本换行方式为正常 */
}
.balance {
text-wrap: balance; /* 设置文本换行方式为平衡,优化换行位置 */
}
.stable {
text-wrap: stable; /* 设置文本换行方式为稳定,保持换行位置稳定 */
}
11. white-space
设置元素的空白处理方式。
/* 设置空白处理方式 */
.element {
white-space: normal; /* 设置空白处理方式为正常,合并连续空白,允许换行 */
}
.pre {
white-space: pre; /* 设置空白处理方式为保留,保留连续空白,不允许自动换行 */
}
.nowrap {
white-space: nowrap; /* 设置空白处理方式为不换行,合并连续空白,不允许换行 */
}
.pre-wrap {
white-space: pre-wrap; /* 设置空白处理方式为保留并换行,保留连续空白,允许自动换行 */
}
.pre-line {
white-space: pre-line; /* 设置空白处理方式为合并并换行,合并连续空白,允许自动换行 */
}
12. word-break
设置元素的单词换行方式。
/* 设置单词换行方式 */
.element {
word-break: normal; /* 设置单词换行方式为正常,只在单词边界处换行 */
}
.break-all {
word-break: break-all; /* 设置单词换行方式为强制换行,允许在单词中间换行 */
}
.keep-all {
word-break: keep-all; /* 设置单词换行方式为保持全部,不允许在单词中间换行 */
}
.break-word {
word-break: break-word; /* 设置单词换行方式为单词换行,在必要时在单词中间换行 */
}
13. overflow-wrap
设置元素的长单词或 URL 的换行方式。
/* 设置长单词换行方式 */
.element {
overflow-wrap: normal; /* 设置长单词换行方式为正常,只在单词边界处换行 */
}
.break-word {
overflow-wrap: break-word; /* 设置长单词换行方式为单词换行,在必要时在单词中间换行 */
}
.anywhere {
overflow-wrap: anywhere; /* 设置长单词换行方式为任意位置,允许在任意位置换行 */
}
CSS 网页字体
1. @font-face 规则
使用 @font-face 规则可以加载自定义字体。
/* 加载自定义字体 */
@font-face {
font-family: 'MyFont'; /* 定义字体名称为MyFont */
src: url('myfont.woff2') format('woff2'), /* 指定字体文件路径,优先使用woff2格式 */
url('myfont.woff') format('woff'); /* 备选字体文件路径,使用woff格式 */
font-weight: normal; /* 定义字体粗细为正常 */
font-style: normal; /* 定义字体样式为正常 */
font-display: swap; /* 定义字体显示方式为交换,先显示系统字体,待自定义字体加载完成后再替换 */
}
/* 使用自定义字体 */
.element {
font-family: 'MyFont', sans-serif; /* 使用自定义字体MyFont,如果不可用则使用默认无衬线字体 */
}
2. 字体格式
| 格式 | 描述 | 浏览器支持 |
|---|---|---|
| WOFF2 | Web Open Font Format 2.0,压缩率最高 | 现代浏览器 |
| WOFF | Web Open Font Format 1.0 | 所有现代浏览器 |
| TTF/OTF | TrueType/OpenType 字体 | 大多数浏览器 |
| SVG | SVG 字体 | 旧版 iOS Safari |
| EOT | Embedded OpenType 字体 | 旧版 IE |
3. 字体服务
使用第三方字体服务可以方便地加载和使用网页字体。
/* 使用 Google Fonts */
/* 在 HTML 头部添加 */
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet"> /* 引入Google Fonts的Roboto字体,包含400和700粗细 */
/* 在 CSS 中使用 */
.element {
font-family: 'Roboto', sans-serif; /* 使用Roboto字体,如果不可用则使用默认无衬线字体 */
}
/* 使用 Adobe Fonts */
/* 在 HTML 头部添加 */
<link rel="stylesheet" href="https://use.typekit.net/xxxxxx.css"> /* 引入Adobe Fonts的字体,需要替换为实际的项目ID */
/* 在 CSS 中使用 */
.element {
font-family: 'adobe-font', sans-serif; /* 使用Adobe Fonts的字体,如果不可用则使用默认无衬线字体 */
}
CSS 排版实际应用示例
示例 1:基本排版设置
<div class="typography-basic">
<h1>标题 1</h1>
<h2>标题 2</h2>
<p>这是一段普通文本,用于展示基本的排版设置。这段文本应该有适当的行高,使阅读更加舒适。</p>
<p>这是另一段文本,包含 <strong>粗体</strong>、<em>斜体</em> 和 <u>下划线</u> 等格式。</p>
</div>
<style>
.typography-basic {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; /* 设置字体系列为Segoe UI及备选字体 */
line-height: 1.6; /* 设置行高为1.6,提高可读性 */
color: #333; /* 设置文本颜色为深灰色 */
}
.typography-basic h1 {
font-size: 2rem; /* 设置h1标题字体大小为2rem */
font-weight: 700; /* 设置h1标题字体粗细为700 */
line-height: 1.2; /* 设置h1标题行高为1.2 */
margin-bottom: 1rem; /* 设置h1标题下方外边距为1rem */
}
.typography-basic h2 {
font-size: 1.5rem; /* 设置h2标题字体大小为1.5rem */
font-weight: 600; /* 设置h2标题字体粗细为600 */
line-height: 1.3; /* 设置h2标题行高为1.3 */
margin-bottom: 0.8rem; /* 设置h2标题下方外边距为0.8rem */
}
.typography-basic p {
margin-bottom: 1rem; /* 设置段落下方外边距为1rem */
}
.typography-basic strong {
font-weight: 600; /* 设置粗体文本的字体粗细为600 */
}
.typography-basic em {
font-style: italic; /* 设置斜体文本的字体样式为italic */
}
.typography-basic u {
text-decoration: underline; /* 设置下划线文本的装饰为underline */
}
</style>
示例 2:响应式排版
<div class="responsive-typography">
<h1>响应式标题</h1>
<p>这段文本的大小会根据屏幕尺寸自动调整,确保在不同设备上都有良好的可读性。</p>
</div>
<style>
.responsive-typography {
font-family: Arial, sans-serif; /* 设置字体系列为Arial及备选字体 */
line-height: 1.6; /* 设置行高为1.6,提高可读性 */
}
.responsive-typography h1 {
font-size: clamp(1.5rem, 3vw, 2.5rem); /* 使用clamp()函数设置响应式字体大小,最小值1.5rem,首选值3vw,最大值2.5rem */
line-height: 1.2; /* 设置行高为1.2 */
}
.responsive-typography p {
font-size: clamp(1rem, 2vw, 1.2rem); /* 使用clamp()函数设置响应式字体大小,最小值1rem,首选值2vw,最大值1.2rem */
}
</style>
示例 3:特殊排版效果
<div class="special-typography">
<h2 class="shadow-text">阴影文本</h2>
<h2 class="gradient-text">渐变文本</h2>
<p class="letter-spacing">加宽字母间距的文本</p>
<p class="word-spacing">加宽单词间距的文本</p>
</div>
<style>
.special-typography {
font-family: Arial, sans-serif; /* 设置字体系列为Arial及备选字体 */
}
.shadow-text {
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); /* 设置文本阴影:水平偏移2px,垂直偏移2px,模糊半径4px,颜色为半透明黑色 */
}
.gradient-text {
background: linear-gradient(90deg, red, blue); /* 设置背景为从红色到蓝色的线性渐变 */
-webkit-background-clip: text; /* 设置背景裁剪为文本,仅在文本区域显示背景 */
-webkit-text-fill-color: transparent; /* 设置文本填充颜色为透明,使背景渐变可见 */
background-clip: text; /* 标准语法,设置背景裁剪为文本 */
}
.letter-spacing {
letter-spacing: 3px; /* 设置字母间距为3像素 */
}
.word-spacing {
word-spacing: 10px; /* 设置单词间距为10像素 */
}
</style>
示例 4:多列文本
<div class="multi-column">
<p>这是一段多列文本,用于展示如何在 CSS 中创建报纸式的多列布局。这种布局可以在有限的空间内显示更多的内容,提高页面的信息密度。</p>
<p>多列布局在展示长文本时非常有用,如文章、新闻等。通过调整列数和列间距,可以创建不同的视觉效果。</p>
<p>CSS 的 column 属性提供了一种简单的方式来创建多列布局,而不需要使用浮动或其他复杂的布局技术。</p>
</div>
<style>
.multi-column {
column-count: 3; /* 设置列数为3 */
column-gap: 20px; /* 设置列间距为20像素 */
column-rule: 1px solid #ddd; /* 设置列分隔线为1像素实线,颜色为#ddd */
font-family: Arial, sans-serif; /* 设置字体系列为Arial及备选字体 */
line-height: 1.6; /* 设置行高为1.6,提高可读性 */
}
/* 响应式调整列数 */
@media (max-width: 768px) {
.multi-column {
column-count: 2; /* 当屏幕宽度小于等于768px时,设置列数为2 */
}
}
@media (max-width: 480px) {
.multi-column {
column-count: 1; /* 当屏幕宽度小于等于480px时,设置列数为1 */
}
}
</style>
CSS 排版使用技巧
- 选择合适的字体:根据内容和设计风格选择合适的字体,确保可读性和美观性。
- 建立字体层次结构:为不同级别的标题和正文建立清晰的字体层次结构,使用不同的字体大小、粗细和颜色。
- 使用合适的行高:行高通常设置为字体大小的 1.4-1.6 倍,以确保良好的可读性。
- 注意字间距和词间距:适当的字间距和词间距可以提高文本的可读性。
- 使用相对单位:使用 rem、em 等相对单位设置字体大小,可以提高响应式设计的灵活性。
- 考虑响应式排版:使用媒体查询或 clamp() 函数等技术,确保在不同屏幕尺寸下的良好排版效果。
- 使用网页字体时注意性能:加载自定义字体时要注意字体文件的大小和加载方式,避免影响页面加载速度。
- 测试不同设备和浏览器:确保排版在不同设备和浏览器上都能正常显示。
- 遵循排版最佳实践:如使用合适的对齐方式、避免过多的文本装饰、保持一致的风格等。
- 使用 CSS 变量管理排版:使用 CSS 变量定义字体、大小、行高等排版相关的值,可以提高代码的可维护性和一致性。
CSS 排版总结
- CSS 排版包括字体属性和文本属性两大部分。
- 字体属性包括 font-family、font-size、font-weight、font-style 等。
- 文本属性包括 line-height、text-align、text-decoration、text-transform 等。
- 使用 @font-face 规则可以加载自定义字体。
- 良好的排版可以提高内容的可读性和用户体验。
- 考虑字体选择、层次结构、行高、间距、响应式设计等因素,可以创建专业、美观的排版效果。
- 使用 CSS 变量和遵循排版最佳实践,可以提高代码的可维护性和一致性。