Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

position: relative keeps an element in the page’s normal layout and lets you shift how it is drawn. position: absolute and position: fixed take an element out of normal flow; absolute positioning uses a containing block, while fixed positioning normally uses the viewport. The right choice depends on whether the element should retain layout space, what its offsets should be measured against, and whether it should move as the page scrolls.

How the three positioning modes differ

Mode Does it keep normal-flow space? What do offsets usually reference? Common use
relative Yes. Its original layout space remains. The element’s normal position. A small visual adjustment; it can also establish a local reference for descendants.
absolute No. It is removed from normal flow. The nearest ancestor that establishes its containing block. A badge or overlay placed within a component.
fixed No. It is removed from normal flow. Usually the viewport in continuous media, unless an ancestor establishes another containing block. A floating control or persistent navigation.

The offset properties—top, right, bottom, and left—describe where to place an element relative to its applicable reference. They do not choose that reference.

When to use relative positioning

Choose position: relative when an element should still take part in ordinary layout but needs a visual shift. The space it occupied before the shift stays reserved, and neighboring non-descendant elements do not normally move to follow its painted position. Large offsets can therefore create overlap or an apparent gap.

.label {
  position: relative;
  top: 0.25rem;
  left: 0.5rem;
}

Relative positioning is also commonly used on a component to establish a containing block for an absolutely positioned child. The parent itself need not have an offset:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
.card {
  position: relative;
}

.card__badge {
  position: absolute;
  top: 0.5rem;
  right: 0.5rem;
}

When to use absolute positioning

Use position: absolute when an element should be placed within a component without reserving space in the surrounding layout—for example, a corner badge or an overlay. Its offsets are calculated from its containing block, usually established by a qualifying ancestor. position: relative is a common way to create that local reference, but it is not the only CSS property that can establish a containing block.

If no nearer ancestor establishes one, the element may use a more distant reference, ultimately the initial containing block. That can make a badge appear positioned relative to the page rather than the component you intended. When that happens, inspect the ancestor chain and ensure the intended component establishes the reference.

When to use fixed positioning

Use position: fixed when an element should stay at a viewport-relative location as the document scrolls, such as a floating help or back-to-top control:

.help-button {
  position: fixed;
  right: 1rem;
  bottom: 1rem;
}

In continuous media, fixed elements are normally positioned against the viewport. That is not guaranteed in every document tree: properties on an ancestor, including transforms and containment-related properties, can establish a different containing block for fixed descendants. If a supposedly fixed element moves or appears anchored within a component, inspect its ancestors.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

How to choose the right mode

  • Keep relative when the element belongs in normal layout and only needs a visual adjustment.
  • Use absolute when the element should not consume layout space and should be placed within a component’s containing block.
  • Use fixed when it should remain in a viewport-relative position during scrolling, after checking that no ancestor changes its containing block.

For component-local decoration, the usual pattern is to establish a containing block on the component and position the decoration absolutely. For debugging any surprising placement, distinguish the element’s flow behavior from the reference used to calculate its offsets.

For the formal rules and additional examples, see the MDN reference for the CSS position property, MDN’s guide to containing blocks, and the MDN positioning tutorial. The normative details are in the W3C CSS Positioned Layout Module Level 3.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.