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

要实现固定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日

相关文章

  • 使用CSS3实现SVG路径描边动画效果入门教程

    使用CSS3可以通过描边动画为SVG图形增加一些生动的效果,我们可以通过以下步骤来实现: 1. SVG代码准备 首先我们需要准备一个SVG代码,该SVG图形应该是单路径。例如下面这个简单的SVG: <svg viewBox="0 0 200 200"> <path d="M50,50 L150,50 Q170,…

    css 2023年6月10日
    00
  • 前端编码规范(4)—— CSS 和 Sass (SCSS) 开发规范

    下面是关于“前端编码规范(4)—— CSS 和 Sass (SCSS) 开发规范”的完整攻略。 目录 命名规范 代码格式 注释规范 SCSS 规范 示例说明 命名规范 选择器和属性命名使用小写字母 : 所有的选择器(class和id)和属性名都应当使用小写字母。 共同前缀 : 对于属于同一组件或者定制化组件的样式,使用共同的前缀,以区别于其他样式。 中划线(…

    css 2023年6月9日
    00
  • 采用CSS定位属性实现Html中DIV层叠与悬浮

    要实现HTML中DIV层叠与悬浮,需要使用CSS定位属性。这里有两种常用的方法: 方法一:使用position属性 为父元素设置 position: relative;,这可以使子元素相对于父元素定位。 对要悬浮的子元素,设置 position: absolute;,这会使元素从文档流中脱离,可以自由地定位。 使用 top 或 bottom 和 left 或…

    css 2023年6月9日
    00
  • css 图片变黑白效果 使用CSS将图片转换成黑白的

    关于如何使用CSS实现图片黑白效果,我可以给您一些参考,详见下文。 CSS实现图片黑白效果的方法 CSS3中有一个filter属性,可以实现对元素的滤镜效果,包括对图片的处理。可以通过设置filter属性来实现将原色的图片转换成黑白的效果。 实现方法 实现图片黑白效果的方法是通过CSS3的filter属性来实现的。该属性允许将一些CSS效果应用于HTML元素…

    css 2023年6月10日
    00
  • CSS3中的Media Queries学习笔记

    CSS3中的Media Queries学习笔记 什么是Media Queries Media Queries 是 CSS3 中的一个重要特性,它允许我们根据设备的特性(如屏幕宽度、高度、方向、分辨率等)来应用不同的样式。通过使用 Media Queries,我们可以为不同的设备提供不同的样式,从而实现响应式设计。 Media Queries 的语法 Medi…

    css 2023年5月18日
    00
  • css3实现六边形边框的实例代码

    下面是css3实现六边形边框的攻略,分成以下几个部分: 1.初步准备 首先,我们需要定义一个六边形的容器(div): <div class="hexagon"></div> 然后,给这个容器定义一些基本样式: .hexagon { width: 120px; height: 100px; background-co…

    css 2023年6月10日
    00
  • jQuery实现侧边栏隐藏与显示的方法详解

    题目:jQuery实现侧边栏隐藏与显示的方法详解 一、前言 现如今,侧边栏已经成为了很多网站的标配,而隐藏与显示几乎是侧边栏最基础的操作。利用jQuery实现侧边栏的隐藏与显示,可以使得网站变得更为美观,功能也更加实用。本文将详细讲解jQuery实现侧边栏隐藏与显示的方法。 二、实现侧边栏隐藏与显示的基础知识 在实现侧边栏隐藏与显示之前,需要掌握以下基础知识…

    css 2023年6月10日
    00
  • JS实现九宫格拼图游戏

    如何实现JS九宫格拼图游戏? 前置知识: HTML、CSS、JS基础 DOM操作 事件监听 游戏规则: 将原图分成N * N(N >= 3)个拼图块 每个拼图块可以通过与空白块交换位置来移动 目标是将所有的拼图块移动到正确的位置,还原原图形 实现步骤: 3.1 HTML基本结构 通过HTML代码搭建游戏基本框架 将原图划分成若干个小块,并将它们放置到九…

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