2010-03-30 103 views
5

是否可以將DIV位置從絕對位置改變爲相對位置(以及相對於絕對位置)? DIV應保持在同一地點。將絕對位置轉換爲相對位置

+1

你問:「它會留在同一個地方嗎?」。如果是這樣,是的,但是作爲相對的,它將在文檔流中,絕對不會。 – Zoidberg 2010-03-30 14:03:29

+0

我絕對定位了應該轉換爲相對的元素。問題是我無法計算相對的正確位置(頂部,左側),所以元素將保留在他們的位置。 – John 2010-03-30 14:12:00

回答

5

您可以更改屬性與

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

例如:
你可以使用jQuery的方法.position().offset()設置「頂」和「左」 CSS屬性藏漢,這樣,你的對象應該留下在它的位置從相對 - >絕對變化 。

我不認爲這是反之亦然。

演示代碼:http://jsbin.com/uvoka

+0

$(object).css({position:'absolute',top:dy,left:dx}); clone.css({position:'relative'}); 不起作用 - 更改爲相對後的元素位置,位置不同 但是當我存儲偏移量並在更改爲相對後再次設置它時,位置相同 $(object).css({position:'absolute',top :dy,left:dx}); var x = clone.offset()。left; var y = clone.offset()。top; clone.css({position:'relative'}); offset({top:y,left:x}); – John 2010-03-30 14:28:09

+0

possibilitys的簡單的例子: http://jsbin.com/uvoka ​​ 親切的問候, --Andy – jAndy 2010-03-30 16:44:41

+0

建議的「解決方案」未進行轉換什麼! – 2014-04-29 16:08:24

0

你可以很容易地從相對使用其更改爲絕對的offsetLeft和價值觀的offsetTop左和頂部的風格。

另一種解決方法比較困難。您基本上必須將其更改爲相對值並查看其結束位置,然後根據當前偏移量和所需位置計算新的偏移值。

請注意,當定位是相對的時,該元素是頁面流的一部分,可能會影響其他元素。當位置是絕對位置時,該元素位於頁面流之外,不會影響其他元素。因此,如果您在絕對定位和相對定位之間切換,您也可能需要對其他元素進行更改,如果您不希望它們移動。

8

因爲在評論格式不工作,我會在這裏發佈

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

解決方案不起作用:更改爲相對後元素位置是不同的。

但是,當我存儲的偏移並改變相對之後再進行設置,位置是相同的:

$(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分享此。真的幫助了我。 – 2011-03-15 23:23:19

+0

這段代碼是否從絕對變爲相對? – Varun 2011-04-13 05:43:55

1

prototype.js中有element.absolutize()和element.relativize它工作得很好。

從相對於絕對要的問題是, element.offsetTop和offsetLeft

只給你的元素到其父的偏移。 你需要測量cumualtive偏移量(即

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

等)

+0

我一直想知道這個方法實際上是做什麼的?它是否會使非「身體」子元素保持其位置,同時將其附加到文檔的身體?或者它只是「絕對化」一個相對於它的父項的元素?如果是後者,那麼我將使用您的解決方案。謝謝 – 2018-03-05 21:03:42

2

如果你真的想要得到的總頂部是絕對和相對位置元素的子元素的偏移你能使用此功能

function calcTotalOffsetTop(elm) 
{ 
var totalOffsetTop = 0, 
curr   = elm; 

while(curr.parent().is(':not(body)')) 
{ 
    curr   = curr.parent(); 
    totalOffsetTop += curr[0].offsetTop; 
} 
return totalOffsetTop; 
} 

這是基本上上面給出的解決方案的代碼。

+0

這非常適合非身材父母內部的元素,這正是我所需要的。謝謝。實際上,我使用prototype.js框架,所以我想知道'absolutize()'是否做同樣的事情,如下所述,但我有一種感覺,它只會使元素'絕對',相對於它的父類而不是文件正文。所以,我會用你的解決方案... – 2018-03-05 20:58:55