CSS position Property Generator
Switch between the 5 CSS position values (static, relative, absolute, fixed, sticky) in a GUI, see how top/right/bottom/left and z-index behave in a live preview, and generate the matching CSS code for free.
Comparing the five values of position
`position` is the property deciding where an element sits, and it takes five values: `static`, `relative`, `absolute`, `fixed` and `sticky`. This tool lets you switch between them while confirming on the spot how `top`, `right`, `bottom`, `left` and `z-index` behave, then generate the CSS.
**When an element placed with `absolute` flies somewhere unexpected, the cause is almost always the same: it is positioned against the nearest ancestor whose `position` is not `static`.** Where no such ancestor exists, the element falls back on the page as a whole. **Forgetting `position: relative` on the parent** accounts for nearly every instance. **`sticky` has a well-known pitfall of its own: an `overflow: hidden` or `overflow: auto` anywhere among the ancestors stops it sticking.** And because `z-index` is confined within a nested unit called a stacking context, **an element inside a context that sits below another cannot rise above it however large the value.**
How to use it
- Switch the value of position Trying all five in turn shows how each one differs in what it positions against.
- Move the offsets **Confirm that `top` and its fellows have no effect at all while the value is `static`.**
- Change z-index You can see how the stacking order shifts.
- Copy the generated CSS Once the placement is what you were after, it can be pasted straight into your code.
Tips for getting more out of it
- Switch to position: relative and set top/left to shift Box B visually away from its original spot — notice Box C (the element after it) doesn't move at all.
- Switch to absolute or fixed and Box B is pulled entirely out of the normal flow, so Box C shifts up to fill the gap it left behind.
- z-index controls stacking order when elements overlap, but it has no effect on position: static elements — try changing position before testing "Set z-index".
- position: sticky only works inside a scrollable container. Scroll the preview box itself to see the element lock into place partway through.
- The generated CSS can be copied and pasted straight into your own stylesheet — try it on a real page to confirm it looks the same.
Where it comes in useful
Sticking a heading to the top of the view
**With `sticky`, the heading stays put as the page scrolls.**
Overlaying a badge or icon on a corner
`relative` on the parent with `absolute` on the child is the basic pattern.
Placing a fixed button
`fixed` is positioned against the viewport, so it does not move as the page scrolls.
Investigating a stacking problem
**When an element hides beneath another, a stacking context is the thing to suspect.**
Position terms
- Static
- The initial value. **While it holds, neither the offsets such as `top` nor `z-index` has any effect.**
- Relative
- Shifts the element **from where it would otherwise have been.** It moves, yet the space it came from stays reserved.
- Absolute
- **Positions against the nearest ancestor whose `position` is not `static`.** Failing that, the page as a whole serves.
- Fixed
- Positions against the viewport, so the element stays put however far the page scrolls.
- Sticky
- Sits in its ordinary place until a given offset is reached, then sticks. **An `overflow` on an ancestor stops it working.**
- Stacking context
- The nested unit within which stacking order is settled. **A `z-index` inside one cannot be compared directly with elements outside it.**
Frequently Asked Questions
Side Note — The Long Road to Standardizing position: sticky
CSS has had static, relative, absolute, and fixed since its early days, but building a header or sidebar that stays in place only after you scroll past it required watching scroll events with JavaScript and manually toggling position: fixed. There was no way to express that behavior in CSS alone.
The idea behind position: sticky was actually proposed as early as 2012 in the CSS Positioned Layout Module Level 3 spec, but it proved tricky to implement well. Safari shipped an early, vendor-prefixed version (-webkit-sticky) around 2013, Chrome didn't support the standard sticky keyword until 2017, and it wasn't until roughly 2020 that all major browsers, including Firefox, could be relied on to support it consistently.
Under the hood, sticky's "locks in place partway through scrolling" behavior is best described as a hybrid of relative and fixed: the element behaves like relative under normal circumstances, then switches to behaving like fixed once the scroll position reaches the offset you specified. That switch only ever triggers within the scrollable range of the parent element — which is exactly why sticky so often appears to "not work" when a parent's overflow or height gets in the way.
Today, sticky is a staple web design technique — pinning a table's header row in place, keeping a table of contents visible while scrolling, and more. Eliminating the need for JavaScript-based scroll listeners was a genuine win for both performance and code simplicity.