利用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日

相关文章

  • 纯css实现蓝色圆角效果水平导航菜单代码

    接下来我将分享一份实现纯css水平导航菜单的代码攻略。首先,我们需要明确的是,要实现蓝色圆角效果是通过CSS属性 border-radius 来控制元素的边框半径实现的。而通过HTML元素的嵌套结构,我们可以实现水平导航菜单的布局。下面详细介绍实现过程。 步骤 1: 准备 HTML 结构 在 <ul> 标记中嵌套 <li> 标记,用于…

    css 2023年6月10日
    00
  • 引入css的四种方式总结(分享)

    我来为你详细讲解“引入CSS的四种方式总结(分享)”的完整攻略。 引入CSS的四种方式总结(分享) 在网页开发中,CSS是必不可少的。为了让页面获得各种各样的样式和布局,我们需要引入CSS文件。而引入CSS文件的方式一般有四种,分别是内联样式、嵌入式样式、外部样式和导入样式。 一、内联样式 内联样式就是在HTML标签中直接添加样式属性,这种方式适用于只有一两…

    css 2023年6月9日
    00
  • HTML5新增的Css选择器、伪类介绍

    HTML5新增了一些CSS选择器和伪类,让我们能够更加方便地对选定的HTML元素进行样式的控制。 增强型属性选择器 HTML5新增了一些增强型属性选择器,可以根据属性值的匹配方式来选择相应的元素。 [attribute^=value] 查询属性值以value开头的元素,例如: <div class="round corner"&gt…

    css 2023年6月9日
    00
  • 网页设计师学习网页设计的经验和技巧小结

    下面我来详细讲解“网页设计师学习网页设计的经验和技巧小结”的完整攻略。 1. 掌握基本技能 在学习网页设计时,首先要掌握基本的技能,包括HTML、CSS、JavaScript等基础知识。只有掌握了这些基础技能,才能进行更高级的网页设计学习和创作。 2. 学习设计原则 网页设计不仅要注重技术方面的实现,还要注重美感与用户体验。学习设计原则可以帮助你更好地理解设…

    css 2023年6月9日
    00
  • CSS样式设置元素的透明度以50%为例

    要给元素设置50%的透明度,可以使用CSS的opacity属性。下面是完整的攻略: 步骤1:选择要设置透明度的元素 首先需要选择要设置透明度的元素。可以用CSS选择器来选择元素。例如,以下代码会选中所有class为transparent的元素: .transparent { /* 在这里设置透明度 */ } 步骤2:设置透明度 设置透明度的方法是使用opac…

    css 2023年6月9日
    00
  • 第一次接触神奇的Bootstrap

    Bootstrap是一种用于创建响应式、移动设备优先的Web应用程序的强大框架。对于新手来说,初次接触Bootstrap可能会感到有些挑战,但只要您按照以下步骤操作,就可以在不到几个小时内学会使用Bootstrap。 步骤一:准备工作 在开始学习Bootstrap之前,您需要执行以下准备工作:1. 确定您的开发环境:您需要一个文本编辑器,一个Web服务器和一…

    css 2023年6月9日
    00
  • JS+CSS实现大气的黑色首页导航菜单效果代码

    下面给出JS+CSS实现大气的黑色首页导航菜单效果的攻略。 1. 准备工作 在实现这一效果之前,我们需要先对所需资源进行准备,包括HTML结构、CSS样式和附带的JS脚本文件。 1.1 HTML结构 我们需要准备一个带有导航菜单的HTML结构。该结构中应当包含以下内容: 一个导航菜单容器,用于包裹所有导航菜单项; 多个导航菜单项,用于显示不同的导航链接; 一…

    css 2023年6月10日
    00
  • 举例讲解jQuery中可见性过滤选择器的使用

    我们来详细讲解一下jQuery中可见性过滤选择器的使用攻略。 一、可见性过滤选择器介绍 可见性过滤选择器是 jQuery 中的一种用于筛选元素的方法,可以用于查找页面上可见或隐藏的元素。在可见性过滤选择器中提供了若干种方法来进行元素的筛选,如下: :visible (选择所有可见元素) :hidden (选择所有隐藏元素) :focus (选择当前获得焦点的…

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