CSS 课堂笔记:布局原则与常见问题解决方案
CSS 课堂笔记:布局原则与常见问题解决方案
一、布局的核心原则
基本原则:先分大块,再分小块;先横后竖
| 原则 | 说明 | 示例 |
|---|---|---|
| 先分大块 | 先把页面划分为几个大的区域(顶部、中间、底部) | 先画 .header、.main、.footer |
| 再分小块 | 在大块内部继续细分出小的功能模块 | 顶部再分 Logo、导航、搜索框 |
| 先横后竖 | 先处理水平方向的列布局,再处理垂直方向的内部元素 | 三栏布局先左右排好,再处理每栏内部的标题、内容 |
实战思路
- 第一步:从上到下划分行(横)
- 顶部区域(header)→ 中间区域(main)→ 底部区域(footer)
- 第二步:在每一行中划分列(竖)
- 顶部:左(Logo)+ 右(导航)
- 中间:左(侧边栏)+ 中(主内容)+ 右(广告栏)
- 第三步:在每一列中填充具体内容
- 标题、图片、文字、按钮等
二、文本折叠(省略号)
1. 单行文本折叠(一行显示,超出变省略号)
| 属性 | 值 | 作用 |
|---|---|---|
white-space |
nowrap |
强制不换行,所有文字挤在同一行 |
overflow |
hidden |
超出容器宽度的部分隐藏 |
text-overflow |
ellipsis |
被隐藏的部分用 … 代替 |
适用场景:新闻标题、商品名称、导航文字、卡片标题等一行显示的场景。
2. 多行文本折叠(显示指定行数,超出变省略号)
| 属性 | 值 | 作用 |
|---|---|---|
display |
-webkit-box |
启用旧版弹性盒模型,为多行截断提供基础 |
-webkit-box-orient |
vertical |
设置内部子元素沿垂直方向排列 |
-webkit-line-clamp |
2(可改) |
限制显示的行数(2 行、3 行等) |
overflow |
hidden |
超出行数部分隐藏 |
text-overflow |
ellipsis |
在最后一行末尾显示 … |
适用场景:文章摘要、商品描述、新闻简介、评论预览等需要控制行数的场景。
多行折叠的关键注意点
-webkit-line-clamp是非标准属性,但 Chrome、Safari、Edge 等主流浏览器都已广泛支持。- 必须同时设置
display: -webkit-box和-webkit-box-orient: vertical,否则无效。 - 省略号只出现在最后一行末尾,不会每行都加。
三、垂直居中
方法一:行高法(适用于单行文本)
| 属性 | 设置方式 | 原理 |
|---|---|---|
height |
300px |
容器固定高度 |
line-height |
300px |
行高等于容器高度,文字在垂直方向居中 |
适用场景:标题、按钮、导航菜单中的单行文字。
局限性:如果文字换行(多行),会溢出或错位,不适用于多行文本。
方法二:弹性盒法(适用于单行/多行,固定高度容器)
| 属性 | 值 | 作用 |
|---|---|---|
display |
flex |
启用弹性盒布局 |
align-items |
center |
子元素在交叉轴(垂直方向)居中对齐 |
适用场景:固定高度的卡片、列表项、导航栏等,内容可能是单行或多行。
优点:兼容性好,自动适应内容高度,单行多行都适用。
方法三:内边距法(适用于不固定高度,或内容较少)
| 属性 | 设置方式 | 原理 |
|---|---|---|
padding-top |
150px |
上方留白 150px |
padding-bottom |
150px |
下方留白 150px |
适用场景:广告横幅、欢迎页、提示框等内容较少且不需要精确控制高度的场景。
注意事项:
- 如果容器没有固定高度,上下内边距会把内容"挤"到中间。
- 如果内容增多,容器会被撑大,但上下内边距保持不变,内容区域会变大。
四、三种垂直居中方法对比
| 对比维度 | 行高法 | 弹性盒法 | 内边距法 |
|---|---|---|---|
| 适用内容 | 仅单行文本 | 单行/多行均可 | 单行/多行均可 |
| 代码复杂度 | 最简单(2 行) | 中等(2 行) | 简单(2 行) |
| 是否脱离文档流 | 否 | 否 | 否 |
| 优点 | 简洁高效 | 适用范围广,最推荐 | 无需额外布局属性 |
| 缺点 | 多行失效 | 需注意 flex 兼容性 | padding 值需要手动计算 |
| 推荐指数 | ⭐⭐⭐(仅限单行) | ⭐⭐⭐⭐⭐(通用) | ⭐⭐⭐(特定场景) |
五、知识点速记表
| 问题类型 | 场景 | 核心方案 | 关键属性 |
|---|---|---|---|
| 单行文本折叠 | 标题、导航 | 单行省略号 | white-space: nowrap + overflow: hidden + text-overflow: ellipsis |
| 多行文本折叠 | 摘要、简介 | 多行省略号 | display: -webkit-box + -webkit-line-clamp: N + overflow: hidden |
| 单行垂直居中 | 按钮、标题 | 行高法 | height = line-height |
| 多行垂直居中(固定高) | 卡片、列表项 | 弹性盒法 | display: flex + align-items: center |
| 多行垂直居中(不固定高) | 横幅、提示框 | 内边距法 | padding-top + padding-bottom |
六、布局流程图示
text
┌─────────────────────────────────────────────────┐
│ 页面整体布局 │
│ ① 先分大块(横 → 行) │
│ ┌─────────────────────────────────────────┐ │
│ │ .header(顶部) │ │
│ │ ② 再分小块(竖 → 列) │ │
│ │ ┌───────┐ ┌──────────────────┐ │ │
│ │ │ Logo │ │ 导航菜单 │ │ │
│ │ └───────┘ └──────────────────┘ │ │
│ ├─────────────────────────────────────────┤ │
│ │ .main(中间) │ │
│ │ ┌─────┐ ┌─────────┐ ┌─────┐ │ │
│ │ │侧边栏│ │ 主内容 │ │广告栏│ │ │
│ │ └─────┘ └─────────┘ └─────┘ │ │
│ ├─────────────────────────────────────────┤ │
│ │ .footer(底部) │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
七、常见错误与避坑指南
1. 单行折叠忘记设置宽度
- 单行省略号需要容器有固定宽度或
max-width,否则文字会一直延伸,不会触发省略。 - 解决:给容器设置
width或max-width。
2. 多行折叠缺少必要属性
- 只写
-webkit-line-clamp不生效,必须配合display: -webkit-box和-webkit-box-orient: vertical。 - 解决:三个属性缺一不可。
3. 垂直居中混用导致冲突
line-height和padding同时使用可能产生意想不到的效果。- 解决:只选择一种方法,不要混用。
4. 弹性盒法忘记给父容器设置高度
align-items: center需要父容器有确定的高度(height)才能垂直居中。- 解决:确保父容器有
height或由其他方式撑开。
浙公网安备 33010602011771号