CSS3实现表格的锁定行与锁定列

通过CSS3的  position: sticky 实现

 

<!DOCTYPE html>
<html>

<head>
    <style>
        /* 容器样式:固定宽高 + 允许滚动 */
        .table-container {
            max-width: 600px;
            max-height: 400px;
            overflow: auto;
            margin: 20px;
            border: 1px solid #ddd;
        }

        /* 表格样式:固定布局 + 边框 */
        table {
            border-collapse: collapse;
            table-layout: fixed;
            width: 100%;
        }



        /* 表头固定 */
        thead th {
            position: sticky;
            top: 0;
            /* 固定在顶部 */
            z-index: 2;
            /* 确保表头在上层 */
            background: #fff;
            box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1);

            &::before {
                position: absolute;
                right: 0;
                top: -1px;
                z-index: 6;
                height: 1px;
                width: 100%;
                transition: box-shadow .3s;
                content: "";
                pointer-events: none;
                border: 1px solid white;
            }

            &::after {
                position: absolute;
                right: 0;
                bottom: -1px;
                z-index: 6;
                height: 1px;
                width: 100%;
                transition: box-shadow .3s;
                content: "";
                pointer-events: none;
                border-bottom: 1px solid #ddd;
            }
        }

        /* thead th:first-child {
            &::before {
                position: absolute;
                left: -2px;
                top: -1px;
                z-index: 6;
                height: 100%;
                width: 1px;
                transition: box-shadow .3s;
                content: "";
                pointer-events: none;
                border-right: 1px solid #ddd;
            }

            &::after {
                position: absolute;
                right: -1px;
                bottom: 0px;
                z-index: 6;
                height: 100%;
                width: 1px;
                transition: box-shadow .3s;
                content: "";
                pointer-events: none;
                border-right: 1px solid #ddd;
            }

        } */

        /* 首列固定 */
        tbody td:first-child {
            position: sticky;
            left: 0;
            /* 固定在左侧 */
            z-index: 1;
            /* 层级低于表头 */
            background: #fff;
            box-shadow: 2px 0 2px -1px rgba(0, 0, 0, 0.1);

            &::before {
                position: absolute;
                left: -2px;
                top: -1px;
                z-index: 6;
                height: 100%;
                width: 1px;
                transition: box-shadow .3s;
                content: "";
                pointer-events: none;
                border-right: 1px solid #ddd;
            }

            &::after {
                position: absolute;
                right: -1px;
                bottom: 0px;
                z-index: 6;
                height: 100%;
                width: 1px;
                transition: box-shadow .3s;
                content: "";
                pointer-events: none;
                border-right: 1px solid #ddd;
            }

        }

        /* 左上角表头单元格:同时固定 */
        thead th:first-child {
            left: 0;
            z-index: 3;
            /* 最高层级 */

        }

        /* 单元格基础样式 */
        th,
        td {
            padding: 12px;
            text-align: left;
            border: 1px solid #ddd;
            min-width: 120px;
        }

        th {
            background: #f8f9fa;
        }
    </style>
</head>

<body>
    <div class="table-container">
        <table>
            <thead>
                <tr>
                    <th class="myTh" style="width: 180px">Header 1</th>
                    <th class="myTh" style="width: 180px">Header 2</th>
                    <th class="myTh" style="width: 180px">Header 3</th>
                    <th class="myTh" style="width: 180px">Header 4</th>
                </tr>
            </thead>
            <tbody>
                <!-- 示例数据 -->
                <tr>
                    <td>Row 1</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 2</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
                <tr>
                    <td>Row 3</td>
                    <td>Data</td>
                    <td>Data</td>
                    <td>Data</td>
                </tr>
               
                <!-- 更多行... -->
            </tbody>
        </table>
    </div>
</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值