DEV Community

Cover image for CSS Position Property Explained!

CSS Position Property Explained!

Suraj Vishwakarma on March 27, 2021

Introduction We struggle a lot while positioning elements at the right place on the webpage. Sometimes we also find that top/left/bottom...
Collapse
 
indoor_keith profile image
Keith Charles • Edited

It's worth saying, absolute is not positioned based off the parent element. It's based on the first ancestral element with a position other than static. If there is no ancestral element with a non static position set, it will base its position on body

Collapse
 
afif profile image
Temani Afif

If there is no ancestral element with a non static position set, it will base its position on body --> it's not really the body but the initial containing block as defined here: w3.org/TR/CSS21/visudet.html#conta... it's upper than the body (and the html) element.

Example: jsfiddle.net/c9hbam0d/1/ (see how the element is at the bottom of the screen and not the bottom of the body or the html).

Collapse
 
indoor_keith profile image
Keith Charles

ah yup, so it can go all the way up to document if body or html isn't positioned as well. 👍

Collapse
 
afif profile image
Temani Afif

you mean what by It will scale on all browser ?
Also saying this Use when to position element according to parent element is not very accurate because we don't always need to position element according to its parent, it can be any ancestor based on the use case.
Similar to what you said for position:relative. Its purpose is not only to be used when dealing with a child having position:absolute. We use position:relative to be able to use z-index for example (among many other use cases)

Collapse
 
ravavyr profile image
Ravavyr

I have to say here that ANY time you use position:absolute, it should be done in relation to its parent which should be given relative position unless the parent itself is also absolute or fixed.
There is zero reason you ever need to put something absolute to anything other than its own parent and following this rule also saves you a thousand headaches in the future.

Another rule is that anything positioned absolute should also have a top/bottom and left/right placement defined to avoid crossbrowser issues [mostly safari these days and IE of course]

Collapse
 
afif profile image
Temani Afif • Edited

There is zero reason you ever need to put something absolute to anything other than its own parent --> sorry but I disagree with this and I can give you a ton of examples where we have to position the element in relation to another ancestor which is not the parent element. Here is a random example I just found: stackoverflow.com/a/63585953/8620333 .. If I have time I can give you no less than 20 different uses cases where we don't position the position:absolute element in relation to its parent.

Thread Thread
 
ravavyr profile image
Ravavyr

It's not "bad" or "wrong", but you could achieve the same by setting the same image as background to all 3 with a position and size, though I'll admit your solution in this case is simpler. I don't like that it applies the :before 3 times as a big background to the parent, but at the same time it's easier than figuring out the position and size values the other way. You still don't NEED to do it this way.

Show me the other 20 cases.

Thread Thread
 
afif profile image
Temani Afif

You still don't NEED to do it this way. --> give me your solution that can work responsively in all the cases :) (considering the fact that you can have any number of elements and the margin can be different and so on).

Ok I will give you 20 or more ;) stay tuned and I will message you with different examples when I get time.

Thread Thread
 
afif profile image
Temani Afif • Edited

@ravavyr

2) jsfiddle.net/we79jdpg/
3) jsfiddle.net/v9jd2cuz/
4) jsfiddle.net/w80zvxj3/
5) jsfiddle.net/k768weua/
5.1) jsfiddle.net/b8c2j7xz/

Here you go with another 4 uses cases so a total of 5 now in addition to first one I gave in my first comment (I am not couting them 6 since the 5.1 is similar to the 5 ;) ). Explanation inside the code. More will come soon.

Thread Thread
 
afif profile image
Temani Afif

@ravavyr

6) jsfiddle.net/cenmkaj5/
7) jsfiddle.net/3fc7euwo/1/
8) jsfiddle.net/98ntsjrb/ (refer to this article to understand the logic of this code: dev.to/afif/responsive-hexagon-gri...)

Thread Thread
 
afif profile image
Temani Afif
Thread Thread
 
ravavyr profile image
Ravavyr

Still owe me 10 ;)
I do find some of the examples represent the exact same case and these are not commonly used layouts/designs/behaviors.
I do also applaud your perseverance to show me examples :)
You win. There are some cases where it's needed. I'd say 90% [maybe more] of the time you don't need to though.

Collapse
 
indoor_keith profile image
Keith Charles

Didn't realize someone already mentioned position absolute 😅

Collapse
 
aalphaindia profile image
Pawan Pawar

Nice one!

Collapse
 
surajondev profile image
Suraj Vishwakarma

Thank you 😊

Collapse
 
mindninjax profile image
Rishabh Singh ⚡

Awesome guide 😄

Collapse
 
designeranna1 profile image
Designer Anna

Those animations helped a lot to easily understand those CSS properties.
Thanks for writing this article.