2013-06-03 12 views
5

Z poniższym znacznikiem i css, próbowałem uzyskać obliczony lewy margines powłoki.Uzyskaj margines obliczony automatycznie w firefox z jQuery

<section class="page-title"> 
     <div class="shell"> 
     <h5 class="title">Welcome!</h5> 
     </div> 
    </section> 

.shell { 
    zoom: 1; 
    max-width: 1000px; 
    margin-left: auto; 
    margin-right: auto; 
    padding-left: 16px; 
    padding-right: 16px; 
} 

Korzystanie

parseInt($('.shell').css('marginLeft')) 

to działa w Chrome, Safari, IE9, ale zaskakująco nie działa w Firefoksie. Próbowano inne podejście:

($('.shell').outerWidth(true) - $('.shell').outerWidth())/2 

Działa również dobrze, ale Firefox. Więc myślę, że firefox nie obsługuje uzyskania niezdefiniowanego css z jQuery? Prostym sposobem obejścia tego problemu jest:

($('.page-title').width() - $('.shell').outerWidth())/2 

Ale zastanawiam się, czy istnieje lepszy sposób.

+0

Mam dokładnie ten sam problem z Firefox v21 – Hengjie

+0

Mam ten sam problem w Firefox v37.0.1. – phylae

Odpowiedz

2

Kiedy mówisz, że to nie działa, czy otrzymujesz błędy (w konsoli), czy zwraca 0? Zwrócenie 0 dla ustawienia automatycznego jest najwyraźniej problemem w różnych przeglądarkach. Można używać lekkiej biblioteki jSizes, która zwraca wszystkie dane w pikselach. Pozwoli to zaoszczędzić na konieczności faff around z outerWidth, itp.

+0

Mam na myśli, że zwraca 0 –

+0

ten lib return 0, gdy 'margin: auto'. Czy istnieje sposób na uzyskanie marginesu w tym przypadku? –

+0

jQuery (i prawdopodobnie vanilla JS) również zwraca 0px dla "auto". Nie sądzę, byś mógł uzyskać wartość 'auto' ** niezawodnie i konsekwentnie ** w całej przeglądarce. auto oznacza "pozwól przeglądarce zdecydować" i to jest ta wartość oparta na przeglądarce, którą czytasz. –