Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there anything wrong with positioning all elements relatively?

Often I find myself attaching a class to an element just to give it position: relative; so that I can position it's children using position: absolute;

Would there by anything wrong, or should I say, would anything break if I was to write:

* {
  position: relative;
}

or perhaps the below example, as these are usually the only elements I require the relative positioning on:

div, navbar, footer, section, aside, header, article {
  position: relative;
}

According to W3schools, all elements are position: static; by default which is positioned according to the normal flow of the page.

"HTML elements are positioned static by default. A static positioned element is always positioned according to the normal flow of the page."

and according to the same source, relatively positioned elements also position according to the normal flow of the page unless overridden with CSS:

"The content of relatively positioned elements can be moved and overlap other elements, but the reserved space for the element is still preserved in the normal flow."

like image 397
Jon Kyte Avatar asked Apr 11 '14 09:04

Jon Kyte


People also ask

What is a relatively positioned element?

To recap, elements that are relatively positioned can move around while still remaining in the regular document flow. They also do not affect the layout of the rurrounding elements. What is position absolute in CSS?

How to set the position of an element with fixed positioning?

An element with fixed positioning allows it to remain at the same position even we scroll the page. We can set the position of the element using the top, right, bottom, left. Example: The below example illustrates the CSS positioning element by using the position: fixed property. to solve coding problems. Enrol now! Master core

What happens when you change the position of an element?

If you change it to position: absolute, anything following it displays on top of it because it is no longer in the normal flow of the document. Elements on a webpage are often used to set a value of position: relative with no offset value established, which means that element remains exactly where it would appear in normal flow.

Can an element be positioned at the top of the page?

You can use either top or bottom — since an element cannot be positioned according to both of these values — and either right or left . If an element is set to a position of absolute, but it has no non-statically positioned ancestors, then it is positioned relative to the body element, which is the highest level element of the page.


2 Answers

Yes, it is. If you try to position one element absolute it is positioned relatively to the closest ancestor, which has a CSS position other than static.

If every element has position:relative, this would be the direct parent.

But you might want to position the absolute element relatively to an element further up in the DOM tree or maybe absolutely on the page body.

At some point you will have the situation where you are not in full control of the HTML. Then you will see, that it is counterproductive to set everything relative.

An example might be a phat layer menu. You have the layer inside a .menu class somewhere deep in the jungle of hierarchical ul li elements. This should be positioned relative to the .menu element's position. You might not want to change the DOM tree here.

like image 128
yunzen Avatar answered Nov 15 '22 13:11

yunzen


If you apply position: relative to all elements in the page, you won't be able to use position: absolute efficiently, because you can't position an element to the grandparent and you will probably break in a unpredictable way external plugins/modules that rely on position: absolute.

You may encounter problems with z-index (for example in dropdowns menu), and you'll end up overwriting this behaviour with position: static and position: absolute.

like image 23
Microcipcip Avatar answered Nov 15 '22 13:11

Microcipcip