在div中水平居中放置图像


387

这可能是一个愚蠢的问题,但是由于居中对齐图像的常规方法不起作用,所以我想问一下。如何在容器div内居中对齐(水平)图像?

这是HTML和CSS。我还包括了缩略图其他元素的CSS。它以降序运行,因此最高的元素是所有内容的容器,最低的元素是所有内容的容器。

#thumbnailwrapper {
      color: #2A2A2A;
      margin-right: 5px;
      border-radius: 0.2em;
      margin-bottom: 5px;
      background-color: #E9F7FE;
      padding: 5px;
      border: thin solid #DADADA;
      font-size: 15px
}
    
#artiststhumbnail {
      width: 120px;
      height: 108px;
      overflow: hidden;
      border: thin solid #DADADA;
      background-color: white;
}
    
#artiststhumbnail:hover {
      left: 50px
}
<!--link here-->

<a href="NotByDesign">
  <div id="thumbnailwrapper">

    <a href="NotByDesign">

      <!--name here-->
      <b>Not By Design</b>
      <br>

      <div id="artiststhumbnail">

        <a href="NotByDesign">

          <!--image here-->
          <img src="../files/noprofile.jpg" height="100%" alt="Not By Design" border="1" />
        </a>
      </div>

      <div id="genre">Punk</div>

  </div>

好的,我添加了没有PHP的标记,因此应该更容易看清。这两种解决方案似乎都无法在实践中起作用。顶部和底部的文本不能居中,并且图像应在其容器div中居中。容器已隐藏了溢出的内容,因此我想查看图像的中心,因为通常这是焦点所在。


1
是否打算将图像与第一个链接(artisturl一个)显示在同一行上?
Shoaib 2012年

5
imgtext-align: center除非display经过修改,否则必须遵守。
Jared Farrish 2012年

4
jsfiddle.net/cEgRp-简单text-align: center
Zoltan Toth

3
Jacob,您至少可以发布浏览器看到的实际标记而不是PHP注入的模板吗?而且,正常运行的jsfiddle.net总是有帮助的。
Jared

2
别介意我的评论-我没注意到img随函附上了a。我很笨
Shoaib 2012年

Answers:


834

CSS Guy建议如下:

因此,翻译:

#artiststhumbnail a img {
    display:block;
    margin:auto;
}

这是我的解决方案,位于:http : //jsfiddle.net/marvo/3k3CC/2/


10
我认为这不是一个好主意,而且我认为有些警告margin: auto取决于依赖于具有指定宽度值的包含元素。
Jared Farrish 2012年

4
我仍在提高CSS技能,因此感谢您的有趣学习点。但是在这种情况下,他在容器上使用了固定的宽度。
Marvo 2012年

1
在这种情况下,指定宽度到底是什么意思?绝对看起来像是有用的知识。
Shoaib 2012年

1
看到我做的这个小提琴 ; 我不确定该怎么想。您的建议不会做任何事情,img我相信无论如何都需要定义一个宽度才能对产生任何效果auto
Jared Farrish 2012年

2
您实际上并没有实施我提出的解决方案。其次,封闭的div的宽度为120px,与图像的宽度大致相同,因此很难查看其是否居中。这是我的解决方案: jsfiddle.net/marvo/3k3CC/2
Marvo

88

CSS flexbox可以justify-content: center在图像父元素上使用它。要保留图像的高宽比,请添加图像align-self: flex-start;

的HTML

<div class="image-container">
  <img src="http://placehold.it/100x100" />
</div>

的CSS

.image-container {
  display: flex;
  justify-content: center;
}

输出:


4
当浏览器支持此功能时,这将是一个极好的解决方案。也可以align-items用于垂直居中。各种边距解决方案对我不起作用,因为要居中的元素没有width和height属性。
Marc Rochkind

1
在我的情况下,div具有给定的大小(例如50px),这会将图像拉伸为50px。
最多

1
@Max在这种情况下,您可以将align-self图像元素应用于此jsfiddle.net/3fgvkurd
Manoj Kumar,

69

我刚刚在W3 CSS页面上找到了此解决方案,它回答了我的问题。

img {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

来源:http//www.w3.org/Style/Examples/007/center.en.html


max-width: 100%; max-height: 100%;如果屏幕小于图像,我正在 调整图像的大小,但是在这种情况下,它没有居中。关于如何以这两个属性为中心的任何建议
Alexey Strakh

18

这也可以做到

#imagewrapper {
    text-align:center
}

#imagewrapper img {
    display:inline-block;
    margin:0 5px
}

你是说text-align:center;margin:0 5px;?我在;
jagb

选择器块中的最后一个属性不需要@jagb分号。
TylerH '18

4
@TylerH没错,选择器块中的最后一个属性不需要分号,但使用分号通常会更省钱。缺少分号,我之前在该CSS文件中写过的行)及其高度,宽度或其他声明均无效(或者更糟糕的是,他们没有注意到它无效)。我会说保留分号比较安全。这就是为什么我使用分号并且永远不要将分号放在外面的原因。
jagb

@jagb如果其他开发人员以后编辑您的文件,他们将在必要时添加分号,否则这将是编写有错误的代码的问题。对您的最初评论的答复仍然是:“ CSS最后一行的分号是一种样式选择”。
TylerH '18

我同意贾格。该网站应促进良好的风格选择。好的样式不会遗留容易被破坏的代码。将分号放在每行上可能要花费您1/10秒的时间,调试查找单个缺失的分号可能会花费您数小时的时间。这就是为什么大科技公司坚持就可以了:谷歌HTML / CSS样式指南-宣言停止
格奥尔格·Patscheider

14

我发现(最好在所有浏览器中都可以使用)使图像或任何元素水平居中的最佳方法是创建一个CSS类并包含以下参数:

的CSS

.center {
    position: relative;          /* where the next element will be automatically positioned */
    display: inline-block;       /* causes element width to shrink to fit content */
    left: 50%;                   /* moves left side of image/element to center of parent element */
    transform: translate(-50%);  /* centers image/element on "left: 50%" position */
}

然后,您可以将创建的CSS类应用于标签,如下所示:

的HTML

<img class="center" src="image.jpg" />

您还可以通过执行以下操作在元素中内联CSS:

<img style="position: relative; display: inline-block; left: 50%; transform: translate(-50%);" src ="image.jpg" />

...但是我不建议编写内联CSS,因为如果您想更改样式,则必须使用居中的CSS代码对所有标签进行多次更改。


可以完成这项工作,但是为了与浏览器兼容,您将需要使用其他形式的转换。
杰伊·斯莫

11

这就是我最终要做的事情:

<div style="height: 600px">
   <img src="assets/zzzzz.png" alt="Error" style="max-width: 100%; 
        max-height: 100%; display:block; margin:auto;" />
</div>

它将图像高度限制为600像素,并将水平居中(如果父宽度较小,则缩小尺寸)到父容器,并保持比例。


8

我要弯腰说,以下是您所追求的。

请注意,我认为以下问题被意外省略了(请参阅评论):

<div id="thumbnailwrapper"> <!-- <<< This opening element -->
    <div id="artiststhumbnail">
...

因此,您需要的是:

#artiststhumbnail {
    width:120px;
    height:108px;
    margin: 0 auto; /* <<< This line here. */
    ...
}

http://jsfiddle.net/userdude/XStjX/3/


嗯...我敢打赌 我在解决方案中将IMAGE居中,但是我可以看到如何将问题解释为将div封闭图像居中在另一个div中。无论哪种方式,都是相同的解决方案。
Marvo 2012年

两种解决方案都无法在实践中起作用。在它无法正常工作之前,我已经尝试了两种解决方案。请参考问题中的编辑
Jacob Windsor

3

要将图像水平居中,可以这样做:

<p style="text-align:center"><img src=""></p>

是的,但是如果您打算将图像显示为块以防止其下方留有无聊的空白,则此方法将不再起作用...
Dr Fred

3

将此添加到您的CSS:

#artiststhumbnail a img {
   display: block;
   margin-left: auto;
   margin-right: auto;
}

只是引用一个子元素,在这种情况下就是图像。


2
当您仍然想访问顶部边缘时,这非常
有用

2

为左右放置相同的像素填充:

<div id="artiststhumbnail" style="padding-left:ypx;padding-right:ypx">

1

将图片放在里面newDiv。使包含的宽度div与图像相同。适用margin: 0 auto;newDiv。那应该div在容器内居中。


1

使用定位。以下为我工作...(水平和垂直居中)

缩放至图像中心(图像填充div):

div{
    display:block;
    overflow:hidden;
    width: 70px; 
    height: 70px;  
    position: relative;
}
div img{
    min-width: 70px; 
    min-height: 70px;
    max-width: 250%; 
    max-height: 250%;    
    top: -50%;
    left: -50%;
    bottom: -50%;
    right: -50%;
    position: absolute;
}

未经缩放到图像的中心(图像并不能填补格):

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

1

您可以使用带有最少代码的弹性框对齐内容

的HTML

<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

的CSS

.image-container{
  width:100%;
  background:green;
  display:flex;

.image-container{
  width:100%;
  background:green;
  display:flex;
  justify-content: center;
  align-items:center;
}
<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

js小提琴链接https://jsfiddle.net/7un6ku2m/


1

将图片居中

/* standar */
div, .flexbox-div {
  position: relative;
  width: 100%;
  height: 100px;
  margin: 10px;
  background-color: grey;  
}

img {
  border: 3px solid red;
  width: 75px;
  height: 75px;
}
/* || standar */


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


/* flexbox margin */
.flexbox-div {
  display: -webkit-flex;
  display: flex;
  background-color: lightgrey; 
}

.margin-img {
  margin: auto;
}
/* || flexbox margin */


/* flexbox justify align */
.flexbox-justify {
  justify-content: center;
}

.align-item {
  align-self: center;
}
/* || flexbox justify align */
<h4>Using transform </h4>  
<div>
  <img class="transform" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox margin</h4>  
<div class="flexbox-div">
  <img class="margin-img" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox justify align</h4>  
<div class="flexbox-div flexbox-justify">
  <img class="align-item" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>


1

我尝试了几种方法。但是这种方式对我来说很完美

<img src="~/images/btn.png" class="img-responsive" id="hide" style="display: block; margin-left: auto; margin-right: auto;" />

1

使图像居中的响应方式如下所示:

.center {
    display: block;
    margin: auto;
    max-width: 100%;
    max-height: 100%;
}

0

如果你有这样做的内联(例如使用时的输入框,),
这里是一个快速劈为我工作:围绕你的(在这种情况下图像链接)
divstyle="text-align:center"

<div style="text-align:center">

<a title="Example Image: Google Logo" href="https://www.google.com/" 
target="_blank" rel="noopener"><img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" alt="Google Logo. Click to visit Google.com" border="0" data-recalc-dims="1" /></a>

<h6><strong>This text will also be centered </strong></h6>

</div> /* ends centering style */

0
##Both Vertically and Horizontally center of the Page
.box{
    width: 300px;
    height: 300px;
    background-color: #232532;
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
}

5
欢迎来到stackoverflow!请在回答中添加一些解释。
马克西米利安·彼得斯

如果我们要为所有设备修复页面的特定<div> <section>垂直和水平居中的位置,只需使用此样式代码即可!!!
Siva Kaliyamoorthy

看起来这个答案属于另一个问题:)
Manoj Kumar

0

是的,像这样的代码可以正常工作

<div>
 <img>
</div>

只是提醒您,图像的样式

object-fit : *depend on u*

所以最终的代码就像例子

<div style="border: 1px solid red;">
    <img
      src="./assets/images/truck-toy.jpg"
      alt=""
      srcset=""
      style="
       border-radius: 50%;
       height: 7.5rem;
       width: 7.5rem;
       object-fit: contain;"
    />
</div>

最后结果


0

在容器上使用flex属性是正确的答案,因为它可以垂直和水平居中。

此处的最高答案不适用于使项目垂直居中,而只能水平居中。


OP明确要求进行水平对齐。
阿尔文·莫约

-1
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">


      <style>
      body{
  /*-------------------important for fluid images---\/--*/
  overflow-x: hidden; /* some browsers shows it for mysterious reasons to me*/
  overflow-y: scroll;
  margin-left:0px;
  margin-top:0px;
  /*-------------------important for fluid images---/\--*/
      }
      .thirddiv{
      float:left;
      width:100vw;
      height:100vh;
      margin:0px;
      background:olive;
      }
      .thirdclassclassone{
      float:left;   /*important*/
      background:grey;
      width:80vw;
      height:80vh; /*match with img height bellow*/
      margin-left:10vw; /* 100vw minus "width"/2    */
      margin-right:10vw; /* 100vw minus "width"/2   */
      margin-top:10vh;
      }
      .thirdclassclassone img{
      position:relative; /*important*/
     display: block;  /*important*/
    margin-left: auto;  /*very important*/
    margin-right: auto;  /*very important*/
    height:80vh; /*match with parent div above*/

    /*--------------------------------
    margin-top:5vh;
    margin-bottom:5vh;
    ---------------------------------*/
    /*---------------------set margins to match total  height of parent di----------------------------------------*/
      }
    </style>           
</head>  
<body>
    <div class="thirddiv">
       <div class="thirdclassclassone">
       <img src="ireland.png">
    </div>      
</body>
</html>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.