- Basics
- Selectors
- Colors
- Units
- Inheritance, Specificity & Cascade
- !important and when to avoid it
- Box Model and Layout
- Display Property
- Position Property
- Flexbox
- Grid Layout
- Centering (vertical & horizontal)
- Z-index and Stacking Context
- Typography
- Visual Effects
- Responsive Design
- Animations
- Advanced CSS
- Best Practices and Accessibility
Centering (vertical & horizontal)
Learn how to center elements horizontally, vertically, or both using CSS Flexbox, Grid, and more with simple examples.
What is Centering?
In CSS, centering means positioning an element in the middle of its parent container. This can be done:
- Horizontally (from left to right)
- Vertically (from top to bottom)
- Both (perfectly centered in the center of the container)
Horizontal Centering
text-align: center;
(For Text or Inline Elements)
This method is used to center inline or inline-block elements like text, buttons, or spans.
<div class="container">
<p>This text is centered horizontally.</p>
</div>
CSS:
.container {
text-align: center;
}
margin: auto;
(For Block Elements)
This method is used for block-level elements with a fixed width.
<div class="container">
<p class="box">This box is centered horizontally.</p>
</div>
CSS:
.box {
width: 300px;
margin: 0 auto;
}
Note: This does not work without a defined width.
- Flexbox
<div class="container">
<div class="item">I’m horizontally centered using Flexbox.</div>
</div>
.container {
display: flex;
justify-content: center;
}
Vertical Centering
Vertical centering used to be hard in older CSS versions. But now we have simple ways using Flexbox and Grid.
- Flexbox
<div class="container">
<div class="item">I’m vertically centered!</div>
</div>
.container {
display: flex;
align-items: center;
height: 200px;
}
Note: The parent must have a height for vertical centering to work.
- Line Height (For Single-line Text)
<div class="container">
<span>Vertically centered text</span>
</div>
CSS:
.container {
height: 200px;
line-height: 200px; /* Makes the line box as tall as the container */
text-align: center; /* Horizontally centers inline text */
}
/* Optional: Reset the span's line-height to default.
This is helpful if the span has nested elements or icons.
But for single-line text, it's not required. */
.container span {
line-height: normal;
}
Note: Only works well for single-line text.
Centering Both (Horizontally + Vertically)
- Flexbox (Most Common & Reliable)
<div class="container">
<div class="item">Perfectly centered box</div>
</div>
CSS:
.container {
display: flex;
justify-content: center;
align-items: center;
height: 300px;
}
justify-content: center
: centers horizontallyalign-items: center
: centers vertically
- CSS Grid
<div class="container">
<div class="item">Centered using Grid</div>
</div>
CSS:
.container {
display: grid;
place-items: center;
height: 300px;
}
place-items: center
: shorthand for both horizontal and vertical centering.
- Position + Transform
<div class="container">
<div class="item">
I'm centered with absolute positioning with transform property!
</div>
</div>
CSS:
.container {
position: relative;
height: 300px;
}
.item {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
top: 50%; left: 50%;
puts the top-left corner in the centertransform: translate(-50%, -50%);
moves it back to actual center
This method is great for centering inside unknown-height containers, but this can be tricky with responsiveness.
Centering in Full Screen (Viewport)
To center content in the full height of the screen:
<div class="container">
<h1>I'm centered on the screen</h1>
</div>
CSS:
.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
100vh = 100% of viewport height
Centering Inline Elements
To center inline elements (e.g., <button>, <a>, <span>
), you can use the text-align property.
<div class="container">
<button>Centered Button</button>
</div>
CSS:
.container {
text-align: center;
}
Centering Images
Images are inline elements by default, so how you center them depends on the context — whether inside a block container, or you want to center the image itself as a block.
Horizontal Centering of an Image
Using margin: auto
on the image itself (make it block)
For this, the image needs to be a block-level element with a defined width.
<div class="container">
<img src="image.jpg" alt="Sample Image" />
</div>
CSS:
img {
display: block;
margin: 0 auto; /* centers block horizontally */
width: 300px; /* set image width */
}
Vertical Centering of an Image
Using Flexbox for vertical centering
<div class="container">
<img src="image.jpg" alt="Sample Image" />
</div>
CSS:
.container {
height: 300px;
display: flex;
align-items: center; /* vertical center */
}
Centering Image Both Horizontally and Vertically
- Using Flexbox (most common and simple)
<div class="container">
<img src="image.jpg" alt="Sample Image" />
</div>
CSS:
.container {
height: 300px;
display: flex;
justify-content: center; /* horizontal center */
align-items: center; /* vertical center */
}
- Using CSS Grid
<div class="container">
<img src="image.jpg" alt="Sample Image" />
</div>
CSS:
.container {
height: 300px;
display: grid;
place-items: center; /* centers both horizontally and vertically */
}
- Using Position + Transform
<div class="container">
<img src="image.jpg" alt="Sample Image" />
</div>
CSS:
.container {
position: relative;
height: 300px;
}
img {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
Tip: Whenever possible, use Flexbox or Grid, they’re the most modern, responsive, and easy-to-read ways to center content.