Header tabel HTML selalu terlihat di atas jendela saat melihat tabel besar

169

Saya ingin dapat "men-tweak" presentasi tabel HTML untuk menambahkan fitur tunggal: ketika menggulir ke bawah melalui halaman sehingga tabel ada di layar tetapi baris header di luar layar, saya ingin header tetap ada terlihat di bagian atas area tampilan.

Ini akan secara konseptual seperti fitur "panel beku" di Excel. Namun, halaman HTML mungkin berisi beberapa tabel di dalamnya dan saya hanya ingin itu terjadi untuk tabel yang saat ini dalam tampilan, hanya saat sedang dalam tampilan.

Catatan: Saya telah melihat satu solusi di mana area data tabel dibuat dapat digulir sementara header tidak menggulir. Itu bukan solusi yang saya cari.

Craig McQueen
sumber
Apakah halaman Anda dirancang menggunakan tabel? Apakah tidak mungkin untuk mengonversikannya ke divs terlebih dahulu dan meninggalkan data tabel sendirian untuk tabel?
kunci
6
Saya baru-baru menulis sebuah plugin yang melakukan ini: programmingdrunk.com/floatThead
mkoryak
1
Selain solusi terpilih dan turunannya di bawah ini, plugin @mkoryak di atas juga cukup baik. Pastikan untuk melihatnya juga sebelum Anda selesai "berbelanja".
DanO
Terima kasih dan :) Saya punya beberapa fitur kick-ass yang direncanakan untuk rilis berikutnya juga
mkoryak
Saya kedua plugin @mkoryak floatThead - saya dapat dengan cepat mengintegrasikannya. Terima kasih banyak untuk plugin ini!
w5m

Jawaban:

67

Lihat jQuery.floatThead ( demo tersedia ) yang sangat keren, dapat bekerja dengan DataTables juga, dan bahkan dapat bekerja di dalam sebuah overflow: autowadah.

Hendy Irawan
sumber
ya itu bekerja dengan gulir horizontal, gulir jendela, gulir dalam dan mengubah ukuran jendela.
mkoryak
Bisakah Anda menambahkan biola dengan kode kerja? (Saya tahu bahwa ada di situs ...)
Michel Ayres
12
saya telah membangun halaman demo / dokumen yang sangat besar. Mengapa Anda perlu biola?
mkoryak
5
@MustModify stackoverflow bukan tempat yang baik untuk bertanya kepada saya. laporkan masalah pada github, meskipun itu hanya pertanyaan tentang cara membuatnya bekerja. Saya akan merespons di sana dalam waktu kurang dari sehari. Di sini sakit mungkin merespons hanya dalam waktu di bawah setahun :)
mkoryak
1
@MustModify berapa nilainya, tidak ada kelas di tabel dalam contoh yang relevan. Plugin tidak membutuhkan css atau kelas untuk berfungsi, seperti yang dikatakan dokumen saya.
mkoryak
135

Saya telah membuat solusi proof-of-concept menggunakan jQuery .

Lihat sampel di sini.

Saya sekarang mendapatkan kode ini dalam repositori bitbucket Mercurial . File utamanya adalah tables.html.

Saya mengetahui satu masalah dengan ini: jika tabel berisi jangkar, dan jika Anda membuka URL dengan jangkar yang ditentukan di browser, saat halaman dimuat, baris dengan jangkar mungkin akan dikaburkan oleh header mengambang.

Pembaruan 2017-12-11: Saya melihat ini tidak berfungsi dengan Firefox saat ini (57) dan Chrome (63). Tidak yakin kapan dan mengapa ini berhenti bekerja, atau bagaimana cara memperbaikinya. Tapi sekarang, saya pikir jawaban yang diterima oleh Hendy Irawan lebih unggul.

Craig McQueen
sumber
Saya membutuhkan ini untuk sesuatu yang saya lakukan. Sangat membantu, terima kasih. Dengan milik saya, saya tidak menggunakan jendela karena panel gulir adalah div dalam html. Jadi saya harus berubah floatingHeaderRow.css("top", Math.min(scrollTop - offset.top, $(this).height() - floatingHeaderRow.height()) + "px");untuk floatingHeaderRow.css("top", scrollTop + "px");seperti dengan kode Anda memiliki header tabel melompat di bagian bawah halaman untuk akhirnya menghilang dari halaman.
Nalum
1
Saya mencoba menerapkan ini di meja saya. Saya mengalami masalah dengan lebar tajuk. Data dalam baris adalah nilai yang ditarik dari db, karena itu adalah panjang acak. Sebelum Anda menggulir, tajuk berada dalam ukuran yang diwarisi otomatis, tetapi begitu Anda menggulir, tajuk ini mengubah ukuran tajuk untuk membungkus nama tajuk, dan dengan demikian lebarnya jauh lebih kecil sehingga tajuk tidak benar-benar melacak di atas masing-masing kolom. Bagaimana saya bisa memperbaiki masalah ini?
JonYork
Hmm saya tidak yakin, berdasarkan uraian Anda. Saya sarankan 1) jika memungkinkan, tunjukkan contoh online; 2) tanyakan sebagai pertanyaan di StackOverflow.
Craig McQueen
@ Jonork, saya punya masalah yang sama persis. Masalah saya menggunakan <td> dalam tajuk alih-alih <th> sehingga tidak dapat menerapkan lebar setiap kolom ke <th> yang tidak ada (lihat // Copy cell widths from original headerbagian dari kode). @Craig McQueen, harap edit jawaban Anda sehingga tidak ada orang lain yang melakukan kesalahan ini.
aexl
@CraigMcQueen Ketika saya menggunakan kode Anda yang luar biasa (terima kasih) itu pecah pada tabel kedua yang saya miliki yang ada di belakang tab lain (plugin tab jQuery). Adakah pikiran? Header ditempatkan di paling kiri, bukannya mengikuti kolom lokasi. Tetapi bekerja dengan baik di atas meja di tab jQuery pertama.
Richard Żak
68

Craig, saya sedikit memperbaiki kode Anda (di antara beberapa hal lainnya sekarang menggunakan posisi: diperbaiki) dan membungkusnya sebagai plugin jQuery.

Cobalah di sini: http://jsfiddle.net/jmosbech/stFcx/

Dan dapatkan sumbernya di sini: https://github.com/jmosbech/StickyTableHeaders

jmosbech
sumber
1
Ide bagus untuk membuat plugin jQuery. Beberapa pertanyaan: (1) Apakah ini bekerja dengan baik dengan pengguliran horizontal? (2) Bagaimana perilakunya ketika Anda menggulir ke bawah sehingga bagian bawah tabel bergulir dari bagian atas jendela? Contohnya tidak memungkinkan pengujian kasus-kasus itu.
Craig McQueen
Contoh jsfiddle Anda berfungsi baik dengan tablesorter, tetapi kode pada github tidak. Apakah Anda harus mengubah kode tablesorter?
ericslaw
Craig, pengguliran horizontal seharusnya tidak menjadi masalah karena header diposisikan kembali baik secara horizontal maupun vertikal pada scroll dan resize. Adapun pertanyaan kedua Anda: Header disembunyikan ketika tabel meninggalkan viewport.
jmosbech
Eric, itu aneh. Apakah Anda mencoba membuka /demo/tablesorter.htm dari Github? Saya belum mengubah kode tablesorter, tetapi untuk membuatnya berfungsi, Anda perlu menerapkan plugin StickyTableHeader sebelum tablesorter.
jmosbech
2
Pengguliran horizonal tidak berfungsi, setelah menggulir cukup jauh, perangkat diposisikan lebih jauh saat digulirkan di luar layar daripada saat diposisikan secara normal sebagai bagian dari tabel.
Nathan Phillips
16

Jika Anda menargetkan peramban modern yang memenuhi standar css3 ( Dukungan peramban: https://caniuse.com/#feat=css-sticky ), Anda dapat menggunakan position:sticky, yang tidak memerlukan JS dan tidak akan merusak tata letak tabel yang tidak selaras dan td dari kolom yang sama. Juga tidak membutuhkan lebar kolom tetap untuk berfungsi dengan benar.

Contoh untuk satu baris tajuk:

thead th
{
    position: sticky;
    top: 0px;
}

Untuk theads dengan 1 atau 2 baris, Anda dapat menggunakan sesuatu seperti ini:

thead > :last-child th
{
    position: sticky;
    top: 30px; /* This is for all the the "th" elements in the second row, (in this casa is the last child element into the thead) */
}

thead > :first-child th
{
    position: sticky;
    top: 0px; /* This is for all the the "th" elements in the first child row */
}

Anda mungkin perlu bermain sedikit dengan properti teratas anak terakhir yang mengubah jumlah piksel agar sesuai dengan ketinggian baris pertama (+ margin + perbatasan + padding, jika ada), sehingga baris kedua menempel tepat di bawah di bawah yang pertama.

Kedua solusi juga berfungsi bahkan jika Anda memiliki lebih dari satu tabel di halaman yang sama: thelemen dari masing-masing mulai lengket ketika posisi atasnya adalah yang ditunjukkan dalam definisi css dan hilang begitu saja ketika semua tabel bergulir ke bawah. Jadi, jika ada lebih banyak tabel, semuanya bekerja dengan indah dengan cara yang sama.

Mengapa menggunakan anak terakhir sebelum dan anak pertama setelah di css?

Karena aturan css di-render oleh browser dalam urutan yang sama ketika Anda menuliskannya ke dalam file css dan karena ini jika Anda hanya memiliki 1 baris ke dalam elemen thead, baris pertama secara bersamaan juga merupakan baris terakhir dan aturan anak-anak perlu untuk menimpa anak terakhir. Jika tidak, Anda akan memiliki offset baris 30 px dari margin atas yang saya kira tidak Anda inginkan.

Masalah yang diketahui dari posisi: sticky adalah bahwa itu tidak berfungsi pada elemen thead atau baris tabel: Anda harus menargetkan elemen th. Hopping masalah ini akan diselesaikan pada versi browser yang akan datang.

willy wonka
sumber
Contoh pertama tampaknya tidak berfungsi di Firefox (61). Namun, jika posisi sticky diatur pada thead, itu benar.
ewh
1
Anda bisa lakukan thead tr+tr thuntuk menargetkan baris kedua.
Teepeemm
5

Alternatif yang mungkin

js-floating-table-header

js-floating-table-header (Google Code)

Di Drupal

Saya punya situs Drupal 6. Saya berada di halaman "modul" admin, dan melihat tabel memiliki fitur yang tepat ini!

Melihat kode itu, tampaknya diimplementasikan oleh file bernama tableheader.js. Ini menerapkan fitur pada semua tabel dengan kelas sticky-enabled.

Untuk situs Drupal, saya ingin dapat menggunakan tableheader.jsmodul apa adanya untuk konten pengguna. tableheader.jstampaknya tidak ada di halaman konten pengguna di Drupal. Saya memposting pesan forum untuk bertanya bagaimana memodifikasi tema Drupal sehingga tersedia. Menurut tanggapan, tableheader.jsdapat ditambahkan ke tema Drupal menggunakan drupal_add_js()dalam tema template.phpsebagai berikut:

drupal_add_js('misc/tableheader.js', 'core');
Craig McQueen
sumber
Tautan Google Code Anda sangat berguna bagi saya, tahnks.
Vilius Gaidelis
5

Saya mengalami masalah ini baru-baru ini. Sayangnya, saya harus melakukan 2 tabel, satu untuk header dan satu untuk tubuh. Ini mungkin bukan pendekatan terbaik yang pernah ada tetapi begini:

<html>
<head>
    <title>oh hai</title>
</head>
<body>
    <table id="tableHeader">
        <tr>
            <th style="width:100px; background-color:#CCCCCC">col header</th>
            <th style="width:100px; background-color:#CCCCCC">col header</th>
        </tr>
    </table>
    <div style="height:50px; overflow:auto; width:250px">
        <table>
            <tr>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data1</td>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data1</td>
            </tr>
            <tr>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data2</td>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data2</td>
            </tr>
        </table>
    </div>
</body>
</html>

Ini bekerja untuk saya, itu mungkin bukan cara yang elegan tetapi tidak berhasil. Saya akan menyelidiki jadi lihat apakah saya bisa melakukan sesuatu yang lebih baik, tetapi memungkinkan untuk beberapa tabel.

Bacalah kepatutan melimpah untuk melihat apakah itu sesuai dengan kebutuhan Anda

Gab Royer
sumber
Hmm tidak berfungsi, saya akan mencoba untuk memperbaikinya, tetapi pendekatannya tetap, Anda harus menggunakan overflow: auto proprety
Gab Royer
Saya menghargai solusi Anda dan kesederhanaannya, namun dalam pertanyaan saya, saya berkata, "Catatan: Saya telah melihat satu solusi di mana area data tabel dibuat dapat digulir sementara header tidak menggulir. Itu bukan solusi yang saya cari."
Craig McQueen
@GabRoyer Halaman w3school, yang Anda referensikan, tidak ada.
Farhan
Mereka sepertinya telah memindahkannya. Diperbaiki
Gab Royer
Masalah lain dengan pendekatan ini adalah bahwa jika Anda perlu menyesuaikan beberapa kolom dengan konten lain, Anda berisiko untuk mematahkan penyelarasannya dengan header kolom yang sesuai. IMHO lebih baik menghadapi masalah ini dengan pendekatan yang memungkinkan pengelolaan konten yang dinamis dan menjaga keselarasan kolom dan kepala relatif. Jadi posisi IMHO = lengket adalah cara untuk pergi.
willy wonka
3

Ini benar-benar hal yang sulit untuk memiliki header yang lengket di meja Anda. Saya memiliki persyaratan yang sama tetapi dengan asp: GridView dan kemudian saya menemukan itu benar-benar dianggap memiliki header yang lengket di gridview. Ada banyak solusi yang tersedia dan saya butuh 3 hari untuk mencoba semua solusi tetapi tidak ada satupun yang bisa memuaskan.

Masalah utama yang saya hadapi dengan sebagian besar solusi ini adalah masalah penyelarasan. Saat Anda mencoba membuat tajuk melayang, entah bagaimana penyelarasan sel tajuk dan sel tubuh keluar jalur.

Dengan beberapa solusi, saya juga mendapat masalah tumpang tindih tumpang tindih dengan beberapa baris tubuh pertama, yang menyebabkan baris tubuh tersembunyi di belakang tajuk mengambang.

Jadi sekarang saya harus menerapkan logika saya sendiri untuk mencapai ini, meskipun saya juga tidak menganggap ini sebagai solusi yang sempurna tetapi ini juga bisa bermanfaat bagi seseorang,

Di bawah ini adalah tabel sampel.

<div class="table-holder">
        <table id="MyTable" cellpadding="4" cellspacing="0" border="1px" class="customerTable">
            <thead>
                <tr><th>ID</th><th>First Name</th><th>Last Name</th><th>DOB</th><th>Place</th></tr>
            </thead>
            <tbody>
                <tr><td>1</td><td>Customer1</td><td>LastName</td><td>1-1-1</td><td>SUN</td></tr>
                <tr><td>2</td><td>Customer2</td><td>LastName</td><td>2-2-2</td><td>Earth</td></tr>
                <tr><td>3</td><td>Customer3</td><td>LastName</td><td>3-3-3</td><td>Mars</td></tr>
                <tr><td>4</td><td>Customer4</td><td>LastName</td><td>4-4-4</td><td>Venus</td></tr>
                <tr><td>5</td><td>Customer5</td><td>LastName</td><td>5-5-5</td><td>Saturn</td></tr>
                <tr><td>6</td><td>Customer6</td><td>LastName</td><td>6-6-6</td><td>Jupitor</td></tr>
                <tr><td>7</td><td>Customer7</td><td>LastName</td><td>7-7-7</td><td>Mercury</td></tr>
                <tr><td>8</td><td>Customer8</td><td>LastName</td><td>8-8-8</td><td>Moon</td></tr>
                <tr><td>9</td><td>Customer9</td><td>LastName</td><td>9-9-9</td><td>Uranus</td></tr>
                <tr><td>10</td><td>Customer10</td><td>LastName</td><td>10-10-10</td><td>Neptune</td></tr>
            </tbody>
        </table>
    </div>

Catatan : Tabel ini dibungkus menjadi DIV dengan atribut kelas yang sama dengan 'table-holder'.

Di bawah ini adalah skrip JQuery yang saya tambahkan di header halaman html saya.

<script src="../Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="../Scripts/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        //create var for table holder
        var originalTableHolder = $(".table-holder");
        // set the table holder's with
        originalTableHolder.width($('table', originalTableHolder).width() + 17);
        // Create a clone of table holder DIV
        var clonedtableHolder = originalTableHolder.clone();

        // Calculate height of all header rows.
        var headerHeight = 0;
        $('thead', originalTableHolder).each(function (index, element) {
            headerHeight = headerHeight + $(element).height();
        });

        // Set the position of cloned table so that cloned table overlapped the original
        clonedtableHolder.css('position', 'relative');
        clonedtableHolder.css('top', headerHeight + 'px');

        // Set the height of cloned header equal to header height only so that body is not visible of cloned header
        clonedtableHolder.height(headerHeight);
        clonedtableHolder.css('overflow', 'hidden');

        // reset the ID attribute of each element in cloned table
        $('*', clonedtableHolder).each(function (index, element) {
            if ($(element).attr('id')) {
                $(element).attr('id', $(element).attr('id') + '_Cloned');
            }
        });

        originalTableHolder.css('border-bottom', '1px solid #aaa');

        // Place the cloned table holder before original one
        originalTableHolder.before(clonedtableHolder);
    });
</script>

dan akhirnya di bawah ini adalah kelas CSS untuk tujuan pewarnaan.

.table-holder
{
    height:200px;
    overflow:auto;
    border-width:0px;    
}

.customerTable thead
{
    background: #4b6c9e;        
    color:White;
}

Jadi seluruh ide dari logika ini adalah untuk menempatkan tabel ke dalam div pemegang tabel dan membuat klon dari pemegang itu di sisi klien ketika halaman dimuat. Sekarang sembunyikan isi tabel di dalam pemegang klon dan posisikan bagian tajuk yang tersisa ke tajuk asli.

Solusi yang sama juga berfungsi untuk asp: gridview, Anda perlu menambahkan dua langkah lagi untuk mencapai ini di gridview,

  1. Dalam acara OnPrerender objek gridview di halaman web Anda, setel bagian tabel dari baris header sama dengan TableHeader.

    if (this.HeaderRow != null)
    {
        this.HeaderRow.TableSection = TableRowSection.TableHeader;
    }
  2. Dan bungkus grid Anda menjadi <div class="table-holder"></div>.

Catatan : jika tajuk Anda memiliki kontrol yang dapat diklik maka Anda mungkin perlu menambahkan beberapa skrip jQuery untuk meneruskan peristiwa yang dibesarkan dalam tajuk yang dikloning ke tajuk asli. Kode ini sudah tersedia di plugin sticky-header jQuery yang dibuat oleh jmosbech

pgcan
sumber
+1 untuk upaya yang baik, tetapi untuk tabel besar dengan banyak data, cukup buruk untuk mengkloning semuanya ... Saya membayangkan itu akan menggandakan waktu pemuatan
khaverim
2

Menggunakan display: fixedpada theadbagian harus berfungsi, tetapi untuk itu hanya bekerja pada tabel saat ini dalam tampilan, Anda akan memerlukan bantuan JavaScript. Dan itu akan rumit karena perlu mencari tahu tempat menggulir dan lokasi elemen relatif terhadap viewport, yang merupakan salah satu area utama ketidakcocokan browser.

Lihatlah kerangka kerja JavaScript yang populer (jQuery, MooTools, YUI, dll.) Untuk melihat apakah mereka dapat melakukan apa yang Anda inginkan atau membuatnya lebih mudah untuk melakukan apa yang Anda inginkan.

ahli statika
sumber
1
Terima kasih atas sarannya. Saya memang membuat solusi menggunakan jQuery — lihat jawaban saya.
Craig McQueen
Saya mencoba ini dan saya pikir Anda maksud posisi daripada tampilan, tetapi tidak bekerja untuk thead di chome.
ericslaw
@ ericslaw Ack - ya saya maksudkan position: fixed. Maaf itu tidak berfungsi di Chrome.
Statika
mengacaukan tajuk saya dengan mengabaikan gaya lebar
pavel_kazlou
2

Jika Anda menggunakan tabel layar penuh Anda mungkin tertarik untuk mengatur th untuk menampilkan: diperbaiki; dan atas: 0; atau coba pendekatan yang sangat mirip melalui css.

Memperbarui

Cukup cepat buat solusi yang berfungsi dengan iframe (html4.0). Contoh ini BUKAN kesesuaian standar, namun Anda dapat dengan mudah memperbaikinya:

outer.html

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">     
    <head>      
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   
        <title>Outer</title>
  <body>
    <iframe src="test.html" width="200" height="100"></iframe>
    </body>
</html> 

test.html

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">     
    <head>      
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   
        <title>Floating</title>
    <style type="text/css">
      .content{
        position:relative; 
      }

      thead{
        background-color:red;
        position:fixed; 
        top:0;
      }
    </style>
  <body>
    <div class="content">      
      <table>
        <thead>
          <tr class="top"><td>Title</td></tr>
        </head>
        <tbody>
          <tr><td>a</td></tr>
          <tr><td>b</td></tr>
          <tr><td>c</td></tr>
          <tr><td>d</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
        </tbody>
      </table>
    </div>
    </body>
</html> 
merkuro
sumber
@ a_m0d, benar ... tetapi permintaan itu terdengar membingungkan. Entah kita salah paham, atau si penanya tidak sepenuhnya mengerti apa yang dia inginkan.
Sampson
Berikut adalah solusi lain menggunakan beberapa javascript imaputz.com/cssStuff/bigFourVersion.html
merkuro
2

Jawaban paling sederhana hanya menggunakan CSS: D !!!

table {
  /* Not required only for visualizing */
  border-collapse: collapse;
  width: 100%;
}

table thead tr th {
  /* you could also change td instead th depending your html code */
  background-color: green;
  position: sticky;
  z-index: 100;
  top: 0;
}

td {
  /* Not required only for visualizing */
  padding: 1em;
}
<table>
  <thead>
    <tr>
      <th>Col1</th>
      <th>Col2</th>
      <th>Col3</th>
    </tr>
  </thead>
  <tbody>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>david</td>
       <td>castro</td>
       <td>rocks!</td>
     </tr>
  </tbody>
</table>

David Castro
sumber
1
Terima kasih David, ini adalah pendekatan terbaik yang saya temukan dalam pertanyaan ini
Tomasz Smykowski
0

Itu bukti dari konsep Anda membuat rasanya! Namun saya juga menemukan plugin jQuery ini yang tampaknya berfungsi dengan sangat baik. Semoga ini bisa membantu!

Marco
sumber
Itu terlihat seperti mengimplementasikan fitur yang berbeda . Seperti yang saya katakan dalam pertanyaan awal saya: "Catatan: Saya telah melihat satu solusi di mana area data tabel dibuat dapat digulir sedangkan header tidak menggulir. Itu bukan solusi yang saya cari."
Craig McQueen
2
mencoba plugin yang Anda sebutkan tadi mengacaukan tajuk tabel saya. Tidak dapat menggunakannya.
pavel_kazlou
0

Ini membuat frustasi karena apa yang berfungsi dengan baik di satu browser tidak bekerja di browser lain. Berikut ini berfungsi di Firefox, tetapi tidak di Chrome atau IE:

<table width="80%">

 <thead>

 <tr>
  <th>Column 1</th>
  <th>Column 2</th>
  <th>Column 3</th>
 </tr>

 </thead>

 <tbody style="height:50px; overflow:auto">

  <tr>
    <td>Cell A1</td>
    <td>Cell B1</td>
    <td>Cell C1</td>
  </tr>

  <tr>
    <td>Cell A2</td>
    <td>Cell B2</td>
    <td>Cell C2</td>
  </tr>

  <tr>
    <td>Cell A3</td>
    <td>Cell B3</td>
    <td>Cell C3</td>
  </tr>

 </tbody>

</table>
Peter Dow
sumber
4
Saya mencobanya di Firefox 8.0, dan sepertinya tidak melakukan apa-apa. Apa fungsinya?
Craig McQueen
Apa px? Apakah unit warisan itu digunakan oleh orang-orang pada tanggal 90 ketika perangkat layar digunakan untuk memiliki 72 dpi?
ceving
Saya setuju: Sangat frustasi, Sayangnya pengembang browser tidak menghormati standar dalam setiap situasi ... dan beberapa tahun yang lalu bahkan lebih buruk! Sekarang beberapa masalah telah diselesaikan dan lebih banyak peramban berperilaku dengan cara yang lebih standar, tetapi banyak langkah masih harus dilakukan: mari berharap dan berdoa :-)
willy wonka