CSS3 表单与表格 - 表格样式 - table

核心知识点讲解

表格的基本结构

表格由以下基本元素组成:

  • <table>:表格容器
  • <thead>:表头部分
  • <tbody>:表格主体
  • <tfoot>:表尾部分
  • <tr>:表格行
  • <th>:表头单元格
  • <td>:数据单元格

基本表格样式

  1. 边框样式:使用border属性设置表格边框
  2. 边框合并:使用border-collapse属性控制边框合并方式
  3. 单元格间距:使用border-spacing属性设置单元格间距
  4. 表格宽度:使用width属性设置表格宽度
  5. 文本对齐:使用text-alignvertical-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>

效果说明

  • 实现了高级数据表格,包含状态标签和数字对齐
  • 添加了表头粘性定位,在滚动时保持可见
  • 实现了行悬停效果和变换动画
  • 添加了表格阴影和圆角效果
  • 包含了表尾总计行

无障碍设计考虑

  1. 语义化结构:使用正确的表格语义元素(&lt;thead&gt;&lt;tbody&gt;&lt;tfoot&gt;等)
  2. 表头关联:使用scope属性关联表头和数据
  3. 表格标题:使用&lt;caption&gt;元素提供表格标题
  4. 键盘可访问性:确保表格可以通过键盘导航
  5. 屏幕阅读器支持:确保屏幕阅读器能够正确解读表格结构

无障碍优化示例

<!-- 无障碍表格结构 -->
<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

最佳实践总结

  1. 语义化结构:使用正确的表格语义元素,提高可访问性
  2. 响应式设计:确保表格在不同屏幕尺寸下都能正常显示
  3. 性能优化:对于大型表格,使用table-layout: fixed提高渲染性能
  4. 用户体验:添加悬停效果、条纹行等视觉反馈,提高用户体验
  5. 可维护性:使用CSS变量管理颜色、间距等样式值,提高可维护性

知识巩固与实践

  1. 实践练习:创建一个包含多种样式的表格,包括基本表格、条纹表格和响应式表格
  2. 扩展思考:如何实现一个带有固定表头和固定列的复杂数据表格?
  3. 性能优化:如何优化大型表格的渲染性能?

通过本教程的学习,您应该能够熟练使用CSS3自定义表格的样式,创建美观且功能完整的表格。

« 上一篇 CSS3 表单与表格 - 表单元素样式 - color 下一篇 » CSS3 表单与表格 - 表格样式 - border-collapse