position: relative
:
- What it means: The element stays in its normal spot on the page, but you can move it around a bit from there.
- How it works: Imagine you have a box sitting on a table. You can nudge the box a little to the right, left, up, or down, but it still occupies its original space on the table.
- Use case: If you want to adjust the position of an element slightly without changing the layout around it.
.relative-box {
position: relative;
top: 20px; /* Moves the element 20px down from its normal position */
left: 10px; /* Moves the element 10px to the right */
}
position: fixed;
What it means: The element is stuck to a spot on the screen and doesn’t move, even when you scroll the page.
How it works: Picture a sticky note on your computer screen. No matter how much you scroll through a webpage, that sticky note stays right where you put it.
Use case: Great for things like a header or a navigation bar that should always be visible.
.fixed-box {
position: fixed;
top: 0;
right: 0;
width: 100px;
height: 100px;
}
position:sticky
:-
- What it means: The element starts in its normal spot, but as you scroll, it sticks to a certain place on the screen.
- How it works: Think of it like a magnet. As you scroll down, it gets “stuck” at a certain point and stays there until you scroll past a certain area.
- Use case: Perfect for a menu or header that you want to stay at the top of the page as you scroll down.
.sticky-box {
position: sticky;
top: 0; /* The element will stick to the top of the viewport */
background-color: yellow;
}
position: absolute
:-
- What it means: The element is placed exactly where you want it, based on its nearest parent that is positioned (i.e., has
relative
,absolute
,fixed
, orsticky
applied). - How it works: Imagine sticking a photo to a specific spot on a wall. The photo is now fixed in that exact position on the wall, not where it would naturally fall.
- Use case: Useful for placing an element in a precise spot inside a container or on the page.
.absolute-box {
position: absolute;
top: 50px; /* 50px from the top of the positioned ancestor or document body */
left: 20px; /* 20px from the left of the positioned ancestor or document body */
}