← CSS border-radius 圆角边框 CSS border-spacing 边框间距 →

CSS border-collapse 表格边框

原创 2025-09-04 CSS 已有人查阅

CSS border-collapse 属性详解与应用指南

边框折叠属性概述

CSS border-collapse 属性是表格样式控制中的重要属性,用于定义表格单元格边框的渲染方式。该属性决定了相邻单元格的边框是分开显示还是合并为单一边框,直接影响表格的视觉表现和空间布局。

属性值详解

1. separate(默认值)

单元格边框分离显示,相邻单元格保持独立边框。

2. collapse

相邻单元格边框合并为单一边框,创建紧凑的表格外观。

3. initial

将属性重置为默认值。

4. inherit

继承父元素的属性值。

基础语法

table {
    border-collapse: collapse | separate | initial | inherit;
}

应用实例演示

示例1:分离边框模式(separate)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <style>
        .separate-table {
            width: 100%;
            border-collapse: separate;
            border-spacing: 8px; /* 单元格间距 */
            margin: 20px 0;
            font-family: 'Microsoft YaHei', sans-serif;
        }
        
        .separate-table th,
        .separate-table td {
            border: 2px solid #4CAF50;
            padding: 12px;
            text-align: center;
            background-color: #f8fff8;
        }
        
        .separate-table th {
            background-color: #E8F5E9;
            color: #2E7D32;
            font-weight: 600;
        }
        
        .separate-table caption {
            caption-side: top;
            font-size: 1.2em;
            font-weight: bold;
            margin-bottom: 10px;
            color: #333;
        }
    </style>
</head>
<body>
    <table class="separate-table">
        <caption>学生成绩表(分离边框模式)</caption>
        <thead>
            <tr>
                <th>姓名</th>
                <th>语文</th>
                <th>数学</th>
                <th>英语</th>
                <th>总分</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>92</td>
                <td>88</td>
                <td>95</td>
                <td>275</td>
            </tr>
            <tr>
                <td>李四</td>
                <td>85</td>
                <td>92</td>
                <td>89</td>
                <td>266</td>
            </tr>
            <tr>
                <td>王五</td>
                <td>78</td>
                <td>95</td>
                <td>91</td>
                <td>264</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

示例2:合并边框模式(collapse)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <style>
        .collapse-table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
            font-family: 'Microsoft YaHei', sans-serif;
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
        }
        
        .collapse-table th,
        .collapse-table td {
            border: 1px solid #BBDEFB;
            padding: 12px;
            text-align: center;
        }
        
        .collapse-table th {
            background-color: #2196F3;
            color: white;
            font-weight: 600;
            border-bottom: 2px solid #1976D2;
        }
        
        .collapse-table tr:nth-child(even) {
            background-color: #E3F2FD;
        }
        
        .collapse-table tr:hover {
            background-color: #BBDEFB;
            transition: background-color 0.3s ease;
        }
        
        .collapse-table caption {
            caption-side: top;
            font-size: 1.2em;
            font-weight: bold;
            margin-bottom: 15px;
            color: #333;
        }
    </style>
</head>
<body>
    <table class="collapse-table">
        <caption>员工信息表(合并边框模式)</caption>
        <thead>
            <tr>
                <th>工号</th>
                <th>姓名</th>
                <th>部门</th>
                <th>职位</th>
                <th>入职日期</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1001</td>
                <td>张明</td>
                <td>技术部</td>
                <td>前端工程师</td>
                <td>2025-03-15</td>
            </tr>
            <tr>
                <td>1002</td>
                <td>李华</td>
                <td>设计部</td>
                <td>UI设计师</td>
                <td>2025-08-20</td>
            </tr>
            <tr>
                <td>1003</td>
                <td>王芳</td>
                <td>市场部</td>
                <td>营销经理</td>
                <td>2025-05-10</td>
            </tr>
            <tr>
                <td>1004</td>
                <td>陈强</td>
                <td>技术部</td>
                <td>后端工程师</td>
                <td>2025-01-08</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

示例3:复杂表格样式设计

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <style>
        .financial-table {
            width: 100%;
            border-collapse: collapse;
            margin: 30px 0;
            font-family: 'Microsoft YaHei', sans-serif;
            border: 2px solid #34495E;
        }
        
        .financial-table th,
        .financial-table td {
            padding: 14px;
            text-align: right;
            border: 1px solid #BDC3C7;
        }
        
        .financial-table th {
            background: linear-gradient(135deg, #2C3E50, #34495E);
            color: white;
            font-weight: 600;
            text-align: center;
            position: sticky;
            top: 0;
        }
        
        .financial-table th:first-child,
        .financial-table td:first-child {
            text-align: left;
            font-weight: 500;
        }
        
        .financial-table tbody tr:nth-child(odd) {
            background-color: #F8F9F9;
        }
        
        .financial-table tbody tr:hover {
            background-color: #EBF5FB;
        }
        
        .financial-table tfoot {
            background-color: #EAEDED;
            font-weight: bold;
        }
        
        .financial-table tfoot td {
            border-top: 2px solid #34495E;
        }
        
        .positive {
            color: #27AE60;
        }
        
        .negative {
            color: #E74C3C;
        }
        
        .table-container {
            overflow-x: auto;
            max-width: 100%;
            margin: 20px 0;
        }
    </style>
</head>
<body>
    <div class="table-container">
        <table class="financial-table">
            <caption>2024年第一季度财务报表</caption>
            <thead>
                <tr>
                    <th>项目</th>
                    <th>一月</th>
                    <th>二月</th>
                    <th>三月</th>
                    <th>季度总计</th>
                    <th>同比增长</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>营业收入</td>
                    <td>¥1,250,000</td>
                    <td>¥1,380,000</td>
                    <td>¥1,520,000</td>
                    <td>¥4,150,000</td>
                    <td class="positive">+15.2%</td>
                </tr>
                <tr>
                    <td>营业成本</td>
                    <td>¥750,000</td>
                    <td>¥820,000</td>
                    <td>¥890,000</td>
                    <td>¥2,460,000</td>
                    <td class="positive">+8.7%</td>
                </tr>
                <tr>
                    <td>毛利润</td>
                    <td>¥500,000</td>
                    <td>¥560,000</td>
                    <td>¥630,000</td>
                    <td>¥1,690,000</td>
                    <td class="positive">+25.6%</td>
                </tr>
                <tr>
                    <td>运营费用</td>
                    <td>¥280,000</td>
                    <td>¥295,000</td>
                    <td>¥310,000</td>
                    <td>¥885,000</td>
                    <td class="negative">+12.3%</td>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <td>净利润</td>
                    <td>¥220,000</td>
                    <td>¥265,000</td>
                    <td>¥320,000</td>
                    <td>¥805,000</td>
                    <td class="positive">+32.8%</td>
                </tr>
            </tfoot>
        </table>
    </div>
</body>
</html>

嵌套表格处理

示例4:嵌套表格边框控制

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <style>
        .main-table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
            font-family: 'Microsoft YaHei', sans-serif;
        }
        
        .main-table th,
        .main-table td {
            border: 1px solid #7DCEA0;
            padding: 12px;
            vertical-align: top;
        }
        
        .main-table th {
            background-color: #27AE60;
            color: white;
        }
        
        .nested-table {
            width: 100%;
            border-collapse: collapse;
            margin: 8px 0;
        }
        
        .nested-table th,
        .nested-table td {
            border: 1px solid #F39C12;
            padding: 6px;
            font-size: 0.9em;
        }
        
        .nested-table th {
            background-color: #F39C12;
            color: white;
        }
        
        .nested-table tr:nth-child(even) {
            background-color: #FEF9E7;
        }
        
        .department-header {
            background-color: #D5F5E3 !important;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <table class="main-table">
        <thead>
            <tr>
                <th>部门</th>
                <th>团队成员</th>
                <th>项目数量</th>
                <th>完成率</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="department-header">技术部</td>
                <td>
                    <table class="nested-table">
                        <tr>
                            <th>姓名</th>
                            <th>职位</th>
                        </tr>
                        <tr>
                            <td>张工程师</td>
                            <td>前端开发</td>
                        </tr>
                        <tr>
                            <td>李工程师</td>
                            <td>后端开发</td>
                        </tr>
                    </table>
                </td>
                <td>8</td>
                <td>87.5%</td>
            </tr>
            <tr>
                <td class="department-header">设计部</td>
                <td>
                    <table class="nested-table">
                        <tr>
                            <th>姓名</th>
                            <th>职位</th>
                        </tr>
                        <tr>
                            <td>王设计师</td>
                            <td>UI设计</td>
                        </tr>
                        <tr>
                            <td>赵设计师</td>
                            <td>UX设计</td>
                        </tr>
                    </table>
                </td>
                <td>6</td>
                <td>91.7%</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

响应式表格设计

示例5:移动端适配表格

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .responsive-table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
            font-family: 'Microsoft YaHei', sans-serif;
        }
        
        .responsive-table th,
        .responsive-table td {
            border: 1px solid #AED6F1;
            padding: 12px;
            text-align: left;
        }
        
        .responsive-table th {
            background-color: #3498DB;
            color: white;
            position: sticky;
            top: 0;
        }
        
        .responsive-table tr:nth-child(even) {
            background-color: #EBF5FB;
        }
        
        /* 移动端适配 */
        @media screen and (max-width: 768px) {
            .responsive-table {
                font-size: 14px;
            }
            
            .responsive-table th,
            .responsive-table td {
                padding: 8px;
            }
            
            /* 小屏幕下隐藏次要列 */
            .responsive-table td:nth-child(3),
            .responsive-table th:nth-child(3) {
                display: none;
            }
        }
        
        @media screen and (max-width: 480px) {
            .responsive-table {
                display: block;
                overflow-x: auto;
                white-space: nowrap;
            }
            
            .responsive-table th,
            .responsive-table td {
                min-width: 100px;
            }
        }
        
        .container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
        }
    </style>
</head>
<body>
    <div class="container">
        <table class="responsive-table">
            <thead>
                <tr>
                    <th>产品名称</th>
                    <th>类别</th>
                    <th>库存数量</th>
                    <th>单价</th>
                    <th>销量</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>智能手机X</td>
                    <td>电子产品</td>
                    <td>156</td>
                    <td>¥3,999</td>
                    <td>2,345</td>
                </tr>
                <tr>
                    <td>无线耳机</td>
                    <td>配件</td>
                    <td>289</td>
                    <td>¥899</td>
                    <td>1,567</td>
                </tr>
                <tr>
                    <td>智能手表</td>
                    <td>穿戴设备</td>
                    <td>134</td>
                    <td>¥1,299</td>
                    <td>892</td>
                </tr>
                <tr>
                    <td>平板电脑</td>
                    <td>电子产品</td>
                    <td>87</td>
                    <td>¥2,599</td>
                    <td>456</td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
</html>

本节课程知识要点

核心技术掌握

  1. 属性选择:根据设计需求选择合适的边框模式

  2. 间距控制:在分离模式下使用 border-spacing 属性

  3. 样式继承:理解嵌套表格中的属性继承关系

  4. 响应式设计:针对不同屏幕尺寸优化表格显示

设计原则建议

  1. 一致性:保持表格样式与整体设计风格统一

  2. 可读性:确保边框样式不影响数据阅读体验

  3. 适应性:考虑不同设备的显示需求

  4. 美观性:合理运用颜色和间距提升视觉效果

性能优化提示

  1. 使用简写属性提高代码效率

  2. 避免过度复杂的嵌套表格结构

  3. 考虑使用CSS变量管理表格样式

  4. 注意浏览器兼容性处理

浏览器兼容性处理

/* 渐进增强写法 */
.modern-table {
    border-collapse: collapse;
    border-spacing: 0; /* 确保兼容性 */
}

/* 备用方案 */
@supports not (border-collapse: collapse) {
    .fallback-table {
        border: 1px solid #ccc;
    }
    
    .fallback-table th,
    .fallback-table td {
        border: 1px solid #ccc;
        margin: -1px 0 0 -1px;
    }
}

实用技巧与实践

1. 斑马纹表格设计

.zebra-table {
    border-collapse: collapse;
    width: 100%;
}

.zebra-table tr:nth-child(even) {
    background-color: #f8f9fa;
}

.zebra-table tr:hover {
    background-color: #e3f2fd;
}

2. 固定表头实现

.sticky-header {
    position: sticky;
    top: 0;
    z-index: 10;
    background-color: #fff;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

3. 边框样式优化

.clean-border {
    border: 1px solid #dee2e6;
}

.clean-border th,
.clean-border td {
    border: 1px solid #dee2e6;
    padding: 0.75rem;
}

CSS border-collapse 属性是表格设计中的重要工具,通过合理运用可以:

  1. 创建整洁专业的表格布局

  2. 提升数据可读性和用户体验

  3. 实现响应式表格设计

  4. 保持跨浏览器的一致性显示

关键是要根据具体的业务需求和设计目标选择合适的边框模式,并注意保持表格的可用性和可访问性。通过掌握 border-collapse 属性的各种应用技巧,开发者能够创建出既美观又实用的数据表格。

← CSS border-radius 圆角边框 CSS border-spacing 边框间距 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号