CSS Daily 1 - CSS Positions
The position property can help you manipulate the location of an element, for example:
.element {
position: relative;
top: 20px;
}
Relative to its original position the element above will now be nudged down from the top by 20px. If we were to animate these properties we can see just how much control this gives us (although this isn’t a good idea for performance reasons):
Values:
- static: every element has a static position by default, so the element will stick to the normal page flow. So if there is a left/right/top/bottom/z-index set then there will be no effect on that element.
- relative: an element’s original position remains in the flow of the document, just like the static value. But now the left/right/top/bottom/z-index will work. The positional properties “nudge” the element from the original position in that direction.
- absolute: the element is removed from the flow of the document and other elements will behave as if it’s not even there whilst all the other positional properties will work on it.
- fixed: the element is removed from the flow of the document like absolutely positioned elements. In fact, they behave almost the same, only fixed-positioned elements are always relative to the document, not any particular parent, and are unaffected by scrolling.
- sticky: the element is treated like a relative value until the scroll location of the viewport reaches a specified threshold, at which point the element takes a fixed position where it is told to stick.
- inherit: the position value doesn’t cascade, so this can be used to specifically force it to, and inherit the positioning value from its parent.
Absolute:
If a child element has an absolute value then the parent element will behave as if the child isn’t there at all:
.element {
position: absolute;
}
And when we try to set other values such as left, bottom, and right we’ll find that the child element is responding not to the dimensions of its parent, but to the document:
.element {
position: absolute;
left: 0;
right: 0;
bottom: 0;
}
To make the child element positioned absolutely from its parent element we need to set this on the parent element itself:
.parent {
position: relative;
}
Now properties such as left, right, bottom and top will refer to the parent element, so that if we make the child element transparent we can see it sitting right at the bottom of the parent.
Fixed:
The fixed value is similar to absolute as it can help you position an element anywhere relative to the document, however, this value is unaffected by scrolling. See the child element in the demo below and how, once you scroll, it continues to stick to the bottom of the page:
.parent {
color: white;
padding: 70px;
position: relative;
background-color: #0074d9;
}
.element {
background-color: rgba(0,0,0,.3);
padding: 20px;
color: rgba(255,255,255,.4);
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
Sticky:
The sticky value is like a compromise between the relative and fixed values. As of this writing, it is currently an experimental value, meaning it is not part of the official spec and is only partially adopted by select browsers. In other words, it’s probably not the best idea to use this on a live production website.
What does it do? Well, it allows you to position an element relative to anything on the document and then, once a user has scrolled past a certain point in the viewport, fix the position of the element to that location so it remains persistently displayed like an element with a fixed value.
Take the following example:
.element {
position: sticky; top: 50px;
}
The element will be relatively positioned until the scroll location of the viewport reaches a point where the element will be 50px from the top of the viewport. At that point, the element becomes sticky and remains at a fixed position 50px top of the screen.
The following demo illustrates that point, where the top navigation is default relative positioning and the second navigation is set to sticky at the very top of the viewport. Please note that the demo will only work in Chrome, Safari and Opera at the time of this writing.
credit : %[https://css-tricks.com/]
Follow for more: %[https://www.linkedin.com/in/jishanpatel7/]
Subscribe to my newsletter
Read articles from Jishan Pathan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Jishan Pathan
Jishan Pathan
Hey there! I'm Jishan👋 I have rocking experience in the role of SDE-1 Frontend at UniScholars and UniAcco, two amazing platforms helping students chase their study abroad dreams. 🌍🚀 I hold a BE in Mechanical Engineering from Savitribai Phule Pune University, where I first caught the tech bug and fell in love with new technologies. 🎓💻 In my day-to-day, I dive into full-stack development using JavaScript, TypeScript, React, Next, and other cool tech tools. 🛠️ I'm all about crafting web pages that are not just pretty but responsive and user-friendly across devices.