CSS position property
The position
Property in CSS
The position
property in CSS controls how an element is positioned in the document. It determines the positioning context, which affects how the element is placed relative to other elements and the viewport. Here’s an overview of the main values of the position
property and how they work:
1. position: static;
Default Value: All HTML elements are positioned
static
by default.Behavior: The element is positioned according to the normal document flow.
top
,right
,bottom
, andleft
properties do not apply.Use Case: Use this for elements that should follow the natural flow of the document.
div { position: static; }
2. position: relative;
Behavior: The element is positioned relative to its normal position in the document flow. The
top
,right
,bottom
, andleft
properties can be used to adjust the element's position relative to where it would normally be.Use Case: Useful when you need to nudge an element from its normal position without affecting the layout of surrounding elements.
.relative { position: relative; top: 10px; /* Moves the element 10px down from its normal position */ left: 20px; /* Moves the element 20px right from its normal position */ }
3. position: absolute;
Behavior: The element is removed from the normal document flow and positioned relative to its nearest positioned ancestor (an ancestor with
position: relative
,absolute
,fixed
, orsticky
). If no such ancestor exists, it is positioned relative to the initial containing block (usually thehtml
element).Use Case: Ideal for elements that need to be positioned at specific coordinates within a container.
.absolute { position: absolute; top: 50px; /* Positions the element 50px from the top of its positioned ancestor */ left: 100px; /* Positions the element 100px from the left of its positioned ancestor */ }
4. position: fixed;
Behavior: The element is positioned relative to the viewport and stays in the same place even when the page is scrolled. It is removed from the normal document flow.
Use Case: Useful for creating sticky headers, footers, or sidebars that remain visible as the user scrolls.
.fixed { position: fixed; top: 0; /* Positions the element at the top of the viewport */ right: 0; /* Positions the element at the right of the viewport */ }
5. position: sticky;
Behavior: The element toggles between
relative
andfixed
positioning, depending on the user's scroll position. It behaves likerelative
until a certain scroll position is reached, after which it behaves likefixed
.Use Case: Useful for elements that should stick to a point when scrolling but remain in the document flow otherwise (e.g., sticky navigation bars).
.sticky { position: sticky; top: 0; /* Sticks to the top of the container when scrolling */ }
6. z-index
Property
Description: Controls the stack order of positioned elements (those with
position
set to anything other thanstatic
). Elements with a higherz-index
are displayed in front of those with a lowerz-index
.Use Case: Useful for overlapping elements where you need to control which one appears on top.
.box1 { position: absolute; z-index: 1; /* This element will be behind .box2 */ } .box2 { position: absolute; z-index: 2; /* This element will be in front of .box1 */ }
Positioning Properties
When an element is positioned with relative
, absolute
, fixed
, or sticky
, you can use the following properties to adjust its position:
top
: Moves the element down from the top of its containing block.right
: Moves the element left from the right of its containing block.bottom
: Moves the element up from the bottom of its containing block.left
: Moves the element right from the left of its containing block.
Example Usage
.container {
position: relative;
width: 400px;
height: 200px;
background-color: lightblue;
}
.child {
position: absolute;
top: 50px;
left: 50px;
width: 100px;
height: 100px;
background-color: coral;
}
.fixed-header {
position: fixed;
top: 0;
width: 100%;
background-color: darkblue;
color: white;
}
.sticky-nav {
position: sticky;
top: 10px;
background-color: yellow;
}
Visual Example
- Relative: A box positioned relative to its normal location.
- Absolute: A box absolutely positioned within a container.
- Fixed: A header fixed to the top of the viewport.
- Sticky: A navigation bar that sticks to the top as you scroll down.