HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列

那么接下来我将为您详细讲解如何实现“HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列”。

一、实现思路

  1. 将TABLE分为两个部分,左侧是固定的列,右侧是滚动的列。

  2. 固定列使用position: fixed进行固定,同时在其父元素(TABLE)上设置position: relative,保证固定列相对于父元素定位。

  3. 滚动列使用overflow: scroll实现滚动效果。

  4. 为了防止固定列的宽度不正确,需要在渲染前计算固定列的宽度,并将滚动列的宽度减去固定列的宽度。

  5. 为了保持TABLE的样式一致,在固定列中复制滚动列的表头,并隐藏滚动列的表头。

  6. 使用JS动态同步滚动列的位置,以及固定列的高度。

二、示例说明

示例一

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>TABLE固定列示例一</title>
    <style type="text/css">
        table {
            border-collapse: collapse;
            width: 100%;
        }
        table th, td {
            border: 1px solid #ccc;
            padding: 10px;
            text-align: center;
        }
        .fixed {
            position: fixed;
            left: 0;
            top: 0;
            background-color: #fff;
            overflow: hidden;
        }
        .scroll {
            overflow: auto;
            width: 100%;
            margin-left: 200px;
        }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>固定列1</th>
                <th>固定列2</th>
                <th>滚动列1</th>
                <th>滚动列2</th>
                <th>滚动列3</th>
                <th>滚动列4</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="fixed">固定列1</td>
                <td class="fixed">固定列2</td>
                <td>滚动列1</td>
                <td>滚动列2</td>
                <td>滚动列3</td>
                <td>滚动列4</td>
            </tr>
            <tr>
                <td class="fixed">固定列1</td>
                <td class="fixed">固定列2</td>
                <td>滚动列1</td>
                <td>滚动列2</td>
                <td>滚动列3</td>
                <td>滚动列4</td>
            </tr>
            <!-- 继续添加更多行 -->
        </tbody>
    </table>
    <script type="text/javascript">
        // 计算固定列的宽度,并将滚动列宽度减去固定列宽度
        window.onload = function() {
            var ths = document.querySelectorAll('.fixed');
            var scroll = document.querySelector('.scroll');
            var scrollWidth = scroll.offsetWidth - ths.length * ths[0].offsetWidth;
            scroll.style.width = scrollWidth + 'px';
        };
        // 动态同步固定列的高度和滚动列的位置
        window.onscroll = function() {
            var fixed = document.querySelectorAll('.fixed');
            var scroll = document.querySelector('.scroll');
            var distance = scroll.getBoundingClientRect().top;
            for (var i = 0; i < fixed.length; i++) {
                fixed[i].style.top = distance + 'px';
            }
            scroll.style.marginTop = -distance + 'px';
        };
    </script>
</body>
</html>

这个例子将TABLE分为固定列和滚动列两个部分,并通过CSS样式实现了固定列的固定,滚动列的滚动,以及TABLE的样式设置。同时,通过JS动态计算了固定列的宽度,并同步固定列的高度和滚动列的位置。

示例二

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>TABLE固定列示例二</title>
    <style type="text/css">
        table {
            border-collapse: collapse;
            width: 100%;
        }
        table th, td {
            border: 1px solid #ccc;
            padding: 10px;
            text-align: center;
        }
        .fixed {
            position: fixed;
            left: 0;
            top: 0;
            background-color: #fff;
            z-index: 1;
        }
        .scroll {
            overflow: auto;
            width: 100%;
            -webkit-overflow-scrolling: touch;
            margin-left: 200px;
            padding-left: 5px;
        }
        .scroll thead th {
            background-color: #fff;
            position: sticky;
            top: 0;
        }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>固定列1</th>
                <th>固定列2</th>
                <th>滚动列1</th>
                <th>滚动列2</th>
                <th>滚动列3</th>
                <th>滚动列4</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="fixed">固定列1</td>
                <td class="fixed">固定列2</td>
                <td>滚动列1</td>
                <td>滚动列2</td>
                <td>滚动列3</td>
                <td>滚动列4</td>
            </tr>
            <tr>
                <td class="fixed">固定列1</td>
                <td class="fixed">固定列2</td>
                <td>滚动列1</td>
                <td>滚动列2</td>
                <td>滚动列3</td>
                <td>滚动列4</td>
            </tr>
            <!-- 继续添加更多行 -->
        </tbody>
    </table>
    <script type="text/javascript">
        // 动态同步滚动列的位置和固定列的高度
        window.onscroll = function() {
            var fixed = document.querySelectorAll('.fixed');
            var scroll = document.querySelector('.scroll');
            var distance = scroll.getBoundingClientRect().top;
            for (var i = 0; i < fixed.length; i++) {
                fixed[i].style.top = distance + 'px';
            }
            scroll.style.marginTop = -distance + 'px';
        };
    </script>
</body>
</html>

这个例子使用了CSS3的sticky属性,实现了在滚动时固定表头。同时,还加入了对移动端的支持,使用-webkit-overflow-scrolling: touch实现了更加流畅的滚动效果,并通过padding-left修正了滚动列的显示问题。

三、总结

本文详细讲解了如何实现“HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列”这一功能,并提供了两个示例进行说明。同学们可以根据自己的实际需要进行相应的修改和优化,以满足自己的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • PhpStorm利用快捷键提高编码效率

    当使用PhpStorm编辑器时,掌握一些快捷键可以提高编码效率并让我们更快地完成代码编写。以下是几个重要的快捷键和如何在PhpStorm中使用它们的完整攻略: 1. 快速复制粘贴一行或多行代码 要快速复制和粘贴一行或多行代码,可以使用以下快捷键: 复制一行代码:选中一行代码,按下Ctrl+C或Cmd+C。 粘贴代码:在要粘贴代码的位置上,按下Ctrl+V或C…

    css 2023年6月10日
    00
  • ASP.NET Datagridview自动换行的小例子

    ASP.NET Datagridview自动换行是一个比较常见并且非常有用的功能,它能够在数据较多时,将数据自动进行换行,从而使得表格更易读。下面是一个完整的攻略,包含了基本步骤和两个实例说明: 基本步骤 以下是实现ASP.NET Datagridview自动换行的基本步骤: Step 1 转换字段类型 为了让Datagridview进行自动换行,首先需要将…

    css 2023年6月10日
    00
  • CSS Web安全字体组合详解

    CSS Web安全字体组合详解 什么是Web安全字体? Web安全字体是指在绝大多数计算机操作系统(Windows、Mac OS、Linux等)上均已预装的一组字体,网页设计者可以通过 CSS 指定这些字体名称来保证文字在不同操作系统下的正确显示。Web安全字体一般包括以下几款: Arial Arial Black Comic Sans MS Courier…

    css 2023年6月9日
    00
  • fullpage.js全屏滚动的具体使用方法

    使用fullpage.js可以轻松实现全屏滚动效果,下面通过具体的步骤来讲解如何使用fullpage.js实现全屏滚动效果。 第一步:安装fullpage.js 通过npm方式安装fullpage.js: npm install fullpage.js 通过CDN引入fullpage.js: <script src="https://cdn.…

    css 2023年6月10日
    00
  • HTML5制作表格样式

    下面是关于“HTML5制作表格样式”的完整攻略。 HTML5制作表格样式攻略 步骤一:HTML表格结构 HTML表格结构由<table>、<tr>和<td>元素构成。<table>元素用于定义表格,<tr>元素定义行,<td>元素定义每行中的单元格。 示例代码: <table&gt…

    css 2023年6月10日
    00
  • CSS大师Eric采访实录

    CSS大师Eric采访实录 简介 本文是一篇关于CSS大师Eric采访实录的完整攻略。如果你对CSS技术和CSS大师Eric感兴趣,那么本文将会给你带来很多的有用信息。 攻略 阅读材料 在进行攻略之前,我们需要准备一些阅读材料,以便更好地理解CSS大师Eric的技术和思路。以下是一些推荐的资料: Eric Meyer的博客 CSS权威指南(Eric Meye…

    css 2023年6月9日
    00
  • 用Photoshop制作一个圆形的音乐图标按钮

    下面我将为大家详细讲解如何用Photoshop制作一个圆形的音乐图标按钮,包括具体步骤、示例说明和使用技巧。 步骤一:新建文档 打开Photoshop软件,点击菜单栏上的“文件” -> “新建”,弹出新建文档窗口。在窗口中设置文档的尺寸为200*200像素,分辨率为72像素/英寸,背景颜色为白色。 步骤二:绘制圆形按钮 选中工具栏中的“椭圆形工具”,在…

    css 2023年6月11日
    00
  • 纯html+css实现奥运五环的示例代码

    下面是详细讲解“纯html+css实现奥运五环的示例代码”的完整攻略: 设计思路 为了实现五环,需要先把它们的几何形状考虑清楚。五环都可以用简单的线段来描述,然后填充对应的颜色。我们可以使用<div>元素来代表每个环,然后设置对应的样式来实现填充色。在样式中,使用border-radius属性来绘制圆弧边框,使五环看起来更协调。另外,为了让五环居…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部