2009-06-23 8 views
0

Ahoi! Ich habe ein kleines Skript erstellt, um die Größe des linken Randes beim Laden der Seite zu überprüfen, die Größe eines div dort zu ändern, um es zu füllen, und den Header div so zu ändern, dass er daneben schwebt.Inkonsistente jQuery-Funktion beim Ändern der Größe von Elementen beim Laden der Seite

Hier ist der Code:

function buildHeader() { 
      var containerMarginLeft = $(".container_16:not(:first)").css("margin-left"); 
      var headerHeight = $("#header").height(); 
      $("#stripe").width(containerMarginLeft).height(headerHeight).css("float", "left"); 
      $(".container_16:first").css("float", "left"); 
      $("#header").css("margin-left", 0).width(950); 
     } 

     $(document).ready(function(){ 
      // Manipulate layout for the first time 
      buildHeader(); 
      // Manipulate layout when window is resized 
      var resizeTimer = null; 
      $(window).bind('resize', function() { 
       if (resizeTimer) clearTimeout(resizeTimer); 
         resizeTimer = setTimeout(buildHeader, 100); 
        }); 
     }); 

Und die Demonstration ist hier: http://robertmay.me.uk/mockups/plane.html (es schafft die Zeile, die auf der linken Seite erstreckt). Jetzt funktioniert es in Webkit-Browsern. Es funktioniert nicht in Mozilla, und ich habe es nicht einmal in IE versucht. Hat jemand irgendwelche Ideen, warum es in Mozilla nicht zu funktionieren scheint? Ich habe das Gefühl, dass es etwas mit dem CSS zu tun haben könnte.

+0

In Firefox 3.0 ist die Zeile etwas zu kurz verglichen mit den Ergebnissen in Safari 4.0, wo die Zeile ganz nach rechts geht. Also, was ist deine Frage konkret? Suchen Sie nach einem Workaround? oder nur die Überprüfung des von Ihnen erwähnten Verhaltens? Sie könnten versuchen, eine Mischung aus einem Bild schwebte nach rechts und einem Hintergrundbild und bete, dass sie sich richten ... –

+0

Ah ha, so dass es in Firefox 3 unter Windows funktioniert? Es ist nicht auf der Mac-Version. Ich habe gesehen, was du beschreibst und es ist kein großes Problem, es ist aus irgendeinem Grund etwa 50 Pixel zu kurz. Irgendeine Idee warum? Auf dem Mac FF3 ist das Zeilen-Div nicht vorhanden, der Header schwebt gerade nach links. – robotmay

+0

Ich habe einen Blick auf Firebug geworfen, und in FF3 für Mac gibt es dem Stripe div keine richtige Breite, es ist auf 0px eingestellt. Irgendwelche Ideen? – robotmay

Antwort

1
$(".container_16:not(:first)").css("margin-left"); 

Diese Zeile gibt ein Ergebnis von '0px' in Firefox unabhängig davon, wie breit das Fenster wird. Bei Firebug Lite in Safari wird dieser Wert jedoch abhängig von der Breite des Fensters angezeigt.

Das Problem scheint mit dem .css ('margin-left') Teil der Anweisung zu sein, da $ (". Container_16: not (: first)") das gleiche Element in beiden Browsern zurückgibt. Tatsächlich zeigt Firebug in Firefox den berechneten Stil für dieses Element mit '0px' für marginLeft und marginRight, aber dies ist in Safari nicht Null.

Wie erwartet, ändert sich der Wechsel von 'margin-left' zu 'marginLeft' nicht, ebenso wenig wie der direkte Zugriff auf das Attribut, wie $ (". Container_16: not (: first)") [0] .style.marginLeft , weil Firefox es in erster Linie falsch berechnet.

Entschuldigung, ich habe keine Antwort, aber hoffentlich führt Sie das in die richtige Richtung. Für mich würde ich jedoch versuchen, das Layout nur mit CSS auszurichten und nur als letzten Ausweg auf JavaScript-Korrekturen zurückzugreifen.

+0

Danke für die Verengung für mich! Ich habe versucht, nur CSS als Lösung zu verwenden, aber ich hatte ein sehr schmales Fenster, um es zum Laufen zu bringen und den gleichen Effekt in CSS zu bekommen, scheint viel komplizierter zu sein. Ich habe gerade die Seite in FF3 für Windows getestet und es funktionierte mehr oder weniger gut, so scheint es ein Problem nur mit FF für Mac zu sein. Sehr komisch! – robotmay

Verwandte Themen