2015-06-19 16 views
5

Domyślnie element HTML, którego pozycja jest ustawiona na "bezwzględny", zostanie umieszczony względem okna podglądu przeglądarki.Jak mogę zmienić element nadrzędny odsunięcia bezwzględnie umieszczonego elementu CSS?

Ale jeśli jeden z przodków elementu jest ustawiony na pozycję niestatyczną, element zostanie umieszczony względem tego przodka. Ten przodek jest "rodzicem offsetowym" elementu.

Problem: chcę pozycjonować bezwzględnie element względem rzutni, ale niestety jeden z jego przodków jest względnie pozycjonowany, więc został jego rodzicem odsuniętym. Ponieważ modyfikuję temat innej firmy, nie mogę go przenieść ani usunąć względnego położenia jego przodka.

Używając CSS lub JavaScript, czy mogę w efekcie ustawić lub zresetować element macierzysty offsetu elementu? Rozumiem, że właściwość DOM [element] .offsetParent jest tylko do odczytu, ale czy istnieje jakiś sposób pośredniego wywołania jej ustawienia?

+1

Nie można użyć JavaScript, aby przenieść element w hierarchii? – j08691

+0

@ j08691To brzmi obiecująco +1. Ogólnie rozumiem, o czym mówisz, ale czy możesz podać nieco więcej szczegółów w odpowiedzi? –

+0

@ j08691Poznałem tego trochę więcej. Czy mówisz o czymś takim jak jQuery .detach(), a następnie .append()? –

Odpowiedz

3

Możesz użyć Javascript, aby przesunąć element. Oto rozwiązanie jQuery z funkcją prependTo(), można również użyć appendTo().

http://jsfiddle.net/6557cnew/

$(function() { 
 
    $('.absolute').prependTo('body'); 
 
});
.relative { 
 
    position: relative; 
 
    left: 50px; 
 
    top: 50px; 
 
    border: 1px solid blue; 
 
    width: 100px; 
 
    height: 100px; 
 
} 
 
.absolute { 
 
    position: absolute; 
 
    border: 1px solid red; 
 
    left: 0; 
 
    top: 0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<div class="relative"> 
 
    relative 
 
    <div class="absolute"> 
 
     absolute 
 
    </div> 
 
</div>

+0

Bardzo ładne. Myślałem, że będziemy musieli usunąć go z bieżącej lokalizacji za pomocą .detach(), ale widzę teraz w dokumentacji prependTo(), że jest to ruch, a nie klon. –

0

Właściwość CSS position: fixed używa rzutni zamiast przodka. Jednak podczas przewijania jest on ustalany na ekranie, więc może to być problem.

0

Możesz użyć wartości offsetu nadrzędnego, aby przenieść dziecko - po prostu obliczyć wartość dziecka na podstawie renderowanych współrzędnych rodzica względem okna.

Powiązane problemy