TheBestIsaac: IE verändert Spaltenbreite einer Tabelle

Hallo,

ich erzeuge mit einem Programm HTML-Berichte, die in einer Tabelle allerlei Werte anzeigen. Die Werte in den Spalten sind hierarchisch gegliedert, deshalb verfügen die Berichte über die Möglichkeit, über JavaScript die einzelnen Ebenen ein- und auszuklappen (Jede Tabellenzeile hat eine ID und in einem hidden input speichere ich mir zu jeder TableRow die Kind-Row-IDs).

Jetzt hab ich festgestellt, dass der IE unter irgendwelchen Umständen beim Einklappen bestimmter Tabellenzeilen die erste Spalte verkleinert (bei mir unter IE8 um einen Pixel, bei einer Kollegin um ca. 2 oder 3px). Das alleine wäre nicht so tragisch, allerdings hat der IE hierbei einen Bug beim Neuzeichnen des Tabellenrahmens. Durch das Verschieben der gesamten Tabelle nach links bleibt an manchen Stellen der ursprüngliche Rahmen erhalten und man sieht hässliche Linien an manchen Stellen:
http://img411.imageshack.us/img411/8652/iebug.png

Hier hab ich einen entsprechenden Bericht hochgeladen: http://isaac.aquilatech.org/misc/bericht_ie.html.txt

Wenn man in diesem Bericht die Zeile *Sachgemeinkosten* zuklappt, erscheint bei mir im IE besagter Bug.

Kann sich das jemand erklären? Wäre cool wenn man das irgendwie wegbekäme, sieht nämlich unschön aus wenn unsere Anwendung solche Berichte anzeigt (die meisten User benutzen den IE nämlich).

Danke schonmal im Voraus!

  1. Om nah hoo pez nyeetz, TheBestIsaac!

    erste Vermutung: in den Styleangaben kommen Prozentwerte vor, die dazu führen, dass Pixel halbiert werden und deshalb kommt es zu Verschiebungen. Auf das Renderverhalten hast du allerdings IMHO keinen Einfluss.

    Matthias

    --
    http://www.billiger-im-urlaub.de/kreis_sw.gif
    1. Hallo Matthias!

      erste Vermutung: in den Styleangaben kommen Prozentwerte vor, die dazu führen, dass Pixel halbiert werden und deshalb kommt es zu Verschiebungen.

      Hast du diese Vermutung jetzt aufgestellt ohne den von mir verlinkten Quellcode anzuschauen? Ich hab nämlich in der gesamten Tabelle keine einzige Prozentangabe. Die Breiten der einzelnen Spalten werden in Pixeln absolut angegeben. Die Tabelle erhält dann als Gesamtbreite die Summe aller Spaltenbreite (wird alles von der Komponente die die Berichte erzeugt berechnet, hier passiert also auch kein Fehler beim Zusammenrechnen).

      Auf das Renderverhalten hast du allerdings IMHO keinen Einfluss.

      Tja, sag das mal meinem Chef, der diese Streifen unbedingt weghaben will. ;)

      Isaac

      1. Om nah hoo pez nyeetz, TheBestIsaac!

        Hallo Matthias!

        erste Vermutung: in den Styleangaben kommen Prozentwerte vor, die dazu führen, dass Pixel halbiert werden und deshalb kommt es zu Verschiebungen. Hast du diese Vermutung jetzt aufgestellt ohne den von mir verlinkten Quellcode anzuschauen?

        im Quellcode habe ich aber keine CSS-Referenz gefunden.

        Matthias

        --
        http://www.billiger-im-urlaub.de/kreis_sw.gif
        1. Om nah hoo pez nyeetz, TheBestIsaac!

          im Quellcode habe ich aber keine CSS-Referenz gefunden.

          inzwischen schon.

          Ich konnte das Problem im IE7 nicht reproduzieren. Ich Zeilen eingeklappt wie wild und alles sieht aus wie es soll.

          aufgefallen ist mir allerdings, dass du ungültige ID-Angaben verwendest.

          Matthias

          --
          http://www.billiger-im-urlaub.de/kreis_sw.gif
          1. Hallo Matthias,

            Ich konnte das Problem im IE7 nicht reproduzieren. Ich Zeilen eingeklappt wie wild und alles sieht aus wie es soll.

            Bei mir tritt der Bug wie gesagt beim Einklappen der Zeile *Sachgemeinkosten* auf. Reproduzieren konnte ich den Bug mit IE6, IE7 und IE8.

            aufgefallen ist mir allerdings, dass du ungültige ID-Angaben verwendest.

            Bin kein HTML-Crack daher die Frage, in welcher Hinsicht die IDs falsch sind? dürfen die nicht allein aus Ziffern bestehen? Werd mal schauen ob das letzlich 'nen Unterschied macht wenn ich die ändere. Danke für den Hinweis!

            Grüße,
            Isaac

            1. Habe jetzt mal allen IDs ein "row_"-Präfix verpasst, die müssten ja jetzt gültig sein. Das Problem besteht aber leider weiterhin. :(

              1. Om nah hoo pez nyeetz, TheBestIsaac!

                Habe jetzt mal allen IDs ein "row_"-Präfix verpasst, die müssten ja jetzt gültig sein. Das Problem besteht aber leider weiterhin. :(

                sind sie.

                Möglicherweise stört sich der IE an der Doctype-Angabe. Schreib mal auch das HTML in der Doctype in Großbuchstaben.

                Matthias

                --
                http://www.billiger-im-urlaub.de/kreis_sw.gif
                1. Hey Matthias,

                  danke für den Hinweis auf's DOCTYPE. Hab jetzt die DOCTYPE-Definition auf <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> umgestellt, so wie es auf der SELFHTML-Seite (http://de.selfhtml.org/html/allgemein/grundgeruest.htm) beschrieben ist. Und jetzt hab ich nicht nur das Problem mit den veränderten Spaltenbreiten lösen können sondern der IE (v8 zumindest) kannst jetzt auch den Hover-State der Row korrekt auswerten und zeigt einen Hand-Cursor wenn man über einer Zeile ist die auf-/zuklappbar ist. Irgendwie hab ich wohl den IE versehentlich in den Quirksmode versetzt!

                  Danke nochmal für deine Hilfe!

                  Liebe Grüße,
                  Isaac

  2. Hallo TheBestIsaac,

    tritt denn der Bug auch noch auf, wenn du dem TABLE-Element table-layout:fixed verpasst?

    Gruß Gernot

    1. Om nah hoo pez nyeetz, Gernot Back!

      tritt denn der Bug auch noch auf, wenn du dem TABLE-Element table-layout:fixed verpasst?

      bei mir nicht.

      Matthias

      --
      http://www.billiger-im-urlaub.de/kreis_sw.gif
    2. Hallo Gernot,

      tatsächlich, wenn ich der Tabelle dieses CSS-Attribut zuweise tritt der Fehler auch nicht mehr auf. Da hab ich ja jetzt schon zwei Lösungen. Und wie heißt es so schön? Doppelt genäht hält besser. :)

      Vielen Dank!

      Liebe Grüße,
      Isaac