在div中水平居中图像

Jac*_*sor 359 html css

这可能是一个愚蠢的问题,但由于中心对齐图像的常用方法不起作用,我想我会问.如何在容器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
}
Run Code Online (Sandbox Code Playgroud)
<!--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>
Run Code Online (Sandbox Code Playgroud)

好的,我已经添加了没有PHP的标记,所以应该更容易看到.这两种解决方案似乎都没有实际应用.顶部和底部的文本无法居中,图像应在其容器div中居中.容器已隐藏溢出,因此我希望看到图像的中心,因为它通常是焦点所在的位置.

Mar*_*rvo 786

CSS Guy建议如下:

所以,翻译,或许:

#artiststhumbnail a img {
    display:block;
    margin:auto;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我不认为这是一个好主意,而且我相信有一些警告,例如`margin:auto`取决于具有指定宽度值的包含元素. (8认同)
  • 我仍然在提高我的CSS技能,所以感谢有趣的学习点.但在这种情况下,他在容器上使用固定宽度. (3认同)
  • 您实际上并没有实施我提出的解决方案。其次,封闭的 div 的宽度为 120px,与图像的宽度大致相同,因此很难看出它是否真正居中了图像。这是我的解决方案:http://jsfiddle.net/marvo/3k3CC/2/ (2认同)

Man*_*mar 71

CSS flexbox可以justify-content: center在图像父元素上完成.

HTML

<div class="image-container">
  <img src="http://placehold.it/100x100" />
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.image-container {
  display: flex;
  justify-content: center;
}
Run Code Online (Sandbox Code Playgroud)

输出:

body {
  background: lightgray;
}
.image-container {
  width: 200px;
  display: flex;
  justify-content: center;
  margin: 10px;
  padding: 10px;
  /* Material design properties */
  background: #fff;
  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
}
.image-2 {
  width: 500px;
  align-self: flex-start;  /* to preserve image aspect ratio */
}
.image-3 {
  width: 300px;
  align-self: flex-start;  /* to preserve image aspect ratio */
}
Run Code Online (Sandbox Code Playgroud)
<div class="image-container">
  <img src="http://placehold.it/100x100" />
</div>

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

<div class="image-container image-3">
  <img src="http://placehold.it/100x100/666" />
</div>
Run Code Online (Sandbox Code Playgroud)

  • 当浏览器支持此功能时,这将是一个极好的解决方案。也可以使用“ align-items”垂直居中。各种页边距解决方案对我不起作用,因为要居中的元素没有width和height属性。 (3认同)
  • 在我的例子中,div 具有给定的大小(例如 50px),这会将图像拉伸到 50px。 (2认同)

小智 66

我刚刚在W3 CSS页面上找到了这个解决方案,它解决了我的问题.

img {
    display: block;
    margin-left: auto;
    margin-right: auto;
}
Run Code Online (Sandbox Code Playgroud)

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


小智 17

这也可以做到

#imagewrapper {
    text-align:center
}

#imagewrapper img {
    display:inline-block;
    margin:0 5px
}
Run Code Online (Sandbox Code Playgroud)

  • @TylerH这是真的,选择器块中的最后一个属性不需要分号,但是使用分号总是更安全.如果我写一个CSS文件,另一个开发人员稍后编辑我的文件,他们会添加一些代码(在行之后)缺少分号,我之前在CSS文件中写过的行)和它们的高度,宽度或其他声明不起作用(或者更糟糕的是,它们没有注意到它不起作用).我会说离开分号更安全.这就是为什么我使用分号并且永远不会留下分号. (3认同)

Kev*_*vin 13

我找到的最好的东西(似乎适用于所有浏览器)用于水平居中图像或任何元素是创建一个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 */
}
Run Code Online (Sandbox Code Playgroud)

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

HTML

<img class="center" src="image.jpg" />
Run Code Online (Sandbox Code Playgroud)

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

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

...但我不建议编写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>
Run Code Online (Sandbox Code Playgroud)

这会将图像高度限制为600px,并且将父级容器水平居中(或者在父级宽度较小时向下调整大小),从而保持比例.


Jar*_*ish 8

我要走出去,说以下是你所追求的.

请注意,以下我认为在问题中意外省略了(见注释):

<div id="thumbnailwrapper"> <!-- <<< This opening element -->
    <div id="artiststhumbnail">
...
Run Code Online (Sandbox Code Playgroud)

所以你需要的是:

#artiststhumbnail {
    width:120px;
    height:108px;
    margin: 0 auto; /* <<< This line here. */
    ...
}
Run Code Online (Sandbox Code Playgroud)

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


小智 7

是的,这样的代码工作正常

<div>
 <img/>
</div>
Run Code Online (Sandbox Code Playgroud)

但只是提醒你一下,图像的风格

object-fit : *depend on u*
Run Code Online (Sandbox Code Playgroud)

所以最终的代码就像示例

div {
  display: flex;
  justify-content: center;
  align-items: center;
}

div img {
  object-fit: contain;
}
Run Code Online (Sandbox Code Playgroud)
<div style="border: 1px solid red;">
  <img src="https://img.joomcdn.net/9dd32cbfa0cdd7f48ca094972ca47727cd3cd82c_original.jpeg" alt="" srcset="" style="
       border-radius: 50%;
       height: 7.5rem;
       width: 7.5rem;
       object-fit: contain;" />
</div>
Run Code Online (Sandbox Code Playgroud)

最后结果


lox*_*sat 5

将此添加到您的 CSS:

#artiststhumbnail a img {
   display: block;
   margin-left: auto;
   margin-right: auto;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 当您仍然想要访问顶部边距时,这很有用,.. 比边距 0 自动好 (2认同)