How to make an image center (vertically & horizontally) inside a bigger div

HtmlCss

Html Problem Overview


I have a div 200 x 200 px. I want to place a 50 x 50 px image right in the middle of the div.

How can it be done?

I am able to get it centered horizontally by using text-align: center for the div. But vertical alignment is the issue..

Html Solutions


Solution 1 - Html

Working in old browsers (IE >= 8)

Absolute position in combination with automatic margin permits to center an element horizontally and vertically. The element position could be based on a parent element position using relative positioning. View Result

img {
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

Solution 2 - Html

Personally, I'd place it as the background image within the div, the CSS for that being:

#demo {
    background: url(bg_apple_little.gif) no-repeat center center;
    height: 200px;
    width: 200px;
}

(Assumes a div with id="demo" as you are already specifying height and width adding a background shouldn't be an issue)

Let the browser take the strain.

Solution 3 - Html

another way is to create a table with valign, of course. This would work regardless of you knowing the div's height or not.

<div>
   <table width="100%" height="100%" align="center" valign="center">
   <tr><td>
      <img src="foo.jpg" alt="foo" />
   </td></tr>
   </table>
</div>

but you should always stick to just css whenever possible.

Solution 4 - Html

I would set your larger div with position:relative; then for your image do this:

img.classname{
   position:absolute;
   top:50%;
   left:50%;
   margin-top:-25px;
   margin-left:-25px;
}

This only works because you know the dimensions of both the image and the containing div. This will also let you have other items within the containing div... where solutions like using line-height will not.

EDIT: Note... your margins are negative half of the size of the image.

Solution 5 - Html

This works correctly:

display: block;
margin-left: auto;
margin-right: auto 

else try this if the above only gives you horizontal centering:

.outerContainer {
   position: relative;
}

.innerContainer {
   width: 50px; //your image/element width here
   height: 50px; //your image/element height here
   overflow: auto;
   margin: auto;
   position: absolute;
   top: 0; left: 0; bottom: 0; right: 0;
}

Solution 6 - Html

Use Flexbox:

.outerDiv {
  display: flex;
  flex-direction: column;
  justify-content: center;  /* Centering y-axis */
  align-items :center; /* Centering x-axis */
}

Solution 7 - Html

here's another method to center everything within anything.

Working Fiddle

HTML: (simple as ever)

<div class="Container">
    <div class="Content"> /*this can be an img, span, or everything else*/
        I'm the Content
    </div>
</div>

CSS:

.Container
{
    text-align: center;
}

    .Container:before
    {
        content: '';
        height: 100%;
        display: inline-block;
        vertical-align: middle;
    }

.Content
{
    display: inline-block;
    vertical-align: middle;
}

Benefits

The Container and Content height are unknown.

Centering without specific negative margin, without setting the line-height (so it works well with multiple line of text) and without a script, also Works great with CSS transitions.

Solution 8 - Html

This is coming a bit late, but here's a solution I use to vertical align elements within a parent div.

This is useful for when you know the size of the container div, but not that of the contained image. (this is frequently the case when working with lightboxes or image carousels).

Here's the styling you should try:

 container div
 {
   display:table-cell;
   vertical-align:middle;

   height:200px;
   width:200px;
 }
 
 img
 {
   /*Apply any styling here*/        
 }

Solution 9 - Html

I've found that Valamas' and Lepu's answers above are the most straightforward answers that deal with images of unknown size, or of known size that you'd rather not hard-code into your CSS. I just have a few small tweaks: remove irrelevant styles, size it to 200px to match the question, and add max-height/max-width to handle images that may be too large.

div.image-thumbnail
{
    width: 200px;
    height: 200px;
    line-height: 200px;
    text-align: center;
}
div.image-thumbnail img
{
    vertical-align: middle;
    max-height: 200px;
    max-width: 200px;
}

Solution 10 - Html

in the div

style="text-align:center; line-height:200px"

Solution 11 - Html

Vertical-align is one of the most misused css styles. It doesn't work how you might expect on elements that are not td's or css "display: table-cell".

This is a very good post on the matter. http://phrogz.net/CSS/vertical-align/index.html

The most common methods to acheive what you're looking for are:

  • padding top/bottom
  • position absolute
  • line-height

Solution 12 - Html

In CSS do it as:

img
{

  display:table-cell;
  vertical-align:middle;
  margin:auto;
}

Solution 13 - Html

We can easily achieve this using flex. no need for background-image.

<!DOCTYPE html>
<html>
<head>
   <style>
      #image-wrapper{
         width:500px;
         height:500px;
         border:1px solid #333;
         display:flex;
         justify-content:center;
         align-items:center;
      }
   </style>
</head>
<body>

<div id="image-wrapper">
<img id="myImage" src="http://blog.w3c.br/wp-content/uploads/2013/03/css31-213x300.png">
</div>

</body>
</html>

Solution 14 - Html

@sleepy You can easily do this using the following attributes:

#content {
  display: flex;
  align-items: center;
  width: 200px;
  height: 200px;
  border: 1px solid red;
}

#myImage {
  display: block;
  width: 50px;
  height: 50px;  
  margin: auto;
  border: 1px solid yellow;
}

<div id="content">
  <img id="myImage" src="http://blog.w3c.br/wp-content/uploads/2013/03/css31-213x300.png">
</div>

References: W3

Solution 15 - Html

Typically, I'll set the line-height to be 200px. Usually does the trick.

Solution 16 - Html

I have a gallery of images for which I don't know the exact heights or widths of images beforhand, I just know that they are smaller than the div in which they are going to be contained.

By doing a combination of line-height settings on the container and using vertical-align:middle on the image element, I finally got it to work on FF 3.5, Safari 4.0 and IE7.0 using the following HTML markup and the following CSS.

The HTML Markup

<div id="gallery">
    <div class="painting">
        <a href="Painting/Details/2">
            <img src="/Content/Images/Paintings/Thumbnail/painting_00002.jpg" />
        </a>
    </div>
    <div class="painting">
        ...
    </div>
    ...
 </div>

The CSS

div.painting
{
    float:left;

    height:138px; /* fixed dimensions */
    width: 138px;

    border: solid 1px white;
    background-color:#F5F5F5;

    
    line-height:138px;    
    text-align:center;
    
}

    div.painting a img
    {
        border:none;
        vertical-align:middle;

    }

Solution 17 - Html

This works for me :

<body>
  <table id="table-foo">
    <tr><td>
        <img src="foo.png" /> 
    </td></tr>
  </table>
</body>
<style type="text/css">
  html, body {
    height: 100%;
  }
  #table-foo {
    width: 100%;
    height: 100%;
    text-align: center;
    vertical-align: middle;
  }
  #table-foo img {
    display: block;
    margin: 0 auto;
  }
</style>

Solution 18 - Html

Another way (not mentioned here yet) is with Flexbox.

Just set the following rules on the container div:

display: flex;
justify-content: center; /* align horizontal */
align-items: center; /* align vertical */

FIDDLE

div {
  width: 200px;
  height: 200px;
  border: 1px solid green;
  display: flex;
  justify-content: center;
  /* align horizontal */
  align-items: center;
  /* align vertical */
}

<div>
  <img src="http://lorempixel.com/50/50/food" alt="" />
</div>

A good place to start with Flexbox to see some of it's features and get syntax for maximum browser support is flexyboxes

Also, browser support nowadays is quite good: caniuse

For cross-browser compatibility for display: flex and align-items, you can use the following:

display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -ms-flexbox;
display: flex;
-webkit-flex-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;

Solution 19 - Html

This is an old solution but browser market shares have advanced enough that you may be able to get by without the IE hack part of it if you are not concerned about degrading for IE7. This works when you know the dimensions of the outer container but may or may not know the dimensions of the inner image.

.parent {
	display: table;
	height: 200px; /* can be percentages, too, like 100% */
	width: 200px; /* can be percentages, too, like 100% */
}

.child {
	display: table-cell;
	vertical-align: middle;
	margin: 0 auto;
}

 <div class="parent">
     <div class="child">
         <img src="foo.png" alt="bar" />
     </div>
 </div>

Solution 20 - Html

easy

img {
    transform: translate(50%,50%);
}

Solution 21 - Html

I've been trying to get an image to be centered vertically and horizontally within a circle shape using hmtl and css.

After combining several points from this thread, here's what I came up with: jsFiddle

Here's another example of this within a three column layout: jsFiddle

CSS:

#circle {
width: 100px;
height: 100px;
background: #A7A9AB;
-moz-border-radius: 50px;
-webkit-border-radius: 50px;
border-radius: 50px;
margin: 0 auto;
position: relative;
}

.images {
position: absolute;
margin: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
}

HTML:

<div id="circle">
<img class="images" src="https://png.icons8.com/facebook-like-filled/ios7/50" />
</div>

Solution 22 - Html

You can set position of image is align center horizontal by this

#imageId {
   display: block;
   margin-left: auto;
   margin-right:auto;
}



  

Solution 23 - Html

You can center an image horizontally and vertically with the code below (works in IE/FF). It will put the top edge of the image at exactly 50% of the browser height, and the margin-top(pulling half the height of the image up) will center it perfectly.

<style type="text/css">
	#middle {position: absolute; top: 50%;} /* for explorer only*/
	#middle[id] {vertical-align: middle; width: 100%;}
         #inner {position: relative; top: -50%} /* for explorer only */
</style>

 
<body style="background-color:#eeeeee">
	<div id="middle">
		<div id="inner" align="center" style="margin-top:...px"> /* the number will be half the height of your image, so for example if the height is 500px then you will put 250px for the margin-top */
			<img src="..." height="..." width="..." />
		</div>
	</div>
</body>

Solution 24 - Html

I love jumping on old bandwagons!

Here's a 2015 update to this answer. I started using CSS3 transform to do my dirty work for positioning. This allows you to not have to make any extra HTML, you don't have to do math (finding half-widths of things) you can use it on any element!

Here's an example (with fiddle at the end). Your HTML:

<div class="bigDiv">
    <div class="smallDiv">
    </div>
</div>

With accompanying CSS:

.bigDiv {
    width:200px;
    height:200px;
    background-color:#efefef;
    position:relative;
}
.smallDiv {
    width:50px;
    height:50px;
    background-color:#cc0000;
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%, -50%);
}

What I do a lot these days is I will give a class to things I want centered and just re-use that class every time. For example:

<div class="bigDiv">
    <div class="smallDiv centerThis">
    </div>
</div>

css

.bigDiv {
    width:200px;
    height:200px;
    background-color:#efefef;
    position:relative;
}
.smallDiv {
    width:50px;
    height:50px;
    background-color:#cc0000;
}
.centerThis {
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%, -50%);
}

This way, I will always be able to center something in it's container. You just have to make sure that the thing you want centered is in a container that has a position defined.

Here's a fiddle

BTW: This works for centering BIGGER divs inside SMALLER divs as well.

Solution 25 - Html

div {
  position: absolute;
  
  border: 3px solid green;
  width: 200px;
  height: 200px;
}

img { 
  position: relative;
  
  border: 3px solid red;
  width: 50px;
  height: 50px;
}

.center {    
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%); /* IE 9 */
  -webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */
}

<div class="center">
  <img class="center" src="http://placeholders.org/250/000/fff" />
</div>

Related: Center a image

Solution 26 - Html

thanks to everyone else for the clues.

I used this method

div.image-thumbnail
{
	width: 85px;
	height: 85px;
	line-height: 85px;
	display: inline-block;
	text-align: center;
}
div.image-thumbnail img
{
	vertical-align: middle;
}

Solution 27 - Html

Use positioning. The following worked for me:

div{
	display:block;
	overflow:hidden;
	width: 200px; 
	height: 200px;  
	position: relative;
}
div img{
	width: 50px; 
	height: 50px;   
	top: 50%;
	left: 50%;
	bottom: 50%;
	right: 50%;
	position: absolute;
}

Solution 28 - Html

Simply set image margin auto as shown below.

img{
 margin:auto;
 width:50%;
 height:auto;
}

Check these example

Solution 29 - Html

.container {
height: 200px;
width: 200px;
float:left;
position:relative;
}
.children-with-img {
position: absolute;
width:50px;
height:50px;
left:50%;
top:50%;
transform:translate(-50%);
}

Solution 30 - Html

If you know the size of the parent div and the image, you can just use absolute positioning.

Solution 31 - Html

This worked for me. Add this to image css:

img
{
   display: block;
   margin: auto;
}

Solution 32 - Html

I had this issue in HTML5 using CSS3 and my image was centered as such within the DIV... oh yes, I can't forget how I had to add the height to show the image... for a while I wondered where it was until I did this. I don't think the position and display are necessary.

background-image: url('../Images/01.png');    
background-repeat:no-repeat;
background-position:center;
position:relative;
display:block;
height:60px;

Solution 33 - Html

The best way to center an image both vertically and horizontally, is to use two containers, and apply the following properties :

##The outher container

  • should have display: table;

##The inner container

  • should have display: table-cell;
  • should have vertical-align: middle;
  • should have text-align: center;

##A demo

<div class="outer-container">
   <div class="inner-container">
     <img src="http://s.gravatar.com/avatar/bf4cc94221382810233575862875e687?r=x&s=50" />
   </div>
</div>

.outer-container {
    display: table;
    width: 80%; /* can be any width */
    height: 120px; /* can be any height */
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.inner-container img {
    background: #fff;
    padding : 10px;
    border : 1px solid #000;
}

Solution 34 - Html

https://www.w3.org/Style/Examples/007/center.en.html

IMG.displayed {
  display: block;
  margin-left: auto;
  margin-right: auto 
}

<IMG class="displayed" src="..." alt="...">

Solution 35 - Html

Here try this out.

.parentdiv {
 height: 400px;
 border: 2px solid #cccccc;
  background: #efefef;
 position: relative;
}
.childcontainer {
 position: absolute;
 left: 50%;
 top: 50%;
}
.childdiv {
 width: 150px;
 height:150px;
 background: lightgreen;
 border-radius: 50%;
 border: 2px solid green;
 margin-top: -50%;
 margin-left: -50%;
}

<div class="parentdiv">
  <div class="childcontainer">
     <div class="childdiv">
     </div>
  </div>
</div>

Solution 36 - Html

A simple and elegant solution that works for me everytime:

<div>
    <p style="text-align:center"><img>Image here</img></p>
</div>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionShameemView Question on Stackoverflow
Solution 1 - HtmlJonathan ArgentieroView Answer on Stackoverflow
Solution 2 - HtmlbochgochView Answer on Stackoverflow
Solution 3 - HtmlandykView Answer on Stackoverflow
Solution 4 - HtmlTim KnightView Answer on Stackoverflow
Solution 5 - HtmlChrisView Answer on Stackoverflow
Solution 6 - HtmlRahul ParuView Answer on Stackoverflow
Solution 7 - HtmlavrahamcoolView Answer on Stackoverflow
Solution 8 - HtmlKshitij ChopraView Answer on Stackoverflow
Solution 9 - HtmlsvachalekView Answer on Stackoverflow
Solution 10 - HtmlScott EverndenView Answer on Stackoverflow
Solution 11 - HtmlAlexView Answer on Stackoverflow
Solution 12 - HtmlCode BreakerView Answer on Stackoverflow
Solution 13 - HtmlyasaruiView Answer on Stackoverflow
Solution 14 - HtmlpetersonfortesView Answer on Stackoverflow
Solution 15 - HtmlKenan BanksView Answer on Stackoverflow
Solution 16 - HtmlDiego TerceroView Answer on Stackoverflow
Solution 17 - HtmlAlain BeauvoisView Answer on Stackoverflow
Solution 18 - HtmlDanieldView Answer on Stackoverflow
Solution 19 - HtmljoshuahedlundView Answer on Stackoverflow
Solution 20 - Htmlctf0View Answer on Stackoverflow
Solution 21 - Htmljord8onView Answer on Stackoverflow
Solution 22 - HtmlTVT. JakeView Answer on Stackoverflow
Solution 23 - HtmlThachView Answer on Stackoverflow
Solution 24 - HtmlntgCleanerView Answer on Stackoverflow
Solution 25 - HtmlanteloveView Answer on Stackoverflow
Solution 26 - HtmlValamasView Answer on Stackoverflow
Solution 27 - HtmlThomasAFinkView Answer on Stackoverflow
Solution 28 - HtmlDaniel NyamasyoView Answer on Stackoverflow
Solution 29 - HtmlDanielWawView Answer on Stackoverflow
Solution 30 - HtmlrecursiveView Answer on Stackoverflow
Solution 31 - HtmlshankybabaView Answer on Stackoverflow
Solution 32 - HtmlClarenceView Answer on Stackoverflow
Solution 33 - HtmlJohn SlegersView Answer on Stackoverflow
Solution 34 - HtmllizaView Answer on Stackoverflow
Solution 35 - HtmlRahil LakhaniView Answer on Stackoverflow
Solution 36 - HtmlGerman ArtunduagaView Answer on Stackoverflow