tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von tombe
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
353
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    685
    Ich versuche krampfhaft in einer Tabelle mit Untertabellen passende Höhen zu berechnen.
    Ich kann nicht mal genau sagen, woran es liegt, aber abhängig vom verwendeten Browser und der Hintergrundfarbe bekomme ich immer andere Ergebnisse.
    Firefox ist noch relativ einfach zu handhaben, aber im IE macht es sogar Unterschiede, ob in einer Zelle etwas Sichtbares drin steht oder nichts oder nur  .

    Ich möchte einfach nur 2 Tabellen mit jeweils nur einer Spalte, deren Höhe voneinander abhängig ist.

    Tabelle 1:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    $zeilen = x; // ein durch 3 teilbarer Wert zwischen 6 und 999
     
    print <<<END
    <table>
    END;
     
    for($i = 0; $i < $zeilen; $i++)
    {
    print <<<END
    <tr>
    <td height="25" border="1">
    Irgendwas
    </td>
    </tr>
    END;
    }
     
    print <<<END
    </table>
    END;

    Tabelle 2:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    $zeilen = $zeilen / 3;
    $height = ?; // hier liegt das Problem
     
    print <<<END
    <table>
    END;
     
    for($i = 0; $i < $zeilen; $i++)
    {
    print <<<END
    <tr>
    <td height="$height" border="1">
    &nbsp;
    </td>
    </tr>
    END;
    }
     
    print <<<END
    </table>
    END;

    Eine Zeile in Tabelle 2 soll inkl. Rahmen genauso hoch sein wie 3 Zeilen in Tabelle 1 inkl. Rahmen.
    Insgesamt sollen beide Tabellen inkl. aller Rahmen genau gleich hoch sein.

    Offensichtlich passt $height="75" nicht, weil in Tabelle 1 zwischen jeweils 3 Zellen 2 Rahmen mehr sind als in Tabelle 2.
    Ich habe es einfach ausprobiert und nachgemessen, bei border="1" komme ich auf height="79".
    Das passt auch fast immer, allerdings haben die Zellen je nach Browser, Hintergrundfarbe und Inhalt der Zelle immer andere Höhe.
    In Tabelle 1 irgendwas zwischen 23px plus Rahmen und 27px plus Rahmen.
    In Tabelle 2 irgendwas zwischen 77px plus Rahmen und 81px plus Rahmen.

    Es ist mir egal wie ich es anstellen muss, CSS oder JavaScript oder sonstwas an umständlicher Berechnung in PHP, ich brauche nur eine Lösung, die in Firefox genauso passt wie im IE, egal ob in den Zellen etwas drin steht oder nicht.

    Hat jemand eine Idee?
     

  2. #2
    threadi threadi ist offline Mitglied Brokat
    Registriert seit
    Dec 2006
    Ort
    Leipzig
    Beiträge
    478
    Ich würde mal anders ran gehen:
    Wieso brauchst Du überhaupt Tabellen?
    Scheinbar besteht jede Tabelle ja nur aus einzelnen Spalten - das macht keinen Sinn für tabellarische Daten. Wieso verwendest Du kein <ul> z.B.? Was steht eigentlich in den Spalten als Inhalt drinne?
    Und: was willst Du rein grafisch erreichen?
     

  3. #3
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    685
    Die Tabellen sind Untertabellen einer Haupttabelle und das sind effektiv nicht nur 2, sondern bis zu 11 Untertabellen.
    Die Haupttabelle enthält bis zu 11 Spalten a 3 Zeilen, wobei jeweils in der dritten Zeile die entsprechende Untertabelle steht.
    Der Inhalt einzelner Zellen ist sehr kurz, max 15 Zeichen.
    Erreichen will ich damit eine Gesamttabelle, wo (mit 2 Zeilen Überschrift) von links nach rechts jeweils 3 Zeilen zu einer zusammengefasst werden, wobei die Gesamttabelle einen Rahmen aussen drumrum hat, die Untertabellen aber nur Rahmen um alle Zellen.
    Grafisch sollten natürlich von rechts aus gesehen die Zellen nicht nur genauso hoch sein, sondern auch auf derselben Höhe stehen, wie die zugehörigen 3 Zellen links davon.
    Als Tabelle habe ich das gemacht, weil ich mich damit am besten auskenne, insbesondere mit Hintergründen, von einfacher Farbe bis Grafik.
    Einige Zellen haben als Inhalt eine variable Hintergrundgrafik, die ich mit CSS passend zoome, diese Zellen müssen klickbar sein und auch noch auf Mouse Events reagieren, um z.B. die Hintergrundgrafik zu wechseln oder ein Stück JavaScript auszuführen.
     

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Ich bin mir jetzt nicht sicher ob es das ist was du suchst, aber die Tabellen sind auf jeden Fall immer gleich hoch:

    PHP-Code:
    <?php $zeilen 6?>
    <table border="1" cellpadding="5" cellspacing="0" summary="" style="height: 25;">
        <tr>
            <td>
                <table border="1" cellpadding="0" cellspacing="0" summary="" style="height:100%;">
                <?php
                
    for ($a 1$a <= $zeilen$a++) {
                    
    $hoehe $a $zeilen '25''100%';
                    echo 
    "<tr><td height='$hoehe' width='100'>$a</td></tr>\n";
                }
                
    ?>
                </table>
            </td>
            <td>
                <table border="1" cellpadding="0" cellspacing="0" summary="" style="height:100%;">
                <?php
                
    for ($a 1$a <= $zeilen$a++) {
                    
    $hoehe $a $zeilen '25''100%';
                    echo 
    "<tr><td height='$hoehe' width='100'>" .str_repeat("XXX XX X "$a) ."</td></tr>\n";
                }
                
    ?>
                </table>
            </td>
        </tr>
    </table>
    str_repeat ist nur drin damit in der zweiten Tabelle mehr/etwas anderes steht als in der ersten!
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  5. #5
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    685
    Nein, das passt leider nicht.
    Die Untertabellen sind zwar gleich hoch, wegen style="height:100%;"
    aber die Untertabellen haben keinen Rahmen, nur die Zellen in den Untertabellen haben einen Rahmen.
    Der Effekt von deinem Code ist dann, dass die Zeilen in der zweiten Tabelle vertikal zentriert werden, aber ganz oben und ganz unten ein Loch bleibt.
    Darum muss in der zweiten Untertabelle etwa stehen:

    $hoehe = 75 + 2x Rahmen

    Nachdem FF und IE aber aus 25x Höhe irgendwas (verschiedenes) zwischen 23px und 27px plus Rahmen machen passt auch 75 plus 2x Rahmen nicht, sondern kann irgendwas zwischen
    69px und 81px plus 2x Rahmen sein.
     

  6. #6
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    ...aber die Untertabellen haben keinen Rahmen, nur die Zellen in den Untertabellen haben einen Rahmen...
    Also ich verstehe nur Bahnhof.

    Kannst du zum besseren Verständnis vielleicht mal ein Bild machen und hier einstellen wo man dann erkennen kann wie die Tabelle(n) aussehen soll.
    Die Umrandung die wirklich dargestellt werden soll machst du dann mit durchgehenden Linien, die Linien die nur dazu da sind um Tabellen/Zellen sichtbar zu machen, machst du gestrichelt.
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  7. #7
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    685
    Ich versuchs mal.
    Angehängt habe ich jetzt beides, links was IE draus macht und rechts was FF draus macht.
    Da sieht man auf den ersten Blick schon, dass FF das Ganze insgesamt kleiner darstellt, aber das ist kein Problem.
    Rot eingerahmt habe ich die beiden Untertabellen, und da liegt das Problem, denn da macht IE die zweite Tabelle zu kurz, während FF es richtig macht.

    Code ist in beiden Fällen identisch, und weils einfacher zu überschauen ist, mal ohne PHP sondern vom tatsächlichen HTML Quelltext:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    
    <body bgcolor="#406090">
     
    <table width="300" align="center" border="1">
     
    <! Kopfzeile >
     
    <tr>
    <td width="150" align="center" bgcolor="#486ca3">
    &nbsp;
    </td>
    <td width="150" align="center" bgcolor="#486ca3">
    &nbsp;
    </td>
    </tr>
     
    <! Zeile für Untertabelle >
     
    <tr>
    <td>
     
    <! Untertabelle links >
     
    <table border="1" width="150">
     
    <tr>
    <td width="150" valign="middle" height="25">
    &nbsp;
    </td>
    </tr>
     
    <tr>
    <td width="150" valign="middle" height="25">
    &nbsp;
    </td>
    </tr>
     
    <tr>
    <td width="150" valign="middle" height="25">
    &nbsp;
    </td>
    </tr>
     
    <tr>
    <td width="150" valign="middle" height="25">
    &nbsp;
    </td>
    </tr>
     
    <tr>
    <td width="150" valign="middle" height="25">
    &nbsp;
    </td>
    </tr>
     
    <tr>
    <td width="150" valign="middle" height="25">
    &nbsp;
    </td>
    </tr>
     
    </table>
     
    </td>
    <td>
     
    <! Untertabelle rechts >
     
    <table border="1" width="150">
     
    <tr>
    <td width="150" valign="middle" height="79">
    &nbsp;
    </td>
    </tr>
     
    <tr>
    <td width="150" valign="middle" height="79">
    &nbsp;
    </td>
    </tr>
     
    </table>
     
    </td>
    </tr>
    </table>
    </body>
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken table height-table.jpg  
     

  8. #8
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Komisch bei mir wird es im IE 8, Opera 11.52 und im FF 8 jeweils korrekt dargestellt! Sowohl dein Code als auch meiner.
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  9. #9
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    685
    Ich verstehe es ja auch nicht.
    Ich habe es probiert mit FF8, IE8 und IE9, unter 32bit XP und 64bit Win7.

    Aus irgendeinem Grunde macht der IE bei mir die height um 2px grösser als angegeben, aus height="25" wird eine tatsächliche Höhe von 27px plus Rahmen, FF macht 23px plus Rahmen.

    Vielleicht kann man das Ganze anders angehen?
    Wie bringt man die Browser dazu für height="25" auch wirklich genau 25px Höhe anzuzeigen, und nicht nur so ungefähr?
     

  10. #10
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Mir fällt zwar so nichts passendes ein was es sein könnte, aber hast du vielleicht irgendwo auf der Seite eine CSS Anweisung die dafür verantwortlich sein kann.
    Thomasio bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  11. #11
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    685
    Ich habs gefunden.
    Es ist nicht eine CSS Anweisung zu viel, sondern ein paar zu wenig.
    Die Browser verwenden verschiedene defaults für spacing, padding, Schriftart und -grösse.
    Gibt man das nicht alles ausdrücklich an, wird im IE wird die Summe aus cellspacing, cellpadding und Schrift höher als 23px, darum macht er die Zellen grösser.
    Das mag mit Desktop-Einstellungen zusammen hängen, so dass es bei dir geht und bei mir nicht, wie auch immer, kaum habe ich das alles eingestellt, passt es auch im IE.

    Vielen Dank für deine Mühe, du hast mich zumindest auf die richtige Idee gebracht.
     

Ähnliche Themen

  1. [Internet Explorer] DIV height 100% in TABLE->TD
    Von Kalstone im Forum HTML & XHTML
    Antworten: 5
    Letzter Beitrag: 15.09.10, 22:41
  2. Table height abhängig von Datensatzmenge
    Von Tribalman im Forum PHP
    Antworten: 15
    Letzter Beitrag: 27.10.04, 09:46
  3. table height Tag in Opera?
    Von zeromancer im Forum HTML & XHTML
    Antworten: 11
    Letzter Beitrag: 25.06.04, 13:58
  4. W3c height Validate Table
    Von mageDSA im Forum HTML & XHTML
    Antworten: 2
    Letzter Beitrag: 03.09.03, 16:00
  5. table -> height
    Von TiMbO2k im Forum HTML & XHTML
    Antworten: 5
    Letzter Beitrag: 14.11.02, 12:18