Is there any way to absolutely position a div relatively to its sibling? For example: Inside a div there are two other divs - div1 and div2. I want to absolutely position div2 relatively to div1.
-
1Depending on the kind of absolute positioning you need to do, you could add a sibling div (div2) directly under div1 and make this relatively positioned. Then you could have a child inside of div2 that is positioned absolutely. This would give you some control over positioning of div2 relative to div1. – Omar Shishani Jun 16 '22 at 18:43
5 Answers
Absolute positioning is dependent on the "current positioning context", which may include a parent element (if absolutely or relatively positioned) but will never include a sibling element.
Can you reorganize your dom so that you have a parent-child instead of siblings? If so, you could set the parent's position to relative or absolute and the child's position to absolute and the child's position would remain absolute in relation to the parent.

- 8,290
- 3
- 33
- 37
There is no way using absolute position, according to w3c specification:
In the absolute positioning model, a box is explicitly offset with respect to its containing block
— relatively to parent block, not to sibling one
And no way to use relative positioning, also according to to w3c specification:
Once a box has been laid out according to the normal flow or floated, it may be shifted relative to this position.
— relatively to block's position, not to sibling block
summary:
Nobody can solve problem you described

- 1
- 1

- 19,264
- 8
- 60
- 114
-
Good answer ! I solved it in a fiddle to make sure @Arg Geo understands it well :) – Ravi May 16 '12 at 19:10
-
7I dont agree with this answer. A relative positioned element is positioned relative to the normal flow, and the normal flow depends on the sibling elements. So implicitly, using relative positioning will position your element relative to the sibling element(s). – Martin Andersson Jun 19 '13 at 09:31
The correct answer is: No, but at least its vertical position can be affected by siblings.
As the other answers state, the position of an absolutely positioned div is relative to its ancestors. To be precice, it is relative to the first ancestor that isn't statically positioned, when traversing up the DOM-tree.
However: an absolutely positioned element will also be affected by its siblings (the ones that come before the element). If those preceding siblings are relatively positioned, and your absolutely positioned element has its top-property not set, then it's placed vertically below those relatively positioned siblings.
<div class="relativeContainer">
<div class="relative block">relative 1</div>
<div class="relative block">relative 2</div>
<div class="absoluteTopZero block">absolute top 0</div>
<div class="absoluteTopInherited block">absolute</div>
</div>
See this fiddle: https://jsfiddle.net/fgxeu54t/28/

- 378
- 5
- 13
Depending on your needs, you can float them or position both absolute with appropriate left/top/right/bottom values.
Post your markup and explain exactly what you're trying to achieve.

- 3,291
- 5
- 27
- 45
-
I am developing a WordPress theme and I want to apply these settings inside articles. So I can't absolutely position both because height won't be the same in every article. – Arg Geo May 16 '12 at 19:06
Try it with jquery
<script type="text/javascript">
$('#div2').css('margin-left', $('#div1').outerWidth() +XXX + 'px');

- 3,505
- 5
- 36
- 67
-
This works fine Denny but I think Farray's solutions is much simpler. Thank you very much! – Arg Geo May 16 '12 at 19:13