Calocybe: / (DHTML) Layer in Tabellenzellen (oder wo liegt das Problem?)

Beitrag lesen

Hallo Thomas

Erstmal zum Ansprechen einer DIV in JavaScript: Ja, fuer den Netscape ist eine DIV schlicht und einfach ein LAYER, nur ist er ziemlich waehlerisch; er nimmt nicht jede DIV, wie ich jetzt festgestellt habe. Voraussetzung ist naemlich erstmal ein vorhandenes STYLE-Attribut, und in diesem muss man ihm dann noch bestimmte Positionierungsvorgaben verpassen.

So weit ich weiss, sollte eine »id="etwas"« genuügen. (?)

Nur um sicher zu gehen, dass wir nicht aneinander vorbeireden: Die DIV gibt's natuerlich in jedem Fall, nur muss sie der Netscape als vollwertigen LAYER anerkennen, bevor man mit JavaScript drauf zugreifen kann. Und das hat er eben nur unter solchen gewissen Umstaenden gemacht. Wie gesagt, das kann bei einer anderen Version/Release als 4.08en schon wieder ganz anders sein.

Es gibt leider keine "richtige" Regel wenn es um NS geht, position:absolute; funktioniert so weit so gut -- und ja, mann sollte immer Angaben zu top/left machen. --(nicht nur beim NS, meine Erfahrung ist, daß man für NS zumindest 'width' immer angeben soll.). Position:relative; ist etwas 'bug-lastig' unter NS.

Klar, wenn man  position:absolute  verwendet und Angaben zu top/left weglaesst, setzt er die DIV natuerlich in die linke obere Ecke. Und das ist sogar logisch. Leider brauche ich gerade das position:relative; .

»»Verwendet man aber  position:static, weigert sich der Netsi vehement, das Ding anzuerkennen.
Du sagst es, die Browser kennen das nicht.

Aber in SELFHTML steht doch... na gut. ;-)

Wenn deine Tabelle im <div> hineinkommt, ist das egal. Mit »postiton:absolut; top:50px; left:100px;« bestimmts du, daß die linke, obere Ecke deines <div>s 50px von oben und 100px von links, gemessen am Fensterrand beginnt. Hast du keine Breite angegeben, behandeln NS und IE dieses <div> unterschiedlich. Hast du eine Breite definiert, wird der Text am Rand umgebrochen, dabei spielt Schriftart und Größe nur eine Nebenrolle.

Ja, schon klar. Ich meinte das so: Ich habe eine grosse Tabelle mit zwei Spalten, die linke 135 Pixel breit, die rechte 575 Pixel breit. In der rechten Spalte steht erst ein Bild, dann etwas Text, und dann soll die besagte DIV bzw. Tabelle kommen. (Das war jetzt etwas vereinfacht, Du kannst Dir das auf http://www.jahr2000.siemens.de/de/index.asp anschauen, das heisst, wenn Du eine schnelle Verbindung hast. *g*) Da aber der Text je nach Schrift eine unterschiedliche vertikale Ausdehnung haben kann, weiss ich natuerlich nicht, an welcher Pixelposition vom oberen Fensterrand die DIV anfangen muss. Der Abstand von links ist natuerlich klar, naemlich 135 Pixel. (Alle Tabellen haben CELLPADDING und CELLSPACING auf 0.) Die Breite ist auch bekannt, naemlich die der Tabellenspalte, also 575px. Und die Hohe.. naja, die kann ich grosszuegig schaetzen, ist ja nur eine Textzeile.

Ich kenne mich mit javascript nicht aus, also zu deinem Code kann ich auch nicht relevantes sagen. Nur wie und wo rufst du die Funktion auf, die alles schreiben soll?
(ich habe den Code kopiert, aber bei mir tut sich weder im IE noch unter NS etwas, als ob der Code gar nicht existierte. (Mein Fehler?))

*g* Ja, aufrufen musst Du die Funktion noch. Ich habe das mit
<BODY OnLoad="laber()">  gemacht.  (Bzw. <BODY OnLoad="wcc()"> im Falle der 4 DIVs in extra Tabellenzellen)
Und vielleicht solltest Du vorher die Variablen noch initialisieren, z.B. mit
    function InitCountdown() {
        var today = new Date();
        var now = new Date();
        var CurDate = now.getDate();
        var todayInMS = today.getTime();

today.setYear(2000); today.setMonth(0); today.setDate(1);
        today.setHours(0); today.setMinutes(0); today.setSeconds(0);

var days_per_month=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
        var CurMonth = now.getMonth();
        var countMonth = 11 - CurMonth;
        var DateLeft=days_per_month[CurMonth]-CurDate;
        var y2kInMS = today.getTime();
        var countExact = (y2kInMS - todayInMS) / (1000 * 3600 * 24);
        var diff = (y2kInMS - todayInMS);
        var countDays = Math.floor(countExact);
        var countHours = Math.floor((countExact - countDays) * 24);
        var diff2 = (diff -((countDays * 1000 * 3600 * 24) + (countHours * 3600 * 1000)));
        var countMinutes = Math.floor(diff2 / (1000 * 60));

y2kMonths = countMonth;
        y2kDays = DateLeft;
        y2kHours = countHours;
        y2kMinutes = countMinutes;
    }

Wie meinst du das jetzt?
<table><div><table><tr><td><div>....</tr></table></div></table> ??

Siehe obige Erklaerung, also
<table><tr><td>...</td><td>...<DIV><table></table></DIV></td><tr></table>
Und wenn ich die andere Variante nehme, mit 4 DIVs in TDs
<table><tr><td>...</td><td>...<table><tr>{<TD><DIV></DIV></TD>}*4</tr></table></td><tr></table>

»»Der Netsi hat ja z.B. auch gehoerige CSS-Probleme mit Tabellen.
Das ist zwar bitter, aber wahr.

Die bittere Wahrheit also *g*

So long,
Calocybe