MiePie94: Mehrere Theads in einer Tabellen nacheinander fixieren

Hallo,

ich habe folgendes Problem und finde im Netz keine Lösung dazu. Ich habe eine Tabelle mit mehreren Theads. Diese Theads sollen wenn man im Tbody scrollt im oberen bereich fixiert bleiben. Wenn dann der zweite Thead erscheint soll dieser dann oben fixiert bleiben und immer so weiter. Leider schaffe ich es nur, dass immer nur der erste Thead fixiert bleibt.

Da ich leider sehr wenig Erfahrung in Jquerry und JS habe, habe ich daher ein Script aus dem Web verwendet, der mein Thead fixiert.

Hat einer eine Idee wie man dieses Problem lösen kann?

akzeptierte Antworten

  1. Hi,

    Ich habe eine Tabelle mit mehreren Theads.

    Sind denn mehrere thead-Elemente in einer Tabelle erlaubt?

    In der (inzwischen zugegebenermaßen uralten) HTML 4.01 war nur maximal ein thead erlaubt (auch nur maximal ein tfoot, tbody dagegen war mindestens einer Pflicht und mehrere erlaubt) …

    cu,
    Andreas a/k/a MudGuard

    1. Du hast Recht. Normalerweise hat eine Tabelle nur ein Thead und ein Tfoot. Aber meine "Monster-Tabelle" was eine Statisitk anzeigen soll hat mehrere Theads und ist sowieso nicht valide. Ich soll diese Monster-Tabelle nur fixieren. Also Theads nacheinander fixieren und die erste Spalte soll fixiert bleiben.

  2. @@MiePie94

    Ich habe eine Tabelle mit mehreren Theads.

    Wie MudGuards schlammiges wachsames Auge schon bemerkte: gibt’s nicht.

    Diese Theads sollen wenn man im Tbody scrollt im oberen bereich fixiert bleiben. Wenn dann der zweite Thead erscheint soll dieser dann oben fixiert bleiben und immer so weiter.

    Meinst du das so in der Art?

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
    1. Hallo Gunnar,

      zum Verständnis für Web-Einsteiger sollte man darauf hinweisen, dass die Magie in der CSS-Eigenschaft position:sticky der th Elemente stickt, äh, steckt.

      Was ich nur nicht verstehe, ist dieser Satz dazu aus unserem Wiki (MDN schreibt ähnliches):

      Elemente mit dieser Eigenschaft behalten ihre Position im Elementfluss, bis sie das obere oder untere Seitenende erreichen und dort „kleben“ bleiben.

      Am unteren Seitenende beobachte ich den Effekt nicht.

      Rolf

      --
      sumpsi - posui - clusi
      1. Hallo

        Was ich nur nicht verstehe, ist dieser Satz dazu aus unserem Wiki (MDN schreibt ähnliches):

        Elemente mit dieser Eigenschaft behalten ihre Position im Elementfluss, bis sie das obere oder untere Seitenende erreichen und dort „kleben“ bleiben.

        Am unteren Seitenende beobachte ich den Effekt nicht.

        In Gunnars Beispielcode ist ja für th auch top: 0; angegeben. Also kleben die entsprechenden Elemente „nur“ oben.

        Tschö, Auge

        --
        Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
        Kleine freie Männer von Terry Pratchett
        1. Hallo Auge,

          wie gut, dass wir drüber reden. Zum Dokulesen hatte ich keine Zeit.

          Mit bottom:0 klappt's übrigens schlechter, da stimmt die z-order nicht und man sieht nur den Z Header.

          Rolf

          --
          sumpsi - posui - clusi
          1. Hallo

            wie gut, dass wir drüber reden. Zum Dokulesen hatte ich keine Zeit.

            Das habe auch ich nicht getan. Ich hatte mich nur über deinen Einwurf gewundert und mir daraufhin Gunnars Code angeschaut.

            Mit bottom:0 klappt's übrigens schlechter, da stimmt die z-order nicht und man sieht nur den Z Header.

            Was meinst du mit „Z Header“ und warum sollte die z-order nicht mehr stimmen? Kannst du bitte mal ein Beispiel skizzieren?

            Mir fällt übrigens außer dem Footer, der, wenn er in den Viewport hineinkommt, unten stehen bleiben soll, keine Anwendung für ein unter Umständen unten feststehendes Element ein. Aber das will ja nichts heißen.

            Tschö, Auge

            --
            Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
            Hohle Köpfe von Terry Pratchett
            1. Hallo Auge,

              ich meine die Row mit "Z" als th Inhalt. Bei bottom:0 ist von den sticky-Elementen nur diese sichtbar, weil alle th den gleichen z-index haben und darum der in der z-order oben ist, der im HTML als letztes steht. Um unten die Row anzuzeigen, die der untersten sichtbaren Row folgt (was das Äquivalent zum sticky header wäre), müsste man die z-order auf den Kopf stellen. D.h. die z-order an sich ist natürlich ok, aber um die Methode am unteren Rand anwenden zu können, passt sie nicht.

              Einen Anwendungsfall habe ich dafür gerade auch nicht, mir fiel einfach nur auf dass dieser elegante Trick, der die sticky headers einfach alle oben stapelt, ausschließlich am oberen (und linken) Rand funktioniert.

              Rolf

              --
              sumpsi - posui - clusi
    2. Genau sowas habe ich gesucht. Vielen Dank schonmal. Werde ich einmal bei mir einbauen. Das andere Problem was ich noch habe ist, dass die erste Spalte fixiert sein soll wenn man nach rechts scrollt. Habt ihr da auch eine Lösung? Die bisherigen Lösungen im Web sind nicht sehr vielversprechend.

      1. Ich habe das Problem dank position: sticky gelöst. Wie ihr hier sehen könnt.

        Ich habe mehrere Theads (ja ich weiß, dass mehrere Theads nicht valide sind, aber für meinen Fall hat die Tabelle mehrere Theads) fixiert und die erste Spalte bleibt nun auch fixiert.

        Ich danke für die schnelle Hilfe und vielleicht braucht das jemand nochmal. Daher habe ich das Beispiel hier nochmal veröffentlich.

        1. Hallo,

          hast du dir das schon mal im iPhone angesehen?

          Gruß
          Jürgen

          1. Nein habe ich noch nicht. Gibt es Darstellungsprobleme?

            1. Hallo,

              siehe https://caniuse.com/#search=sticky.

              Gruß
              Jürgen

              1. Hey,

                du hast Recht. Safari scheint diese CSS Eigenschaft nicht zu haben. Selbst mit -webkit-sticky scheint dieses Problem nicht zu lösen. Ich habe diese Seite gefunden. Dieses Plugin hat mir geholfen und funktioniert jetzt auch in Safari.

                Ich habe noch nicht geschaut wie sich der IE / Edge verhält dazu. Außerdem habe ich kein Iphone um dies mobil zu testen.

                1. @@MiePie94

                  Safari scheint diese CSS Eigenschaft nicht zu haben.

                  Doch, natürlich unterstützt Safari das – mit Präfix. Den hab ich jetzt im Codepen ergänzt.

                  Ich würde denken, dass das sogar von Apple kommt. Das Kontaktverzeichnis auf dem iPhone bspw. verhält sich genauso wie die gezeigte Tabelle.

                  LLAP 🖖

                  --
                  „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
                  1. Hallo Gunnar,

                    in meinem 6er wird immer noch die ganze Tabelle gescrollt. Da ist nichts „sticky“.

                    Gruß
                    Jürgen

                    1. @@JürgenB

                      in meinem 6er wird immer noch die ganze Tabelle gescrollt. Da ist nichts „sticky“.

                      Safari 6 auf macOS? Laut Can I Use geht’s da ab 6.1.

                      Ist die Tabelle lesbar? Gut. Sticky ist progressive enhancement für moderne Browser.

                      LLAP 🖖

                      --
                      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
                      1. Hallo Gunnar,

                        in meinem 6er wird immer noch die ganze Tabelle gescrollt. Da ist nichts „sticky“.

                        Safari 6 auf macOS? Laut Can I Use geht’s da ab 6.1.

                        nein, iPhone 6, aktuelle Updates.

                        Ist die Tabelle lesbar? Gut. Sticky ist progressive enhancement für moderne Browser.

                        ja, ist sie. Aber den aktuellen iPhone-Safari würde ich jetzt mal als „aktuell“ ansehen. 😉

                        Gruß
                        Jürgen

        2. @@MiePie94

          Ich habe das Problem dank position: sticky gelöst. Wie ihr hier sehen könnt.

          Ich habe mehrere Theads (ja ich weiß, dass mehrere Theads nicht valide sind, aber für meinen Fall hat die Tabelle mehrere Theads)

          Es ist sicher keine gute Idee sich darauf zu verlassen, dass alle Clients fehlerhaftes Markup gleich darstellen (auch wenn HTML5 das vereinheitlicht hat).

          Was spricht dagegen, in jedem tbody (ja, davon darf es mehrere geben) die jeweils erste Zeile als Überschrift mit th-Zellen vorzusehen?

          Ansonsten wäre zu überlegen, ob das wirklich eine Tabelle ist und nicht etwa mehrere.

          fixiert und die erste Spalte bleibt nun auch fixiert.

          Dem umgebenden div solltest du noch role="region" tabindex="0" mitgeben, siehe dieses Posting unten.

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
          1. Es ist sicher keine gute Idee sich darauf zu verlassen, dass alle Clients fehlerhaftes Markup gleich darstellen (auch wenn HTML5 das vereinheitlicht hat).

            Was spricht dagegen, in jedem tbody (ja, davon darf es mehrere geben) die jeweils erste Zeile als Überschrift mit th-Zellen vorzusehen?

            Ja das mag stimmen, aber diese Tabelle bekomme ich und existiert so. Ich habe nur die Aufgabe deren Kopfbereiche und erste Spalte zu fixieren. Die Tabelle wird durch eine SQL und PHP Abfrage dann generiert.

            1. @@MiePie94

              Ja das mag stimmen, aber diese Tabelle bekomme ich und existiert so. Ich habe nur die Aufgabe deren Kopfbereiche und erste Spalte zu fixieren. Die Tabelle wird durch eine SQL und PHP Abfrage dann generiert.

              Es ist Aufgabe des Backends, korrektes Mark-up zu generieren.

              Es ist Aufgabe der Backend-Entwickler, diesen Fehler zu korrigieren.

              LLAP 🖖

              --
              „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
              1. Hey,

                da stimme ich dir zu. Danke trotzdem für deine Hilfe und Tipps :)