Problem mit Layer im Layer in Netscape
Sven Wagener
- css
Guten Tag!
Ich habe in einem Layer (<div> Tag) einen zweiten Layer angelegt um die Elemente zu positionieren. Dieser innere Layer wird von einem JavaScript angesprochen und hin und her gescrollt.
Sobald ich aber dem äusserem Layer ein Style zuordne, so wird der innere Layer (nur in NS) nicht mehr angesprochen.
Weiss jemand Rat?
Mit freundlichen Grüssen,
Sven Wagener
Dokuwelt - Tutorials und mehr
http://www.dokuwelt.de
Über 900 Tutorials!
(-: Wer lesen kann ist klar im Vorteil! :-)
Hi Sven,
Ich habe in einem Layer (<div> Tag) einen zweiten Layer angelegt um die Elemente zu positionieren. Dieser innere Layer wird von einem JavaScript angesprochen und hin und her gescrollt.
Tja, das ist normal beim Netscape, wenn Du da das <DIV>-Tag verwendest und schachtelst, ist er absolut überfordert :-) Du kannst zwar die Sache noch als eine Art Ticker hin und herscrollen, aber sobald Styles ins Spiel kommen oder Du einen Link in den Inhalt einbaust ist Schicht im Schacht. Die Sache mit den Links ist richtig klasse, alles sieht völlig korrekt aus und scrollt sogar, auch die Links sind zu erkennen, nur scrollen die nicht - völlig irrer Effekt - also der ganze Text mit Links scrollt, aber anklicken kannst Du nur die Stellen, die ursprünglich die waren, wo die Links standen, bevor der Text sich bewegt.
Nun ja, genug von dem Blödsinn der Netscape-Browser es gibt ja doch eine Lösung für die ganze Sache. Wenn Du also mit Layerschchtelungen im NN arbeiten willst, solltest Du am Besten per JavaScript die entsprechend korrekten Layer-Tags ausgeben. Also für den IE und NN6 (der kann´s) <DIV> und für NN < 6 <ILAYER> bzw. <LAYER> dann versteht auch er was Du meinst :-) Im Klartext sieht das so aus:
<script language="JavaScript">
<!--
if (nn) {
document.write('<ilayer name="rahmen" position=absolute; top=xxx; left=xxx; width=xxx; height=xxx; overflow=hidden;>');
document.write('<layer name="inhalt" top=5;>');
}
if ((n6) || (ie)) {
document.write('<div id="rahmen" style="position:absolute; overflow:hidden; left:...px; top:...px; width:...px; height:...px;">');
document.write('<div id="inhalt" style="position:relative; left:0px; top:5px; width:...px; height:...px;">');
}
//-->
</script>
<script language="JavaScript">
<!--
if (nn) {
document.write('</layer>');
document.write('</ilayer>');
}
if (((!ie) && (!nn)) || (ie)) {
document.write('</div>');
document.write('</div>');
}
//-->
</script>
Allerdings musst Du schauen, wo Du den Kontainer anlegst, denn dananch richten sich die Koordinaten für den NN, beim IE und NN6 sind es - klar - die absoluten vom 0,0-Punkt des Bildschirms aus, beim NN ist es absolut von der Position des Layers auf der Seite an sich. Also wenn Du das Ding ganz ans Ende der Seite hängst (so mach ich es eigentlich immer) müsstest Du eben irgendeinen Minuswert als top-Wert für den äußeren Layer haben. Ansonsten kannst Du nun eigentlich alles mit dem Layer anstellen, wie auch im IE. Klar MS-Filter o.ä. immer noch nicht, aber das hat ja auch nicht ganz so viel mit HTML, CSS, oder JavaScript zu tun :-)
MfG
Stefen
Ich nochmal,
ich denke zwar es dürfte klar sein, aber hier noch kurz wie Du an die Variablen (ie,nn,n6) rankommst:
var nn=document.layers?true:false;
var n6=document.getElementById?true:false;
var ie=document.all?true:false;
Achte auf die Reihenfolge! Denn der IE kennt 'document.getElementById' auch und da es zwar in diesem Beipiel keinen Unterschied macht, aber es Dinge gibt, wo man auch noch zwischen IE und N6 unterscheiden muss, ist es wichtig, dass ein IE auch wirklich durch die Variable ie erkennbar ist. Denn wenn Du z.B.:
var nn=document.layers?true:false;
var ie=document.all?true:false;
var n6=document.getElementById?true:false;
schreiben würdest, wären IE´s auf einmal alle N6´er :-)