CSS 教程

纯干货教学,从零开始学习 CSS

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 变量和遵循排版最佳实践,可以提高代码的可维护性和一致性。