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

yizhihongxing

那么接下来我将为您详细讲解如何实现“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日

相关文章

  • CSS元素设置可见性的5种方法

    CSS元素可见性是指控制HTML元素的显示和隐藏状态的属性。在实际开发中,我们经常遇到需要使用CSS控制元素显示和隐藏的情况,例如:显示/隐藏下拉列表、弹窗、菜单等。 本文将对CSS元素可见性的相关知识进行详细讲解,并提供代码示例方便理解。 CSS元素可见性有以下几个常见属性: display display属性用于控制元素的显示方式。常用的值有:none、…

    Web开发基础 2023年3月20日
    00
  • Apache网页的优化、安全与防盗链图文详解

    Apache网页的优化、安全与防盗链图文详解 一、优化 1.启用gzip压缩 启用gzip压缩可以大大减小网页传输的大小,提高网页加载速度。在Apache中可以通过修改.htaccess文件实现: <IfModule mod_deflate.c> # Compress HTML, CSS, JavaScript, Text, XML and fo…

    css 2023年6月9日
    00
  • FireFox火狐浏览器与IE兼容问题 – 透明滤镜 DIV滚动条

    FireFox火狐浏览器与IE兼容问题 – 透明滤镜 DIV滚动条 当我们在开发Web页面时,经常会遇到不同浏览器之间的兼容性问题,其中FireFox火狐浏览器与IE兼容问题是最常见的。本文将介绍如何解决一个常见的兼容性问题:在FireFox浏览器下,使用透明滤镜实现DIV滚动条时不起作用的问题。 问题描述 我们在开发Web页面时,经常会希望使用DIV来实现…

    css 2023年6月10日
    00
  • CSS3悬停效果案例应用

    CSS3 悬停效果是网页设计中常用的一种效果,可以为网页增加交互性和美观性。下面是一个完整攻略,包含了如何使用 CSS3 实现悬停效果的过程和两个示例说明。 CSS3 悬停效果的实现过程 1. 使用:hover 伪类 我们可以使用 CSS3 的 :hover 伪类来实现悬停效果。下面是一个示例: <div class="box"&g…

    css 2023年5月18日
    00
  • css中visiblity和display异同详解

    下面是关于 “css中visiblity和display异同详解” 的攻略: 1. visibility 和 display 的基本区别 1.1 visibility的作用 visibility 是一种控制网页元素显示和隐藏的属性。使用 visibility 属性可以控制元素是否显示在页面中。当 visibility 属性设置为 hidden 时,该元素在页…

    css 2023年6月10日
    00
  • ReactJS入门实例教程详解

    ReactJS入门实例教程详解 ReactJS 是基于JavaScript的一款用于构建用户界面的库,由 Facebook 开发。本篇教程主要介绍 ReactJS 的基础知识及其相关使用。 ReactJS 基本概念 ReactJS 将用户界面拆分成组件,并通过组合这些组件构成复杂界面。ReactJS 主要包含以下三个基本概念: 组件:组件是将界面划分成独立部…

    css 2023年6月10日
    00
  • layui的布局和表格的渲染以及动态生成表格的方法

    我来详细讲解一下“layui的布局和表格的渲染以及动态生成表格的方法”的完整攻略。 layui的布局 在layui中,布局一般使用面板(panel)和卡片(card)来完成。面板中包含了头(header)、体(body)和脚(footer)三个部分。卡片则是一种比面板更加轻量的容器。 下面是一个示例代码,演示了如何使用layui布局: <div cla…

    css 2023年6月10日
    00
  • css中text-overflow属性与文本截断详解

    CSS中的text-overflow属性可以用来控制文本溢出时的表现形式,常见的表现形式包括省略号(…)和忽略。 text-overflow的使用方法 text-overflow属性的使用方法如下: text-overflow: clip|ellipsis|required|string|initial|inherit; 常用的属性值包括: clip:默…

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