HTML-Tabelle mit festen Headern?
Gibt es eine cross-browser CSS - /JavaScript-Technik zur Anzeige eines langen HTML-Tabelle die Spaltenüberschriften fixiert bleiben auf dem Bildschirm, und Blättern nicht mit der Tabelle Körper. Denken Sie an die "Fenster fixieren" - Effekt in Microsoft Excel.
Ich möchte in der Lage sein, um einen Bildlauf durch den Inhalt der Tabelle, aber immer in der Lage, um zu sehen, die Spaltenüberschriften an der Spitze.
InformationsquelleAutor der Frage Cheekysoft | 2009-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich auf der Suche nach einer Lösung für dieses für eine Weile und fand die meisten Antworten nicht funktioniert oder nicht passend für meine situation, also schrieb ich eine einfache Lösung mit jquery.
dies ist die lösungsskizze.
geklonte Kopie auf der Oberseite der original
unten ist der code. hier ist die demo Festen Header-Demo
diese Lösung funktioniert in chrome & ie. seit dieser basiert auf jquery sollte diese Arbeit in anderen jquery unterstützten Browsern auch.
InformationsquelleAutor der Antwort Mahes
Ich habe gerade die Zusammenstellung eines jQuery-plugin, das gültig, eine einzelne Tabelle mit gültigen HTML-Code (haben ein thead und tbody) und ausgegeben wird eine Tabelle mit festen Header, optional Feste Fußzeile kann entweder ein geklontes header oder Inhalte, die Sie gewählt haben (die Paginierung, etc.). Wenn Sie möchten, um die Vorteile von größeren Monitoren wird es auch die Größe der Tabelle ändern, wenn der browser in der Größe geändert wird. Ein weiteres feature ist die Möglichkeit, auf die Seite scrollen, wenn die Tabelle Spalten können nicht alle passen in Sicht.
http://fixedheadertable.com/
auf github: http://markmalek.github.com/Fixed-Header-Table/
Es ist extrem einfach zu setup, und Sie können Ihre eigenen Formatvorlagen für Sie. Es nutzt auch abgerundete Ecken in allen Browsern. Halten Sie im Verstand, die ich gerade veröffentlicht, es ist also technisch noch beta und es gibt nur sehr wenige kleinere Probleme, ich bin ausbügeln.
Es funktioniert in Internet Explorer 7, Internet Explorer 8, Safari, Firefox und Chrome.
InformationsquelleAutor der Antwort Mark
TL;DR
Wenn das Ziel von modernen Browsern und haben keine extravaganten styling-Wünsche: http://jsfiddle.net/dPixie/byB9d/3/ ... Obwohl die die "big four" - version ist ziemlich süß, wie gut diese version verarbeitet fluid Breite viel besser.
Gute Nachrichten, jeder!
Mit dem Fortschritt von HTML5 und CSS3 ist dies nun möglich, zumindest für moderne Browser. Die etwas hackish Implementierung, die ich kam mit, kann hier gefunden werden: http://jsfiddle.net/dPixie/byB9d/3/. Ich habe es getestet in FX 25, Chrome 31 und IE 10 ...
Relevanten HTML (legen Sie einen HTML5-doctype am oberen Rand des Dokuments):
Mit diesem CSS:
Aber wie?!
Einfach ausgedrückt haben Sie eine Tabellenüberschrift, die Sie optisch ausblenden, indem Sie es 0px hoch, enthält, die auch divs verwendet, wie in der fixed-header. Die Tabelle der Behälter genügend Raum läßt, um an der Spitze zu ermöglichen, für die absolut positionierten header, und die Tabelle mit Scrollbalken angezeigt, wie man es erwarten würde.
Der obige code verwendet die Klasse positioniert, um die position der Tabelle absolut (ich verwende Sie in einem popup-style-dialog), aber Sie können verwenden Sie es in den Fluss des Dokuments als auch durch das entfernen der
positioned
Klasse aus der container.Aber ...
Es ist nicht perfekt. Firefox weigert sich, die überschriftenzeile 0px (zumindest habe ich keinen Weg), aber hartnäckig hält es mindestens 4px ... Es ist nicht eine große problem, aber je nach styling wird es Durcheinander mit Ihren Grenzen etc.
Der Tisch ist auch mit einem faux-column-Ansatz, wo die hintergrund-Farbe der container selbst wird als Hintergrundbild für den header divs transparent sind.
Zusammenfassung
Alles in allem könnte es styling-Fragen je nach Ihren Anforderungen, insbesondere die Grenzen oder die komplizierten Hintergründe. Es könnte auch Probleme mit der Berechenbarkeit, habe ich nicht überprüft, es in einer Vielzahl von Browsern noch (bitte Kommentar mit deinen Erfahrungen, wenn du es ausprobieren), aber ich habe nichts gefunden, wie es, so dachte ich, war es das Wert posting sowieso ...
InformationsquelleAutor der Antwort Jonas Schubert Erlandsson
Ich habe auch ein plugin, das dieses Problem behebt. Mein Projekt - jQuery.floatThead hat schon seit über einem Jahr jetzt, und ist sehr ausgereift.
Es erfordert keine externen styles und erwartet nicht, dass Ihr Tisch gestylt werden, die in einer bestimmten Art und Weise. Es unterstützt IE8+ und FF/Chrome.
Derzeit (5/2018) es hat:
Viele (nicht alle) der Antworten hier sind schnelle hacks, kann das problem gelöst haben, eine person hatte aber funktioniert nicht für jede Tabelle.
Einige der anderen plugins sind alt und wahrscheinlich Super funktionieren mit dem IE, aber brechen auf FF und chrome.
InformationsquelleAutor der Antwort mkoryak
Alle versuche, dies zu lösen, von außen die CSS spec sind blasser Schatten von dem, was wir wirklich wollen: die Lieferung an das implizite Versprechen der THEAD.
Diese frozen-headers-für-einen-Tisch-Problem wurde mit einer offenen Wunde in HTML/CSS für eine lange Zeit.
In einer perfekten Welt, es wäre eine Reine css Lösung für dieses problem. Leider scheint es nicht zu sein, einen guten Platz.
Einschlägigen Normen-Diskussionen zu diesem Thema gehören:
UPDATE: Firefox ausgeliefert, position:sticky in der version 32. Jeder gewinnt!
InformationsquelleAutor der Antwort djsadinoff
Hier ist ein jQuery-plugin für Feste Tabellen-Kopfzeile. Es erlaubt, die gesamte Seite zu scrollen, das einfrieren der header, wenn es die Spitze erreicht. Es funktioniert auch mit twitter bootstrap-Tabellen.
Github repo: https://github.com/oma/table-fixed-header
Tut es nicht Blättern nur die Tabelle Inhalte. Schauen Sie zu anderen tools, für, dass, als einer der anderen Antworten. Sie entscheiden, was passt Ihrem Fall die beste ist.
InformationsquelleAutor der Antwort oma
Meisten Lösungen, die hier gepostet benötigen jQuery. Wenn Sie sich für eine framework-unabhängige Lösung versuchen Grid: http://www.matts411.com/post/grid/
Gehostet auf Github hier: https://github.com/mmurph211/Grid
Er fördert nicht nur die festen Header, es unterstützt auch Feste linken Spalten-und Fußzeilen, unter anderem.
InformationsquelleAutor der Antwort Matt
Ein einfaches jQuery-plugin
Dies ist eine variation Mahes' Lösung. Sie können es nennen, wie
$('table#foo').scrollableTable();
Die Idee ist:
thead
undtbody
in separatetable
Elementetable
imdiv.scrollable
div.scrollable
eigentlich scrollenCSS könnte:
Vorsichtsmaßnahmen
Das heißt, es funktioniert für meine Zwecke und du bist frei, zu nehmen und es ändern.
Hier ist das plugin:
InformationsquelleAutor der Antwort Nathan Long
🙂
Nicht-so-sauber, sondern rein HTML - /CSS-Lösung.
Aktualisiert für IE8+
JSFiddle-Beispiel
InformationsquelleAutor der Antwort Anton Matyulkov
Unterstützung für Feste Fußzeile
Ich streckte Nathan die Funktion auch unterstützen einen festen footer und max-height.
Auch die Funktion setzt die css selbst, Sie haben nur zu unterstützen, eine Breite.
Verwendung:
Feste Höhe:
Max Höhe (wenn der browser unterstützt die css 'max-height' - option):
Skript:
InformationsquelleAutor der Antwort rednaw
Zwei divs, eines für den Kopf, eine für die Daten. Stellen die Daten im div Scrollbar, und verwenden JavaScript, um die Breite der Spalten in der Kopfzeile, um die gleiche wie die Breite der Daten. Ich denke, die Daten Spalten-breiten behoben werden müssen, statt dynamic.
InformationsquelleAutor der Antwort cjk
Merke ich, die Frage erlaubt JavaScript, aber hier ist eine Reine CSS-Lösung, die ich erarbeitet, dass auch die Möglichkeit für die Tabelle horizontal erweitert. Getestet mit IE10 und neuesten Chrome-und Firefox-Browser. Ein link zu jsFiddle ist an der Unterseite.
HTML:
Und CSS:
http://jsfiddle.net/HNHRv/3/
InformationsquelleAutor der Antwort bzuillsmith
Verwenden Sie die neueste version von jQuery, und schließen Sie den folgenden javascript-code
InformationsquelleAutor der Antwort Prabhavith
Dies ist nicht eine exakte Lösung für die Feste header-Zeile, aber habe ich eine ziemlich geniale Methode der Wiederholung der Kopfzeile, in der langen Tabelle doch immer noch die Möglichkeit zu Sortieren. Dieses nette kleine option erfordert die jQuery
tablesorter
plugin. Hier ist, wie es funktioniert:html
Obvioiusly, meine Tabelle hat viel mehr Zeilen als diese. 193 um genau zu sein, eine Mutter, die Sie sehen können, wo die header-Zeile wiederholt. Die sich wiederholende Kopfzeile setup diese Funktion:
jQuery
InformationsquelleAutor der Antwort DevlshOne
Ich wünschte, ich hatte gefunden @Mark die Lösung von früher, aber ich ging und schrieb meine eigene, bevor ich Sie sah dies SO Frage...
Mine ist ein sehr leichtes jQuery-plugin, das unterstützt den festen header, footer, Spalten überspannt (colspan), skalieren, horizontales scrolling, und eine optionale Anzahl von Zeilen angezeigt werden, bevor das scrollen beginnt.
jQuery.scrollTableBody (GitHub)
Solange Sie haben eine Tabelle mit der richtigen
<thead>
<tbody>
und (optional)<tfoot>
alle Sie tun müssen, ist dieses:InformationsquelleAutor der Antwort Noah Heldman
Ich entwickelte eine einfache, geringes Gewicht jQuery-plug-in für die Konvertierung einer gut HTML-Tabelle, um eine scrollbare Tabelle mit festen header-Tabelle und Spalten.
Das plugin funktioniert gut übereinstimmen pixel-zu-pixel-Positionierung der Feste Abschnitt mit den scrollbaren Bereich. Zusätzlich, Sie könnte auch gefrieren und Anzahl der Spalten werden immer in der Ansicht beim scrollen horizontal.
Demo & Dokumentation: http://meetselva.github.io/fixed-table-rows-cols/
Github Repo: https://github.com/meetselva/fixed-table-rows-cols
Unten ist die Nutzung für eine einfache Tabelle mit festen header,
InformationsquelleAutor der Antwort Selvakumar Arumugam
Viele Leute scheinen sich um diese Antwort, fand ich es begraben in einer Antwort auf eine andere Frage hier: Synchronisieren Spaltenbreite zwischen Tabellen in zwei verschiedenen frames, etc
Der Dutzende von Methoden, die ich versucht haben, dieses ist die einzige Methode, die ich gefunden, die zuverlässig arbeitet, damit Sie einen Bildlauf unteren Tabelle mit der Kopfzeile der Tabelle haben die gleiche Breite.
Hier ist, wie ich es gemacht habe, zuerst habe ich verbessert auf der jsfiddle oben zu erstellen, diese Funktion, die funktioniert sowohl auf td und th (für den Fall, dass Ausflüge auf andere, die th für das styling Ihrer header-Zeilen).
Als Nächstes müssen Sie erstellen Sie zwei Tabellen, BEACHTEN Sie die Kopfzeile der Tabelle, sollte eine extra-TD, um Platz in der oberen Tabelle für die scrollbar, wie diese:
dann etwas wie:
Dies ist die einzige Lösung, die ich gefunden auf stackoverflow, das funktioniert out-of-viele ähnliche Fragen gepostet wurden, dass funktioniert in allen meinen Fällen.
Zum Beispiel habe ich versucht, das jquery stickytables-plugin, das funktioniert nicht mit durandal, und der google-code-Projekt hier https://code.google.com/p/js-scroll-table-header/issues/detail?id=2
Anderen Lösungen mit dem Klonen von Tabellen, schlechte Leistung, oder saugen und nicht in allen Fällen funktionieren.
Gibt ES KEINE NOTWENDIGKEIT FÜR DIESE zu KOMPLEXEN LÖSUNGEN, so STELLEN sich ZWEI TABELLEN, WIE DIE nachfolgenden BEISPIELE an UND NENNEN setHeaderTableWidth Funktion wie hier beschrieben und BOOM, SIND SIE FERTIG.
Wenn dies nicht für Sie arbeiten, haben Sie wahrscheinlich beim spielen mit dem css box-sizing-Eigenschaft und Sie müssen, um es korrekt. Es ist einfach zu Schraube bis Ihre css-Unfall gibt es viele Dinge, die schief gehen können, so dass nur bewusst sein/vorsichtig. DIESER ANSATZ FUNKTIONIERT FÜR MICH. Ich bin gespannt, ob es funktioniert für andere, lass es mich wissen. Viel Glück!
InformationsquelleAutor der Antwort pilavdzice
Hier ist eine Lösung, landeten wir arbeiten mit (um einige Grenzfälle und älteren IE-Versionen, die wir letztlich auch verblasst der Titelleiste auf Blättern, dann verblassen es zurück, wenn das scrollen beendet, aber in Firefox und Webkit-Browser diese Lösung funktioniert einfach. Es wird davon ausgegangen border-collapse: collapse.
Den Schlüssel zu dieser Lösung ist, dass, sobald Sie border-collapseCSS-Transformationen Arbeit auf die header, es ist also nur eine Frage der scroll-Ereignisse abfangen und Einstellung die Transformation korrekt. Sie nicht brauchen, um doppelte alles. Kurz, dieses Verhalten ordnungsgemäß umgesetzt wird, in den browser, es ist schwer vorstellbar, eine mehr Licht-Gewicht-Lösung.
JSFiddle: http://jsfiddle.net/podperson/tH9VU/2/
Es ist implementiert als eine einfache jQuery-plugin. Sie machen einfach Ihre thead ' s sticky mit einem Aufruf wie $('thead').sticky() und Sie hängen herum. Arbeitet für mehrere Tabellen auf einer Seite und Kopf Abschnitten auf halbem Weg nach unten den großen Tabellen.
InformationsquelleAutor der Antwort podperson
Hier ist eine verbesserte Antwort auf die eine geschrieben von Maximilian Hils.
Funktioniert im IE11 mit kein flackern überhaupt:
InformationsquelleAutor der Antwort user4617883
Ich mag Maximillian Hils' Antwort, aber ich hatte einige Probleme:
Um loszuwerden, das flackern, benutze ich einen timeout zu warten, bis der Benutzer beendet scrolling, dann habe ich mit dem transformieren - so ist der header nicht sichtbar beim scrollen.
Habe ich auch geschrieben, das mithilfe von jQuery, ein Vorteil ist, dass jQuery behandeln soll, die vendor-Präfixe für Sie
Dem Tisch, eingewickelt in ein div mit der Klasse
table-container-fixed
.Setze ich border-collapse zu trennen, weil wir sonst verlieren Grenzen während der übersetzung, und ich entfernen Sie den Rahmen auf den Tisch zu stoppen Inhalte, die nur über der Zelle, wo die Grenze war während des Blätterns.
Ich die
th
hintergrund weiß, zur Abdeckung der darunter liegenden Zellen, und ich fügen Sie eine Grenze, die mit der Tabelle übereinstimmt Grenze - die ist gestaltet mit Bootstrap und gescrollt angezeigt.InformationsquelleAutor der Antwort Colin
Für diejenigen, die versucht, das schöne Lösung gegeben durch Maximilian Hils, und habe es nicht geschafft, dass es funktioniert mit Internet Explorer, ich hatte das gleiche problem (IE 11) und finden Sie heraus, was das problem war.
Im IE 11 der Stil verwandeln (zumindest mit übersetzen) funktioniert nicht auf
<THEAD>
. Ich habe das Problem gelöst, indem Sie, anstatt Sie das Format anwenden, um alle<TH>
in einer Schleife. Das hat geklappt. Mein javascript sieht so ausIn meinem Fall wurde die Tabelle in einem GridView ASP.NET. Zuerst dachte ich, es war, denn es hatte kein
<THEAD>
aber selbst wenn ich gezwungen es zu haben, es hat nicht funktioniert. Dann fand ich heraus, was ich oben schrieb.Ist es eine sehr schöne und einfache Lösung. In Chrome ist es perfekt, auf Firefox ein bisschen ruckartig, und auf IE noch mehr ruckelt. Aber alles in allem eine gute Lösung.
InformationsquelleAutor der Antwort Magnus