Cheatah: Zeilenhöhen einer Tabelle

Hi,

in http://netnews.web.de/action/?cmd=article&group=de.comm.infosystems.www.authoring.misc&item=21303 (news:392baa38$1@netnews.web.de) habe ich gerade eine Frage gestellt, die ich hier nicht komplett wiederholen möchte ;-)

Kurz gesagt geht es darum, die Zeilenhöhen neben einer mehrzeiligen Spalte nicht "gleichzuverteilen", was Zwischenräume verursacht, sondern die oberste möglichst nicht größer als den Inhalt zu belassen.

Weiß jemand Rat?

Cheatah

  1. Hi Cheatah,

    hast du schon probiert in die Zelle 4 ein Bild mit der gewüschten Höhe einzubauen?
    <img src="blank.gif" heigth="x" width="1" border="0">

    ALEX

    1. Hi,

      hast du schon probiert in die Zelle 4 ein Bild mit der gewüschten Höhe einzubauen?
      <img src="blank.gif" heigth="x" width="1" border="0">

      auf den Gedanken war ich direkt noch nicht gekommen; ich hatte bisher nur an eine zusätzliche Tabellenzeile gedacht. Dummerweise ist das Problem, daß ich "x" nicht ermitteln kann... das Template gilt für ca. 25 Seiten, die allesamt Unterschiede sowohl links als auch rechts aufweisen (können).

      Trotzdem danke,

      Cheatah

      1. Hi Cheatah,

        JS kannst du wohl nicht nehmen?

        Sonst könntest du das "x" ja mit JS berechnen.

        ALEX

        1. Hi,

          JS kannst du wohl nicht nehmen?

          theoretisch schon, will ich aber so gut es geht vermeiden.

          Sonst könntest du das "x" ja mit JS berechnen.

          Leider eher schlecht als recht... und in Netscape bringt es schon wieder nichts; wir wissen ja alle, wie gut dat Dingen Änderungen an der Darstellung vornehmen kann. Und die Zellenhöhe kann ich nun mal erst bestimmen, wenn sie da ist...

          Cheatah

  2. Hallo,

    nein, ich weiß leider keinen Rat ;-( Das größte Problem (das wirst Du selbst wissen) ist, daß Du die Höhe der linken Zelle nicht kennst. Die einzige Möglichkeit, die ich sehe, wäre eben, durch "auffüllen" der rechten unteren Zelle die Grenze zu den beiden oberen nach oben zu schieben.

    Ich kenn das Design der Seite nicht, aber wenn es "egal ist", wie die Seite dadrunter aussieht, dann kannst Du natürlich die höchste angenommene Höhe nehmen und entsprechend pauschal mit einem Gif auffüllen. Sicherlich nicht das eleganteste...... Warum must Du denn von der Lösung mit den getrennten Tabellen weggehen?

    Chräcker

    http://www.chraecker.de/stempel

    1. Hi,

      nein, ich weiß leider keinen Rat ;-( Das größte Problem (das wirst Du selbst wissen) ist, daß Du die Höhe der linken Zelle nicht kennst. Die einzige Möglichkeit, die ich sehe, wäre eben, durch "auffüllen" der rechten unteren Zelle die Grenze zu den beiden oberen nach oben zu schieben.

      naja, die Höhe der linken Zelle könnte ich vielleicht sogar (zumindest für Standardeinstellungen der Browser) ungefähr ermitteln; das Problem ist damit leider aber noch nicht gelöst. Ich bräuchte in etwa den "Übertrag", um eben eine Zusatzzeile erstellen zu können.

      Ich kenn das Design der Seite nicht, aber wenn es "egal ist", wie die Seite dadrunter aussieht, dann kannst Du natürlich die höchste angenommene Höhe nehmen und entsprechend pauschal mit einem Gif auffüllen. Sicherlich nicht das eleganteste...... Warum must Du denn von der Lösung mit den getrennten Tabellen weggehen?

      Leider ist da gar nichts egal... es wird ein Redesign von http://shopping.web.de/ ;-)

      Cheatah@Work

  3. Hi Cheatah

    Kurz gesagt geht es darum, die Zeilenhöhen neben einer mehrzeiligen Spalte nicht "gleichzuverteilen", was Zwischenräume verursacht, sondern die oberste möglichst nicht größer als den Inhalt zu belassen.

    Weiß jemand Rat?

    eigentlich nur einen: du muesstest - wenn der content fuer 2+3 geschrieben ist - fuer 1 eine neue <tr> aufmachen, sprich die Zelle 1 in zwei Zeilen zerlegen und fuer die 4 colspan"2" angeben.

    Stellt sich natuerlich die Frage: wie wird die Seite erzeugt?

    wenn per Script, muessten fuer einen Zeilenzaehler die Zeilen fuer 2 und 3 vorher in ein Array gelesen und aus diesem dann rausgeschrieben werden.

    Gruesse
    Wilhelm

    1. Hi,

      eigentlich nur einen: du muesstest - wenn der content fuer 2+3 geschrieben ist - fuer 1 eine neue <tr> aufmachen, sprich die Zelle 1 in zwei Zeilen zerlegen und fuer die 4 colspan"2" angeben.

      ja, danke, aber die Grundlagen von HTML beherrsche ich grad noch so ;-)

      Also, die Tabelle wird schon syntaktisch korrekt erzeugt, das ist nicht das Problem. 1 aufspalten kann ich leider nicht, da muß schon rowspan für herhalten.

      Stellt sich natuerlich die Frage: wie wird die Seite erzeugt?

      Mit COPS ;-)
      Okay, sagen wir, mit einer Art PHP. Leider eins, das keine Arrays kennt, aber die Inhalte zu füllen ist auch nicht das Problem. Der Zwischenraum zwischen (23) und 4, bzw. genauer: innerhalb von 2 und 3 ist es; diesen möchte ich gerne unter 4 verlegen.

      Trotzdem danke,

      Cheatah

      1. Hi

        ja, danke, aber die Grundlagen von HTML beherrsche ich grad noch so ;-)

        da bin ich mir sicher! Ich wollte Dir auch nicht das Gegenteil unterstellen. Aber mir wurde immer nachgesagt, ich wuerde mich meistens nicht deutlich genug ausdruecken. ;-)

        Vielleicht verstehe ich auch Dein Problem nicht ganz.

        Ich bin auf dem Trichter, dass 4 unter 23 anschliessen soll.
        Und wenn verschachtelte Tabellen nicht in Frage kommen, muesste es doch gerade fuer Dich ein Leichtes sein, irgendwie mit "wasweissich" ein Array oder einen String zu konstruieren, welche(s)(n) Du "wieauchimmer" in Dein Script bindest.

        Gruesse
        Wilhelm

        1. Hi,

          da bin ich mir sicher! Ich wollte Dir auch nicht das Gegenteil unterstellen. Aber mir wurde immer nachgesagt, ich wuerde mich meistens nicht deutlich genug ausdruecken. ;-)

          ach so :-)

          Ich bin auf dem Trichter, dass 4 unter 23 anschliessen soll.

          Richtig. Das tut es auch, nur daß die Tabellenzeilen in der Höhe nicht optimiert sind: Der "Freiraum" (Differenz zwischen Höhe links und Höhe rechts) wird relativ gleichmäßig über beide Zeilen verteilt. Er soll aber nur in der unteren Zeile sein.

          Und wenn verschachtelte Tabellen nicht in Frage kommen, muesste es doch gerade fuer Dich ein Leichtes sein, irgendwie mit "wasweissich" ein Array oder einen String zu konstruieren, welche(s)(n) Du "wieauchimmer" in Dein Script bindest.

          Tja, den Content auf den Bildschirm zu bringen ist nicht das Ding, sondern die Art, wie die Browser ihn interpretieren... :-(

          Cheatah

  4. Hi Cheatah,

    hab' so was noch nie gemacht, aber 'ne Idee, wie es _vielleicht_ gehen könnte - vielleicht taugt es ja als Denkansatz.

    Der geht so:

    Du musst die Höhe von Zelle 4 anhand der tatsächlichen Höhe von Zelle 1 festlegen - richtig?
    Dann müsstest Du mit offsetHeight die Höhe von Zelle 1 ermitteln können (IE-Syntax). In Abhängigkeit davon weist Du einer Variable einen Wert zu. Diese Variable benutzt Du, um einem leeren GIF in Zelle 4 die gewünschte Höhe mit zu geben.

    So weit die Theorie (sofern das überhaupt Dein Problem trifft) - in der Praxis könnte ich mir da Probleme vorstellen (Zellenhöhe kann erst ermittelt werden, wenn die Tabelle da ist - sie kann aber erst da sein wenn klar ist wie hoch Zelle 4 sein soll - das ist aber erst klar wenn die Zellenhöhe ermittelt ist...)

    Du siehst: vermutlich kompletter Bullshit, die Idee. Vielleicht ist's ja trotzdem 'n Versuch wert.

    Grüße,

    Ulf...nein, Utz *fg*

    1. Hi Ulf ;-)

      Du musst die Höhe von Zelle 4 anhand der tatsächlichen Höhe von Zelle 1 festlegen - richtig?

      ja, und anhand der größeren Höhe von Zelle 2 und 3.

      Dann müsstest Du mit offsetHeight die Höhe von Zelle 1 ermitteln können (IE-Syntax). In Abhängigkeit davon weist Du einer Variable einen Wert zu. Diese Variable benutzt Du, um einem leeren GIF in Zelle 4 die gewünschte Höhe mit zu geben.

      Hm, damit sind zwar vermutlich die meisten Clients beachtet, aber leider immer noch zu wenig. Als Workaround, wenn ich den Zwischenraum wirklich auf Deubel komm raus vermeiden soll, ist es allerdings durchaus überlegenswert. Danke für den Tip!

      So weit die Theorie (sofern das überhaupt Dein Problem trifft) - in der Praxis könnte ich mir da Probleme vorstellen

      Die löse ich, wenn's soweit ist :-)

      Du siehst: vermutlich kompletter Bullshit, die Idee.

      Nein, durchaus nicht. Nur ist sie mir auf zu wenige Systeme beschränkt... IE 4+ mit aktiviertem JavaScript. Drum eben nur ein Workaround, aber einer, an den ich noch gar nicht gedacht hatte.

      Danke für den Denkanstoß,

      Cheatah

  5. Hi Cheatah!

    Kurz gesagt geht es darum, die Zeilenhöhen neben einer mehrzeiligen Spalte nicht "gleichzuverteilen", was Zwischenräume verursacht, sondern die oberste möglichst nicht größer als den Inhalt zu belassen.

    Weiß jemand Rat?

    Schade, leider kann ich Dir auch nicht helfen. :(
    Ich hatte (hab) genau das gleiche Prob. auch mit meiner Site. Das einzigste, das etwas brachte war, wie Alexander  schon sagte, von unten (Zelle 4) "gegenzudrücken". Das sieht allerdings gelinde gesagt bescheiden aus, wenn die Seite unten immer länger und länger wird.

    Falls Du doch noch mal eine vernünftige Lösung finden solltest, wäre ich übrigens sehr interessiert diese zu erfahren. Nur so aus reiner Neugier.

    Gruß,
    Sönke

    P.S. Wenn die Möglichkeit besteht, schau Dir Deine Seiten doch mal mit Opera an. Das war der einzigste Browser, der bei mir das richtig darstellen konnte. Selbst Amaya konnte das nicht. Also warte lieber nicht darauf, das das IE und NC irgendwann einmal können. Das wird wohl die nächsten Jahrzehnte nicht passieren.

    1. Hi,

      Falls Du doch noch mal eine vernünftige Lösung finden solltest, wäre ich übrigens sehr interessiert diese zu erfahren. Nur so aus reiner Neugier.

      also, es _war_ mit verschachtelten Tabellen gelöst - einfach erst mal zweispaltig einzeilig, und rechts war eben eine Tabelle mit dem Rest drin. Das will ich nur abbauen, weil mir die Tabellen schon zu tief verschachtelt sind.

      P.S. Wenn die Möglichkeit besteht, schau Dir Deine Seiten doch mal mit Opera an.

      Gute Idee, werd ich machen. Momentan sieht meine Testumgebung noch recht flach aus; nur Netscape 4.7 und IE 5.

      Das war der einzigste Browser, der bei mir das richtig darstellen konnte. Selbst Amaya konnte das nicht. Also warte lieber nicht darauf, das das IE und NC irgendwann einmal können. Das wird wohl die nächsten Jahrzehnte nicht passieren.

      Zumindest nicht mehr in diesem Jahrtausend ;-)

      Cheatah

  6. Hallo Cheatah!

    Kurz gesagt geht es darum, die Zeilenhöhen neben einer mehrzeiligen Spalte nicht "gleichzuverteilen", was Zwischenräume verursacht, sondern die oberste möglichst nicht größer als den Inhalt zu belassen.

    <table width="600" border="1">
    <tr>
      <td rowspan="3"><img src="true.gif" width=1 height=1200 alt="" border="0"></td>
      <td>BBB</td>
      <td>CCC</td>
    </tr>
    <tr><td colspan="2">CCC</td></tr>
    <tr><td colspan="2"><img src="true.gif" width=1 height=1200 alt="" border="0"></td></tr>
    </table>

    Sinn: die fünfte Zelle (sie ist unter 23 und 4 ) ist als Platzhalter (ein blin.gif muss schon rein) sie drückt die anderen nach oben. Es wird zwar ein Scrollbalken erzeugt aber besser geht es mit bloßem HTML nicht.

    Oder: du schreibst 2 Tabellen nebeneinander. Tabelle 1 = Zelle 1
    Tabelle 2 = Zellen 23 + 4

    Grüße
    Thomas

    1. Hi,

      Sinn: die fünfte Zelle (sie ist unter 23 und 4 ) ist als Platzhalter (ein blin.gif muss schon rein) sie drückt die anderen nach oben. Es wird zwar ein Scrollbalken erzeugt aber besser geht es mit bloßem HTML nicht.

      ist leider nicht, da drunter ist noch ein Footer, der nicht in unendliche Weiten[tm] verschwinden soll...

      Oder: du schreibst 2 Tabellen nebeneinander. Tabelle 1 = Zelle 1
      Tabelle 2 = Zellen 23 + 4

      Das hat Steffi in dciwam auch vorgeschlagen - hat leider nicht funktioniert. Letztlich haperte es im Grunde daran, daß die Seite an sich zentriert ist.

      Trotzdem danke,

      Cheatah

      1. Hallo Cheatah!

        Letztlich haperte es im Grunde daran, daß die Seite an sich zentriert ist.

        also dann eben so:

        <html>
        <head>
        <title>test 4</title>
        <style type="text/css">
        <!--
        #links {
        text-align:center;
        border:solid 1px blue;
        width:560px;
        }
        -->
        </style>

        </head>
        <body>
        <center>

        <div id="links">
        <table border="1" align="left" width="200">
        <tr>
          <td>111<br><img src="true.gif" width=1 height=1200 alt="" border="0"></td>
        </tr>
        </table>
        <table border="1" width="350">
        <tr><td>AAA</td><td>AAA</td></tr>
        <tr><td colspan="2">CCC</td></tr>
        </table>
        </div>

        </center>
        </body>
        </html>

        =========
        im CSS
        width: muss etwas breiter sein als die Tabellen zusammen (10px reicht) sonst schneidt der NS die Tabelle ab.
        border:solid 1px blue;  kannst ducht border:none; ersetzen, aber das muss sein.

        Und wenn es jetzt noch immer nicht passt, darfs du alleine weiter machen ;-)))

        Grüße
        Thomas

        PS: die Nachteile der Lösung liegen in der Lösung selbst (NS ohen JS = no CSS)