詳解table表頭固定

一、CSS實現table表頭固定

在table標籤上加入以下CSS,即可實現table表頭固定:

table {
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
}

thead,
tfoot {
  width: 100%;
  display: table;
  table-layout: fixed;
}

thead {
  width: calc(100% - 17px);
  overflow-y: scroll;
  height: 50px;
}

thead tr {
  display: table;
  width: 100%;
  table-layout: fixed;
}

thead th {
  position: sticky;
  top: 0;
  background: #fff;
  z-index: 1;
}

以上代碼分為三個部分實現:設置table寬度、th固定表頭、滾動條懸浮。實現核心是thead、tfoot的設置。

首先,設置table寬度、border等樣式;然後,設置thead、tfoot為display: table,可以保證它們的寬度和tbody一致。接着,設置thead的高度為50px,並將overflow-y設置為scroll,這樣可以保證thead滾動時固定在頂部;稍後主要是針對thead進行設置。

在thead tr上設置display: table和table-layout: fixed可以保證thead的寬度和tbody的寬度一致和內容顯示在一行內。對於thead下的th,則設置為position: sticky,top: 0,可以固定th在頂部,而z-index: 1的設置可以保證其在懸浮效果下不會被覆蓋。

二、JavaScript實現table表頭固定

使用JavaScript來實現table表頭固定,可以自定義更多的功能,如滾動條寬度、表頭樣式等。

以下是代碼實現:

(function() {
  var table = document.querySelector('table');
  var thead = table.querySelector('thead');
  var tr = table.querySelector('tr');
  var cells = tr.children;

  function fixTableHead() {
    var dim = table.getBoundingClientRect();
    var tableLeft = dim.left + window.pageXOffset;
    var tableWidth = dim.width;
    var thOffsets = getTHOffsets(cells);

    if (dim.top < 0) {
      thead.classList.add('fixed');
      thead.style.top = '0';
      thead.style.width = tableWidth + 'px';
      setOffsets(cells, thOffsets);
    } else if (thead.classList.contains('fixed')) {
      thead.classList.remove('fixed');
      setOffsets(cells, null);
    }

    function getTHOffsets(cells) {
      var offsets = [];
      for (var i = 0; i < cells.length; i++) {
        offsets.push(cells[i].getBoundingClientRect().left - tableLeft);
      }
      return offsets;
    }

    function setOffsets(cells, offsets) {
      for (var i = 0; i < cells.length; i++) {
        cells[i].style.width = offsets && offsets[i] ? offsets[i] + 'px' : '';
      }
    }
  }

  window.addEventListener('scroll', fixTableHead);
  window.addEventListener('resize', fixTableHead);
})();

以上代碼會對table的表頭進行定位,並根據滾動條的位置來判斷表頭是否需要固定。當表頭被固定時,獲取每個單元格的offsetLeft,根據offsetLeft來設置單元格的寬度樣式,以保證內容與表頭的寬度對齊。

三、移動設備中table表頭固定

在移動設備中,尺寸較小,為了保證用戶能夠更好的瀏覽table,我們需要對table表頭進行固定,以下是代碼實現:

@media screen and (max-width: 599px) {
  table,
  thead,
  tbody,
  th,
  td,
  tr {
    display: block;
    width: 100%;
  }
  thead tr {
    display:none;
  }
  td {
    border-top: 1px solid #ccc;
  }
  tbody tr {
    margin-bottom: 20px;
  }
  tbody tr:last-child {
    margin-bottom: 0;
  }
  tbody td:before {
    content: attr(data-label);
    font-weight: bold;
    display: inline-block;
    width: 50%;
    margin-left: 15px;
  }
}

以上代碼通過媒體查詢來對移動設備上的table進行樣式設置。通過將table、thead、tbody、th、td、tr設置為display:block和width: 100%等樣式,將table中的元素在移動設備中變成垂直排列,且全部佔滿一行。

因為在移動設備中,table的表頭容易被遮擋,所以需要通過將thead tr設置為display:none,來將表頭進行隱藏。同時,設置tbody tr和td之間的間距和邊框等樣式。最後通過before偽元素將每個單元格的內容向左偏移50%,在前面加上表頭的label,這樣達到表頭懸浮內容的效果。

四、結語

以上是對table表頭固定的三種實現方式。如果使用CSS或者JavaScript,我們可以自定義樣式和功能,而在移動設備上,需要採取特殊的CSS樣式來對table進行改造。需要根據自己的實際需求來選擇。希望本文能夠對您的學習和工作有所幫助。

原創文章,作者:QYWNC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/369376.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QYWNC的頭像QYWNC
上一篇 2025-04-12 13:01
下一篇 2025-04-12 13:01

相關推薦

  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Datatables固定表頭左右移動無效

    本文旨在解決使用Datatables插件中,固定表頭左右移動無效的問題,並提供代碼示例以供參考。 一、插件簡介 Datatables是一款強悍的jQuery表格插件,支持排序、搜索…

    編程 2025-04-29
  • 使用easypoi創建多個動態表頭

    本文將詳細介紹如何使用easypoi創建多個動態表頭,讓表格更加靈活和具有可讀性。 一、創建單個動態表頭 easypoi是一個基於POI操作Excel的Java框架,支持通過註解的…

    編程 2025-04-28
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論