CSS3 表单与表格 - 表格样式 - table
核心知识点讲解
表格的基本结构
表格由以下基本元素组成:
<table>:表格容器<thead>:表头部分<tbody>:表格主体<tfoot>:表尾部分<tr>:表格行<th>:表头单元格<td>:数据单元格
基本表格样式
- 边框样式:使用
border属性设置表格边框 - 边框合并:使用
border-collapse属性控制边框合并方式 - 单元格间距:使用
border-spacing属性设置单元格间距 - 表格宽度:使用
width属性设置表格宽度 - 文本对齐:使用
text-align和vertical-align属性设置文本对齐方式
高级表格样式
- 表格布局算法:使用
table-layout属性控制表格布局算法 - 空单元格处理:使用
empty-cells属性控制空单元格的显示方式 - 标题位置:使用
caption-side属性控制表格标题位置 - 条纹行:使用
:nth-child()伪类创建条纹行效果 - 悬停效果:使用
:hover伪类创建行悬停效果
实用案例分析
案例1:基本表格样式
HTML结构:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>基本表格样式</title>
<style>
/* 基本表格样式 */
.basic-table {
width: 100%;
border-collapse: collapse;
font-family: Arial, sans-serif;
font-size: 14px;
color: #333;
}
.basic-table th,
.basic-table td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #ddd;
}
.basic-table th {
background-color: #f2f2f2;
font-weight: 600;
}
.basic-table tr:hover {
background-color: #f5f5f5;
}
</style>
</head>
<body>
<h1>基本表格样式</h1>
<table class="basic-table">
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>职业</th>
</tr>
</thead>
<tbody>
<tr>
<td>张三</td>
<td>25</td>
<td>男</td>
<td>工程师</td>
</tr>
<tr>
<td>李四</td>
<td>30</td>
<td>女</td>
<td>设计师</td>
</tr>
<tr>
<td>王五</td>
<td>28</td>
<td>男</td>
<td>产品经理</td>
</tr>
<tr>
<td>赵六</td>
<td>35</td>
<td>女</td>
<td>销售</td>
</tr>
</tbody>
</table>
</body>
</html>效果说明:
- 实现了基本的表格样式
- 添加了边框、内边距和文本对齐
- 实现了表头背景色和行悬停效果
- 保持了表格的基本结构
案例2:条纹表格样式
HTML结构:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>条纹表格样式</title>
<style>
/* 条纹表格样式 */
.striped-table {
width: 100%;
border-collapse: collapse;
font-family: Arial, sans-serif;
font-size: 14px;
color: #333;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
border-radius: 4px;
overflow: hidden;
}
.striped-table th,
.striped-table td {
padding: 12px 15px;
text-align: left;
}
.striped-table th {
background-color: #2196F3;
color: white;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.striped-table tbody tr {
border-bottom: 1px solid #e0e0e0;
transition: background-color 0.3s ease;
}
.striped-table tbody tr:nth-child(even) {
background-color: #f5f5f5;
}
.striped-table tbody tr:hover {
background-color: #e3f2fd;
}
.striped-table tbody tr:last-child {
border-bottom: 2px solid #2196F3;
}
</style>
</head>
<body>
<h1>条纹表格样式</h1>
<table class="striped-table">
<thead>
<tr>
<th>产品名称</th>
<th>价格</th>
<th>库存</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>笔记本电脑</td>
<td>¥5999</td>
<td>15</td>
<td>有货</td>
</tr>
<tr>
<td>智能手机</td>
<td>¥3999</td>
<td>28</td>
<td>有货</td>
</tr>
<tr>
<td>平板电脑</td>
<td>¥2999</td>
<td>8</td>
<td>有货</td>
</tr>
<tr>
<td>智能手表</td>
<td>¥1999</td>
<td>0</td>
<td>缺货</td>
</tr>
<tr>
<td>无线耳机</td>
<td>¥999</td>
<td>35</td>
<td>有货</td>
</tr>
</tbody>
</table>
</body>
</html>效果说明:
- 实现了条纹表格样式,使用
:nth-child(even)选择器 - 添加了表头背景色和文本样式
- 实现了行悬停效果和过渡动画
- 添加了表格阴影和圆角效果
案例3:响应式表格
HTML结构:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>响应式表格</title>
<style>
/* 响应式表格 */
.responsive-table {
width: 100%;
border-collapse: collapse;
font-family: Arial, sans-serif;
font-size: 14px;
color: #333;
}
.responsive-table th,
.responsive-table td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #ddd;
}
.responsive-table th {
background-color: #4CAF50;
color: white;
font-weight: 600;
}
.responsive-table tr:hover {
background-color: #f5f5f5;
}
/* 响应式设计 */
@media screen and (max-width: 600px) {
.responsive-table {
display: block;
overflow-x: auto;
white-space: nowrap;
border: 1px solid #ddd;
border-radius: 4px;
}
.responsive-table table {
width: 100%;
}
}
</style>
</head>
<body>
<h1>响应式表格</h1>
<div class="responsive-table">
<table>
<thead>
<tr>
<th>订单号</th>
<th>客户名称</th>
<th>产品名称</th>
<th>数量</th>
<th>单价</th>
<th>总价</th>
<th>订单日期</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>ORD-001</td>
<td>张三</td>
<td>笔记本电脑</td>
<td>1</td>
<td>¥5999</td>
<td>¥5999</td>
<td>2023-01-01</td>
<td>已完成</td>
</tr>
<tr>
<td>ORD-002</td>
<td>李四</td>
<td>智能手机</td>
<td>2</td>
<td>¥3999</td>
<td>¥7998</td>
<td>2023-01-02</td>
<td>已完成</td>
</tr>
<tr>
<td>ORD-003</td>
<td>王五</td>
<td>平板电脑</td>
<td>1</td>
<td>¥2999</td>
<td>¥2999</td>
<td>2023-01-03</td>
<td>处理中</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>效果说明:
- 实现了响应式表格,在小屏幕上显示水平滚动条
- 添加了基本的表格样式和悬停效果
- 保持了表格的完整功能和可读性
案例4:高级数据表格
HTML结构:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>高级数据表格</title>
<style>
/* 高级数据表格 */
.data-table {
width: 100%;
border-collapse: collapse;
font-family: Arial, sans-serif;
font-size: 14px;
color: #333;
table-layout: fixed;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
border-radius: 8px;
overflow: hidden;
}
.data-table th,
.data-table td {
padding: 12px 16px;
text-align: left;
border-bottom: 1px solid #e0e0e0;
}
.data-table th {
background-color: #333;
color: white;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
position: sticky;
top: 0;
z-index: 10;
}
.data-table tbody tr {
transition: all 0.3s ease;
}
.data-table tbody tr:nth-child(even) {
background-color: #f8f9fa;
}
.data-table tbody tr:hover {
background-color: #e3f2fd;
transform: translateY(-1px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
/* 状态标签 */
.status {
display: inline-block;
padding: 4px 12px;
border-radius: 12px;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.status-active {
background-color: #e8f5e8;
color: #2e7d32;
}
.status-inactive {
background-color: #ffebee;
color: #c62828;
}
.status-pending {
background-color: #fff3e0;
color: #ef6c00;
}
/* 数字对齐 */
.data-table td:nth-child(3),
.data-table td:nth-child(4),
.data-table td:nth-child(5) {
text-align: right;
}
/* 表格标题 */
.table-caption {
caption-side: top;
padding: 12px;
font-size: 16px;
font-weight: 600;
color: #333;
text-align: left;
}
</style>
</head>
<body>
<h1>高级数据表格</h1>
<table class="data-table">
<caption class="table-caption">用户数据统计</caption>
<thead>
<tr>
<th>用户ID</th>
<th>用户名</th>
<th>注册日期</th>
<th>订单数</th>
<th>消费金额</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>1001</td>
<td>user1</td>
<td>2023-01-01</td>
<td>12</td>
<td>¥12,500</td>
<td><span class="status status-active">活跃</span></td>
</tr>
<tr>
<td>1002</td>
<td>user2</td>
<td>2023-01-02</td>
<td>8</td>
<td>¥8,200</td>
<td><span class="status status-active">活跃</span></td>
</tr>
<tr>
<td>1003</td>
<td>user3</td>
<td>2023-01-03</td>
<td>3</td>
<td>¥3,100</td>
<td><span class="status status-pending">待激活</span></td>
</tr>
<tr>
<td>1004</td>
<td>user4</td>
<td>2023-01-04</td>
<td>0</td>
<td>¥0</td>
<td><span class="status status-inactive">未激活</span></td>
</tr>
<tr>
<td>1005</td>
<td>user5</td>
<td>2023-01-05</td>
<td>15</td>
<td>¥15,800</td>
<td><span class="status status-active">活跃</span></td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="3">总计</th>
<th>38</th>
<th>¥39,600</th>
<th></th>
</tr>
</tfoot>
</table>
</body>
</html>效果说明:
- 实现了高级数据表格,包含状态标签和数字对齐
- 添加了表头粘性定位,在滚动时保持可见
- 实现了行悬停效果和变换动画
- 添加了表格阴影和圆角效果
- 包含了表尾总计行
无障碍设计考虑
- 语义化结构:使用正确的表格语义元素(
<thead>、<tbody>、<tfoot>等) - 表头关联:使用
scope属性关联表头和数据 - 表格标题:使用
<caption>元素提供表格标题 - 键盘可访问性:确保表格可以通过键盘导航
- 屏幕阅读器支持:确保屏幕阅读器能够正确解读表格结构
无障碍优化示例
<!-- 无障碍表格结构 -->
<table class="accessible-table">
<caption>用户数据统计</caption>
<thead>
<tr>
<th scope="col">用户ID</th>
<th scope="col">用户名</th>
<th scope="col">注册日期</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1001</th>
<td>user1</td>
<td>2023-01-01</td>
</tr>
</tbody>
</table>
<style>
/* 无障碍表格样式 */
.accessible-table {
/* 基本样式 */
}
/* 焦点样式 */
.accessible-table th:focus,
.accessible-table td:focus {
outline: 2px solid #2196F3;
outline-offset: 2px;
}
</style>浏览器兼容性
- 现代浏览器:Chrome, Firefox, Safari, Edge 完全支持
- 旧版浏览器:IE11 部分支持,可能需要额外的polyfill
最佳实践总结
- 语义化结构:使用正确的表格语义元素,提高可访问性
- 响应式设计:确保表格在不同屏幕尺寸下都能正常显示
- 性能优化:对于大型表格,使用
table-layout: fixed提高渲染性能 - 用户体验:添加悬停效果、条纹行等视觉反馈,提高用户体验
- 可维护性:使用CSS变量管理颜色、间距等样式值,提高可维护性
知识巩固与实践
- 实践练习:创建一个包含多种样式的表格,包括基本表格、条纹表格和响应式表格
- 扩展思考:如何实现一个带有固定表头和固定列的复杂数据表格?
- 性能优化:如何优化大型表格的渲染性能?
通过本教程的学习,您应该能够熟练使用CSS3自定义表格的样式,创建美观且功能完整的表格。