By default, an HTML element whose position is set to "absolute" will be positioned relative to the browser's viewport.
But if one of the element's ancestors is set to a non-static position, the element will be positioned relative to that ancestor. That ancestor is the element's "offset parent".
The problem: I want to absolute-position an element relative to the viewport, but unfortunately one of its ancestors is relatively positioned, so that has become its offset parent. Since I'm modifying a 3rd-party theme, I can't move the element or remove its ancestor's relative positioning.
Using CSS or JavaScript, is it possible for me to, in effect, set or reset an element's offset parent? I understand that the DOM property [element].offsetParent is read-only, but is there some way to indirectly have the effect of setting it?
Solution with the CSS position property ¶ It is possible to set absolute positioning of a child element relative to the parent container. For that, you must specify the position property with its “relative” value on the parent element.
It moves the tag based on where it currently is, relative to its usual place and relative to its surrounding tags without affecting their layout. Using these offsets and position:relative, you can also change the order in which elements appear on the page.
For that, you must specify the position property with its “relative” value on the parent element. If we don’t specify the position of the parent element, the child <div> will be positioned relative to the page. Watch a video course CSS - The Complete Guide (incl. Flexbox, Grid & Sass)
On a Window's machine, right click on the element you want to select. A menu will then appear and from there select Inspect. The Chrome Developer Tools will open. Select the Computed tab and from there either scroll down to the position element or in the filter search box, type in position. What is the default position of HTML elements in CSS?
You could use Javascript to move the element. Here is the jQuery solution with prependTo()
function, you could also use 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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With