利用js+css+html实现固定table的列头不动

yizhihongxing

要实现固定table的列头不动,可以结合使用js、css和html技术来实现。具体步骤如下:

第一步:HTML结构设计

在HTML中,我们需要将表格元素进行划分,将表头和表体分别拆分成两个表格区域。例如,以下是一个名为"fixedTable"的表格,已经被划分为header和body两个部分。

<div class="table-wrap">
  <table class="fixedTable">
    <thead>
      <tr>
        <th>列头1</th>
        <th>列头2</th>
        <th>列头3</th>
      </tr>
    </thead>
  </table>
  <div class="table-body">
    <table class="fixedTable-body">
      <tbody>
        <tr>
          <td>列1</td>
          <td>列2</td>
          <td>列3</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

第二步:CSS样式设置

接下来,我们需要使用一些CSS样式来设置表格,实现固定表头。给定以下CSS样式:

.table-wrap {
  overflow-x: auto;
}

.fixedTable {
  width: 100%;
  table-layout: fixed;
}

.fixedTable thead th,
.fixedTable tbody td {
  padding: 10px;
  text-align: left;
}

.fixedTable thead th {
  background-color: #f6f6f6;
  position: sticky;
  top: 0;
  border: 1px solid #ddd;
}

.table-body {
  overflow-y: auto;
  height: 200px;
}

.fixedTable-body {
  width: 100%;
  table-layout: fixed;
}

.fixedTable-body tbody td {
  padding: 10px;
  text-align: left;
  border: 1px solid #ddd;
}

解析一下这个样式:

  • 给 .table-wrap 设置 overflow-x: auto

  • position: sticky; top: 0; 让表头在滚动时固定在顶部;

  • 给表格设置 table-layout: fixed,使得每一列拥有相同的宽度,适配不同的屏幕;

  • 设置表体的高度,并且设置 overflow-y: auto,当表格内容超出高度时,显示滚动条。

第三步:JavaScript脚本实现

默认情况下,表头和表体是两个独立的表格区域,因此需要将两者的每一列对齐。我们可以通过遍历表头行中的每一个单元格,将它们的宽度应用到相应的表体单元格中。

var table = document.querySelector('.table-wrap'),
    thead = table.querySelector('.fixedTable thead'),
    tbody = table.querySelector('.fixedTable-body tbody');

var tbodyTd = tbody.querySelectorAll('td');

for (var i = 0, len = thead.rows[0].cells.length; i < len; i++) {
  var th = thead.rows[0].cells[i],
      td = tbodyTd[i];

  td.style.width = th.offsetWidth + 'px';
}

以上代码将第一个表头行中的每个单元格与表体的对应单元格绑定起来,并将表体单元格的宽度设置为表头单元格的宽度。这确保了表头和表体的每个列都拥有相同的尺寸,并且当用户水平滚动表格时,它们会完美对齐。

如果你需要使用jQuery库来实现这个功能,可以参考以下的实现方法:

var thead = $(".fixedTable thead"),
    tbody = $(".fixedTable tbody");

tbody.scroll(function() {
  thead.css("transform", "translateY("+this.scrollTop+"px)");
});

以上代码使用了scrollTop方法和CSS3的transform属性来实现表头固定。当表格上下滚动时,通过 scrollTop 获取滚动距离,并将其应用到表头的 translateY 偏移上,以实现固定表头的效果。

示例说明

以下两个示例分别演示了如何使用JavaScript原生API和jQuery库来实现固定table的列头不动。

示例1(JavaScript原生API)

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>固定table列头不动</title>
  <style>
    .table-wrap {
      overflow-x: auto;
    }

    .fixedTable {
      width: 100%;
      table-layout: fixed;
    }

    .fixedTable thead th,
    .fixedTable tbody td {
      padding: 10px;
      text-align: left;
    }

    .fixedTable thead th {
      background-color: #f6f6f6;
      position: sticky;
      top: 0;
      border: 1px solid #ddd;
    }

    .table-body {
      overflow-y: auto;
      height: 200px;
    }

    .fixedTable-body {
      width: 100%;
      table-layout: fixed;
    }

    .fixedTable-body tbody td {
      padding: 10px;
      text-align: left;
      border: 1px solid #ddd;
    }
  </style>
</head>
<body>
  <div class="table-wrap">
    <table class="fixedTable">
      <thead>
        <tr>
          <th>列头1</th>
          <th>列头2</th>
          <th>列头3</th>
        </tr>
      </thead>
    </table>
    <div class="table-body">
      <table class="fixedTable-body">
        <tbody>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>

  <script>
    var table = document.querySelector('.table-wrap'),
        thead = table.querySelector('.fixedTable thead'),
        tbody = table.querySelector('.fixedTable-body tbody');

    var tbodyTd = tbody.querySelectorAll('td');

    for (var i = 0, len = thead.rows[0].cells.length; i < len; i++) {
      var th = thead.rows[0].cells[i],
          td = tbodyTd[i];

      td.style.width = th.offsetWidth + 'px';
    }
  </script>
</body>
</html>

示例2(jQuery库)

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>固定table列头不动</title>
  <style>
    .table-wrap {
      overflow-x: auto;
    }

    .fixedTable {
      width: 100%;
      table-layout: fixed;
    }

    .fixedTable thead th,
    .fixedTable tbody td {
      padding: 10px;
      text-align: left;
    }

    .fixedTable thead th {
      background-color: #f6f6f6;
      position: sticky;
      top: 0;
      border: 1px solid #ddd;
    }

    .table-body {
      overflow-y: auto;
      height: 200px;
    }

    .fixedTable-body {
      width: 100%;
      table-layout: fixed;
    }

    .fixedTable-body tbody td {
      padding: 10px;
      text-align: left;
      border: 1px solid #ddd;
    }
  </style>
</head>
<body>
  <div class="table-wrap">
    <table class="fixedTable">
      <thead>
        <tr>
          <th>列头1</th>
          <th>列头2</th>
          <th>列头3</th>
        </tr>
      </thead>
    </table>
    <div class="table-body">
      <table class="fixedTable-body">
        <tbody>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
          <tr>
            <td>列1</td>
            <td>列2</td>
            <td>列3</td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>

  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script>
    var thead = $(".fixedTable thead"),
        tbody = $(".fixedTable tbody");

    tbody.scroll(function() {
      thead.css("transform", "translateY("+this.scrollTop+"px)");
    });
  </script>
</body>
</html>

这两个示例都使用了相同的HTML结构和CSS样式设计,但是它们分别使用了不同的JavaScript语言实现表头固定。本质上,它们都是采用了类似的原理,通过遍历表头和表体单元格,实现表头元素在滚动时固定,保留表格的良好体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用js+css+html实现固定table的列头不动 - Python技术站

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

相关文章

  • dw怎么制作鼠标经过图标改变颜色?

    首先,我假设你已经了解 Markdown 基本语法并且在自己的网站中使用了它。要回答“dw怎么制作鼠标经过图标改变颜色?”这个问题,有一些不同的方法可以实现。下面介绍两种方法,供你参考。 方法一:使用 CSS 在 HTML 中添加一个链接或图片标签,并使用 CSS 给它一个类。在 CSS 中,使用 :hover 选择器以及 background-color …

    css 2023年6月9日
    00
  • CSS如何只改变父元素背景透明度不改变子元素透明度

    当我们想改变父元素的透明度,同时保持子元素的不变,可以使用CSS的opacity属性。但是直接改变父元素的透明度,同时会影响到子元素。因此,需要使用其他方法来实现这个需求。 一种简单的方法是使用rgba颜色来设置背景色。和使用传统的16进制颜色不同,rgba颜色允许我们设置颜色的透明度。具体方法如下: .parent { background-color: …

    css 2023年6月9日
    00
  • CSS 多图片融合背景定位的应用于优缺点分析

    下面是“CSS多图片融合背景定位的应用于优缺点分析”的完整攻略,包括以下内容。 1. 概述 多图片融合背景定位是一种Web前端技术,它通过将多个小图标或图片拼接成一张大图,并使用CSS中的背景定位属性来精确地显示相应的小图标或图片,从而实现减少HTTP请求数的目的。 2. 实施步骤 步骤1. 准备多张小图标或图片 根据实际需要,准备多张用于展示的小图标或图片…

    css 2023年6月9日
    00
  • 详解CSS的结构与层叠以及格式化

    详解CSS的结构与层叠以及格式化 CSS的结构 CSS(层叠样式表)是一种用于定义HTML或XML文件中如何样式化元素的语言。CSS采用选择器和声明块的结构,将样式应用于文档的具体元素。 CSS选择器定义了要应用样式的元素,而属性值则定义了应用的样式,这些属性值存储在声明块中。 声明块有以下结构: selector { property: value; pr…

    css 2023年6月9日
    00
  • css中让元素隐藏的多种方法

    下面是“CSS中让元素隐藏的多种方法”的详细攻略: 一、使用display属性控制隐藏 display: none; 此方法常用于需要完全隐藏某个元素的情况。它会将元素从页面中移除,并且不占据任何空间。 示例代码: “`css element { display: none;}“` visibility: hidden; 此方法可以隐藏元素,但会保留元素…

    css 2023年6月10日
    00
  • JavaScript switch case

    JavaScript switch case语句是一种用于多个分支情况的控制流语句。它与if-else语句相似,但要更加简洁和易于阅读。通常来说,switch case可帮助开发人员避免编写过多的if-else嵌套,从而提高代码效率。 下面是JavaScript switch case的语法: switch(expression) { case value1…

    Web开发基础 2023年3月30日
    00
  • html清除浮动的6种方法示例

    当html页面中有浮动元素时,可能会出现一些布局上的问题,比如父元素无法自适应高度,子元素位置错乱等,这时候需要使用清除浮动的方法来解决这些问题。本文将介绍6种常用的清除浮动的方法。下面将分别进行介绍: 1. 在父元素末尾添加空标签 这是一种比较简单的清除浮动的方法。在父元素的末尾添加一个空的标签,如下所示: <div class="pare…

    css 2023年6月10日
    00
  • CSS3中的常用选择器使用示例整理

    让我来详细解释一下“CSS3中的常用选择器使用示例整理”的完整攻略。 简介 在CSS3中,选择器是定义样式的重要组成部分。除了基本的元素选择器和类选择器外,CSS3还提供了许多新的选择器,比如属性选择器、伪类选择器等等。这些选择器可以极大地简化样式的编写过程,提高开发效率。 常用选择器示例 类选择器 类选择器是CSS中最基础的选择器之一,它使用class属性…

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