2010-03-30 11 views
5

Czy można zmienić pozycję DIV z absolutnej na względną (i względną na bezwzględną)? DIV powinien pozostać w tym samym miejscu.Konwersja pozycji absolutnej na względną

+1

Czy pytasz "Czy pozostanie w tym samym miejscu?". Jeśli tak, to tak, ale jako względny, będzie w obiegu dokumentów, absolutny, nie będzie. – Zoidberg

+0

Mam absolutnie pozycjonowane elementy, które powinny zostać przekonwertowane na względne.Problem polega na tym, że nie mogę obliczyć względnej prawej pozycji (góra, lewo), więc elementy będą przechowywane na swoich miejscach. – John

Odpowiedz

5

można zmienić ten atrybut z

$(object).css({position: 'absolute'}); 

Na przykład:
Można użyć metod jQuery za .position() lub .offset() ustawienie „top” i atrybut css „left” aswell, że sposób Twój obiekt powinien pozostać w jego pozycji zmienia się z względnego -> absolutny.

Nie sądzę, że działa na odwrót.

kod demo: http://jsbin.com/uvoka

+0

$ (obiekt) .css ({position: 'absolute', top: dy, left: dx}); clone.css ({position: 'relative'}); nie działa - pozycja elementu po zmianie na względną, pozycja jest inna , ale kiedy zapisałem offset i ustawiłem go ponownie po zmianie na względny, pozycja jest taka sama $ (obiekt) .css ({position: 'absolute', góra : dy, left: dx}); var x = clone.offset(). Left; var y = clone.offset(). Top; clone.css ({position: 'relative'}); przesunięcie ({top: y, lewe: x}); – John

+0

szybkie przykładem possibilitys: http://jsbin.com/uvoka poważaniem, --Andy – jAndy

+0

Sugerowany "rozwiązanie" nie jest konwersja nic !!! –

0

Można łatwo zmienić go od względem absolutnym używając To wartości offsetLeft i offsetTop jako lewy i gorny stylów.

Odwrotnie jest trudniej. Zasadniczo musisz zmienić go na względny i zobaczyć, gdzie skończył się, a następnie obliczyć nowe wartości przesunięcia z bieżącego przesunięcia i pożądanej lokalizacji.

Należy zauważyć, że gdy pozycjonowanie jest względne, element jest częścią przepływu stron i może wpływać na inne elementy. Gdy pozycja jest bezwzględna, element znajduje się poza przepływem strony i nie wpływa na inne elementy. Jeśli więc zmienisz pozycję bezwzględną i względną, konieczne może być wprowadzenie zmian w innych elementach także wtedy, gdy nie chcesz ich przenosić.

8

Ponieważ formatowanie w komentarzach nie działają będę publikować rozwiązanie tutaj

$(object).css({position: 'absolute',top: dy, left:dx}); 
// dy, dx - some coordinates 
$(object).css({position: 'relative'}); 

Nie działa: położenie elementu po zmianie względem jest inny.

Ale kiedy przechowywany offset i ustawić go ponownie po zmianie względna pozycja jest taka sama:

$(object).css({position: 'absolute',top: dy, left:dx}); 
var x = $(object).offset().left; 
var y = $(object).offset().top; 
$(object).css({position: 'relative'}); 
$(object).offset({ top: y, left: x }); 
+0

Thx za udostępnienie tego. naprawdę mi pomogło. –

+0

Czy ten kod zmienia się z absolutnego na względny? – Varun

1

prototype.js ma element.absolutize() i element.relativize który działa bardzo dobrze.

Problem z wyjazdem z względem absolutnym że element.offsetTop i offsetLeft

tylko dać offset elemencie jego rodzica. Musisz zmierzyć cumualtive offsetu (tj

the offset of your element to its parent + 
the offset of the parent to its parent + 
the offset of its parent to its parent + 

itp)

+0

Zawsze zastanawiałem się, co ta metoda, faktycznie robi? Czy sprawi, że element dziecięcy "ciało" zachowa swoje położenie, dołączając je do ciała dokumentu? Czy może po prostu "absolutyzować" element w stosunku do rodzica? Jeśli to drugie, użyję rozwiązania powyżej twojego. Dzięki –

2

Jeśli naprawdę chcesz, aby uzyskać całkowitą górną przesunięcie elementu, który jest dzieckiem z elementów o pozycjach bezwzględnych i względnych mogłeś użyj tej funkcji

to jest w zasadzie kod dla rozwiązania podanego przez gniotownik powyżej.

+0

Jest to idealne rozwiązanie dla elementów wewnątrz rodzica bez ciała, co jest dokładnie tym, czego wymagam. Dzięki. Właściwie używam framework prototype.js, więc zastanawiałem się, czy "absolutize()" robi to samo, co wspomniano poniżej, ale mam wrażenie, że czyni element jedynie "absolutnym", w stosunku do swojego rodzica, a nie do document body.So, użyję twojego rozwiązania ... –

Powiązane problemy