29. marts 2005 - 21:51Der er
14 kommentarer og 1 løsning
Layers i vandret menu med undermenuer vises forkert i firefox
Jeg har overtaget noget gammel (men hidtil velfungerende) kode til en vandret menu med undermenuer. Desværre er placeringen af disse undermenuer ikke korrekt i FF; de hopper rundt oveni menuen istedet for at poppe up lige nedenunder hvert menu punkt.
Et HTML-dokument _skal_ begynde med en DTD (DocType Definition) som f.eks: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> - og den skal indsættes før <html>-tag'et. Gør du ikke det - eller udelader du URL'en i DTD'en - kan du ikke bruge CSS i IE. Den kan simpelthen ikke tolke CSS's box-model uden.
Med andre ord, er det højst sandsynligt, det er FF, der viser menuen, som den er skrevet ;o)
PS: Når du sætter DTD'en ind i dine dokumenter, skal de sikkert skrives en del om. Det er blot fordi, browserne nu forstår din kode - og at den ikke er skrevet på den måde, du egentlig ønsker det
Du har formentlig ret mht DTD, men det er bare ikke rigtigt et tip der nytter så meget lige her. Hvis din ide om at siden vises korrekt i FF og forkert i IE skulle holde, så er det godt nok utroligt at den er så præcis under menuerne i IE, og helt hoppet rundt i FF - men det kan du jo selv se, hvis du lige kigger på siden i hver af de to browsere.
....men det skulle da ikke skade mig at efterprøve din teori, og det eneste der kom ud af det, var at menuerne nu er skubbet en smule til siden i IE, og stadig er skævt placeret både lodret og vandret i FF.
Under alle omstændigheder bør du indsætte DTD'en og rette de fejl, der måtte opstå. Det gør koden bedre performende, fordi browseren ikke skal gætte og prøve sig frem - men det gør den også lettere at vedligeholde.
Fejlen opstår sikkert, fordi du ikke sætter enhed på left- og top-værdier. Det burde ingen browser forstå, men IE gætter på, hvad du mente :)
} else if (document.getElementById) { var w = document.documentElement.offsetWidth; if(w>780) w = (w-780)/2; else w = 0; document.getElementById('menu1').style.top = 150 + "px"; document.getElementById('menu2').style.top = 150 + "px"; ... osv ...
- eller bare:
} else if (document.getElementById) { var w = document.documentElement.offsetWidth; if(w>780) w = (w-780)/2; else w = 0; document.getElementById('menu1').style.top = "150px"; document.getElementById('menu2').style.top = "150px"; ... osv ...
- og når du laver en beregning, skiller du sammenlægningen fra konkateneringen (hvilket desværre sker med et '+' for begges vedkommende i JS) med en parentes:
sorry, havde skrevet en #include forkert i default3.asp. Jeg har lavet de ændringer du forelog på de 4 blokke i starten hvor der angives top/left værdier.
Ja, men jeg kan ikke se, hvad der sker med de ændringer. Du bliver nødt til at lade ændringe afspejle sig i det, vi kan se ... ellers er det temmelig vanskeligt at hjælpe :)
Det var nok en kombination af rettelsen med enhederne, og derudover at der skulle bruges både: document.all.menu1.style.left = 116+w; - type og document.getElementById('menu1').style.left = 116+w; - type og document.layers.menu1.left = 116+w; - type
olebole, smid lige et svar ind, hvis du vil have point - du er vist den der fik ledt mig på rette spor :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.