Ich schreibe eine Seite, auf der ich eine HTML-Tabelle benötige, um eine festgelegte Größe beizubehalten. Ich brauche die Überschriften oben in der Tabelle, um jederzeit dort zu bleiben, aber ich brauche auch den Hauptteil der Tabelle, um zu scrollen, egal wie viele Zeilen zur Tabelle hinzugefügt werden. Denken Sie an eine Mini-Version von Excel. Dies scheint eine einfache Aufgabe zu sein, aber fast jede Lösung, die ich im Web gefunden habe, hat einige Nachteile. Wie kann ich das lösen?
javascript
html
css
html-table
Minze
quelle
quelle
Antworten:
Ich musste die gleiche Antwort finden. Das beste Beispiel, das ich gefunden habe, ist http://www.cssplay.co.uk/menu/tablescroll.html - ich habe festgestellt, dass Beispiel 2 für mich gut funktioniert hat. Sie müssen die Höhe der inneren Tabelle mit Java Script festlegen, der Rest ist CSS.
quelle
Ich fand DataTables ziemlich flexibel. Während die Standardversion auf jquery basiert, gibt es auch ein AngularJs-Plugin .
quelle
Ich sah Sean Haddys hervorragende Lösung für eine ähnliche Frage und nahm mir die Freiheit , einige Änderungen vorzunehmen :
aria-hidden="false"
Sean machte das schwere Heben. Vielen Dank auch an Matt Burland für den Hinweis, dass der Fuß unterstützt werden muss.
Überzeugen Sie sich selbst unter http://jsfiddle.net/jhfrench/eNP2N/
quelle
Haben Sie versucht, Thead und Tbody zu verwenden und eine feste Höhe für Tbody mit Überlauf festzulegen: Scrollen?
Was sind Ihre Zielbrowser?
EDIT: In Firefox hat es (fast) gut funktioniert - das Hinzufügen der vertikalen Bildlaufleiste hat auch die Notwendigkeit einer horizontalen Bildlaufleiste verursacht - igitt. IE stellte einfach die Höhe jedes td auf das ein, was ich die Höhe von tbody angegeben hatte, um zu sein. Hier ist das Beste, was ich mir vorstellen kann:
quelle
overflow-x: hidden;
undoverflow-y: auto
auch helfen.Was Sie brauchen ist:
1) einen Tabellenkörper mit begrenzter Höhe haben, da der Bildlauf nur dann erfolgt, wenn der Inhalt größer als das Bildlauffenster ist. Die
tbody
Größe kann jedoch nicht festgelegt werden, und Sie müssen sie als Folgendes anzeigenblock
:2) Synchronisieren Sie die Spaltenbreiten des Tabellenkopfs und des Tabellenkörpers erneut , um letztere
block
zu einem nicht verwandten Element zu machen. Die einzige Möglichkeit, dies zu tun, besteht darin, die Synchronisation zu simulieren, indem für beide dieselbe Spaltenbreite erzwungen wird .Da es
tbody
sich jedoch um einblock
Jetzt handelt, kann es sich nicht mehr wie ein Jetzt verhaltentable
. Da Sie immer noch eintable
Verhalten benötigen , um Ihre Spalten korrekt anzuzeigen, besteht die Lösung darin, jede Ihrer Zeilen als einzelnetable
s anzuzeigen :(Beachten Sie, dass Sie mit dieser Technik keine Zeilen mehr überspannen können.)
Sobald dies erledigt ist, können Sie die Spaltenbreite so erzwingen, dass sie in
thead
und die gleiche Breite hattbody
. Das konnte man nicht:th, td { width: 20%; }
wenn Sie beispielsweise 5 Spalten haben), was praktischer ist (keine Notwendigkeit, die Breite für jede Tabelleninstanz festzulegen), aber für keine Spaltenanzahl funktionieren kannIch bevorzuge die letzte Option, die hinzugefügt werden muss:
Hier finden Sie eine Demo hier , aus der Antwort auf gegabelt diese Frage .
quelle
Bearbeiten: Dies ist eine sehr alte Antwort und dient dem Wohlstand, nur um zu zeigen, dass sie bereits in den 2000er Jahren unterstützt wurde, aber fallen gelassen wurde, weil die Browser-Strategie in den 2010er Jahren darin bestand, die W3C-Spezifikationen zu respektieren, selbst wenn einige Funktionen entfernt wurden: Bildlauftabelle mit festem Header / footer wurde ungeschickt vor HTML5 angegeben.
Schlechte Nachrichten
Leider gibt es keine elegante Möglichkeit, mit scrollbaren Tabellen mit festem
thead
/ umzugehen,tfoot
da HTML / CSS-Spezifikationen für diese Funktion nicht sehr klar sind .Erklärungen
Obwohl HTML 4.01 Spezifikation sagt
thead
/tfoot
/tbody
verwendet werden , um Tabellenkörper Spirale (eingeführt?):Die funktionierende Funktion für scrollbare Tabellen in FF 3.6 wurde in FF 3.7 entfernt, da sie als Fehler angesehen wird, da sie nicht den HTML / CSS-Spezifikationen entspricht. Siehe dies und das Kommentare zu FF-Fehlern.
Mozilla Developer Network-Tipp
Unten finden Sie eine vereinfachte Version des MDN. Nützliche Tipps für scrollbare Tabellen finden
Sie auf dieser archivierten Seite oder in der aktuellen französischen Version
Allerdings sagt MDN auch, dass dies unter FF nicht mehr funktioniert :-(
Ich habe auch auf IE8 getestet => Tabelle ist auch nicht scrollbar: - ((
quelle
Ich bin mir nicht sicher, ob sich jemand noch damit befasst, aber ich habe dies zuvor getan, indem ich zwei Tabellen verwendet habe, um die einzelne Originaltabelle anzuzeigen - die erste nur die ursprüngliche Tabellentitelzeile und keine Tabellenkörperzeilen (oder eine leere Textzeile) es validieren).
Die zweite befindet sich in einem separaten Div und hat keinen Titel und nur die ursprünglichen Tabellenkörperzeilen. Das separate Div wird dann scrollbar gemacht.
Die zweite Tabelle in ihrem div befindet sich direkt unter der ersten Tabelle im HTML-Code und sieht aus wie eine einzelne Tabelle mit einem festen Header und einem scrollbaren unteren Bereich. Ich habe dies nur in Safari, Firefox und IE getestet (jeweils die neuesten Versionen im Frühjahr 2010), aber es hat in allen funktioniert.
Das einzige Problem war, dass die erste Tabelle ohne Text nicht validiert werden konnte (W3.org-Validator - XHTML 1.0 strict), und wenn ich eine ohne Inhalt hinzufügte, verursachte dies eine leere Zeile. Sie können CSS verwenden, um dies nicht sichtbar zu machen, aber es verbraucht immer noch Platz auf der Seite.
quelle
display: none;
, es sei denn, Sie meinen Platz in der Quelle ..?Diese Lösung funktioniert in Chrome 35, Firefox 30 und IE 11 (andere Versionen nicht getestet)
Es ist reines CSS: http://jsfiddle.net/ffabreti/d4sope1u/
Alles wird angezeigt: Block, Tisch braucht eine Höhe:
quelle
Dies bereitete mir große Kopfschmerzen beim Versuch, ein solches Raster für eine unserer Anwendungen zu implementieren. Ich habe all die verschiedenen Techniken ausprobiert, aber sie hatten jeweils Probleme. Am nächsten kam ich mit einem jQuery-Plugin wie Flexigrid ( Alternativen finden Sie unter http://www.ajaxrain.com ), aber dies scheint keine 100% breiten Tabellen zu unterstützen, was ich brauchte.
Am Ende rollte ich meine eigenen; Firefox unterstützt Bildlaufelemente
tbody
, daher habe ich den Browser beschnüffelt und geeignetes CSS (Einstellungshöhe, Überlauf usw.) verwendet, um diesen Bildlauf durchzuführen. Für andere Browser habe ich zwei separate Tabellen verwendet,table-layout: fixed
die eine Größe verwenden Algorithmus, der garantiert, dass die angegebene Größe nicht überläuft (normale Tabellen werden erweitert, wenn der Inhalt zu breit ist, um zu passen). Indem ich beiden Tabellen identische Breiten gab, konnte ich ihre Spalten in eine Reihe bringen. Ich wickelte den zweiten in ein Div-Set, um zu scrollen, und mit ein bisschen Jiggery Pokery mit Rändern usw. gelang es mir, das gewünschte Erscheinungsbild zu erhalten.Tut mir leid, wenn diese Antwort an manchen Stellen etwas vage klingt; Ich schreibe schnell, da ich nicht viel Zeit habe. Hinterlasse einen Kommentar, wenn ich weiter expandieren soll!
quelle
Hier ist ein Code, der (zumindest) wirklich für IE und FF funktioniert:
Ich habe den ursprünglichen Code geändert, um ihn klarer zu machen und um ihn in IE und auch in FF einwandfrei funktionieren zu lassen.
Originalcode HIER
quelle
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Hier ist meine Alternative. Es werden auch verschiedene DIVs für Kopf-, Körper- und Fußzeile verwendet, die jedoch für die Größenänderung von Fenstern und für das Suchen, Scrollen, Sortieren, Filtern und Positionieren synchronisiert sind:
Meine CD-Listen
Klicken Sie auf die Schaltflächen Jazz, Klassik ..., um die Tabellen anzuzeigen. Es ist so eingerichtet, dass es auch dann ausreichend ist, wenn JavaScript deaktiviert ist.
Scheint in IE, FF und WebKit (Chrome, Safari) in Ordnung zu sein.
quelle
Entschuldigung, ich habe nicht alle Antworten auf Ihre Frage gelesen.
Ja hier das was du willst (ich habe es schon gemacht)
Sie können zwei Tabellen mit demselben Klassennamen für eine ähnliche Gestaltung verwenden, eine nur mit Tabellenkopf und eine andere mit Ihren Zeilen. Legen Sie diese Tabelle nun in ein Div mit fester Höhe mit Überlauf-y: Auto ODER Bildlauf.
quelle
Das Hauptproblem, das ich mit den obigen Vorschlägen hatte, war das Einfügen von tablesorter.js UND das Verschieben der Header für eine Tabelle, die auf eine bestimmte maximale Größe beschränkt war. Ich stolperte schließlich über das Plugin jQuery.floatThead, das die schwebenden Header bereitstellte und das Sortieren weiter funktionierte.
Es hat auch eine schöne Vergleichsseite, die sich mit ähnlichen Plugins zeigt .
quelle
Live JsFiddle
Es ist nur mit HTML & CSS möglich
quelle
Wenn es in Ordnung ist, JavaScript zu verwenden, ist dies meine Lösung. Erstellen Sie eine Tabelle mit fester Breite für alle Spalten (Pixel!). Fügen Sie die Klasse Scrollify zur Tabelle hinzu und fügen Sie dieses Javascript + jquery 1.4.x hinzu. Stellen Sie die Höhe in CSS oder Stil ein!
Getestet in: Opera, Chrome, Safari, FF, IE5.5 ( episches Skript schlägt fehl ), IE6, IE7, IE8, IE9
Bearbeiten: Feste Höhe.
quelle
Ich mache dies mit Javascript (keine Bibliothek) und CSS - der Tabellenkörper scrollt mit der Seite, und die Tabelle muss keine feste Breite oder Höhe haben, obwohl jede Spalte eine Breite haben muss. Sie können die Sortierfunktion auch beibehalten.
Grundsätzlich:
Erstellen Sie in HTML Container-Divs, um die Tabellenkopfzeile und den Tabellenkörper zu positionieren, und erstellen Sie ein "mask" -Div, um den Tabellenkörper auszublenden, wenn er am Header vorbeirollt
Konvertieren Sie in CSS die Tabellenteile in Blöcke
Ermitteln Sie in Javascript die Tabellenbreite und passen Sie die Breite der Maske an ... ermitteln Sie die Höhe des Seiteninhalts ... messen Sie die Bildlaufposition ... bearbeiten Sie CSS, um die Position der Tabellenkopfzeile und die Maskenhöhe festzulegen
Hier ist das Javascript und ein jsFiddle DEMO.
quelle
Für mich hat nichts im Zusammenhang mit dem Scrollen wirklich funktioniert, bis ich die Breite aus dem Tabellen-CSS entfernt habe. Ursprünglich sah die Tabelle CSS folgendermaßen aus:
Sobald ich die Breite entfernt habe: 100%; Alle Bildlauffunktionen funktionierten.
quelle
Wenn Sie niedrig genug Standards haben;) können Sie eine Tabelle, die nur einen Header enthält, direkt über einer Tabelle platzieren, die nur einen Body enthält. Es wird nicht horizontal gescrollt, aber wenn Sie das nicht brauchen ...
quelle