Skip to content

 Position

The position property defines how an element is placed in the document — static, relative, absolute, fixed, or sticky.

1. static (default)

  • Normal document flow
  • top, left, right, bottom have no effect
div {
  position: static;
}

2. relative

  • Positioned relative to its normal position
  • Leaves original space in the flow
.box {
  position: relative;
  top: 10px;
  left: 20px;
}

Used to nudge elements or create a reference for absolutely positioned children.

3. absolute

  • Removed from document flow
  • Positioned relative to the nearest positioned ancestor
  • If none, it uses the html (viewport)
.child {
  position: absolute;
  top: 0;
  right: 0;
}

Requires parent to be relative, absolute, or fixed if you want local positioning.

4. fixed

  • Removed from flow
  • Positioned relative to the viewport
  • Stays in place when scrolling
.header {
  position: fixed;
  top: 0;
  width: 100%;
}

Used for navbars, back-to-top buttons, etc.

5. sticky

  • Acts like relative until a threshold is reached, then becomes fixed
  • Requires a top/left/right/bottom value
.menu {
  position: sticky;
  top: 0;
}

Parent must have height for sticky to work properly.

6. Z-Index

Use z-index to control stacking order (higher = on top).

.box {
  position: absolute;
  z-index: 10;
}

Only works on positioned elements (not static).

Summary Table

Position In Flow Offset Allowed Scrolls with Page Reference Point
static Normal document flow
relative Own original position
absolute Nearest positioned ancestor
fixed Viewport
sticky ✅/❌ ✅/❌ Toggles: self → viewport