ChatGPT解决这个技术问题 Extra ChatGPT

在 div 内水平居中图像

如何在其容器 div 内居中对齐(水平)图像?

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

#thumbnailwrapper { 颜色:#2A2A2A;右边距:5px;边界半径:0.2em;边距底部:5px;背景颜色:#E9F7FE;填充:5px;边框:细实线#DADADA;字体大小:15px } #artiststhumbnail { 宽度:120px;高度:108px;溢出:隐藏;边框:细实线#DADADA;背景颜色:白色; } #artiststhumbnail:hover { left: 50px }

朋克

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

是否打算将图像显示在与第一个链接(artisturl 链接)相同的行上?
imgtext-align: center 约束,除非它们的 display 已被修改。
jsfiddle.net/cEgRp - 简单的text-align: center
Jacob,您至少可以发布浏览器看到的实际标记,而不是注入 PHP 的模板吗?此外,功能正常的 jsfiddle.net 总是有帮助的。
别介意我的评论 - 我没有注意到 img 包含在 a 中。我很笨。

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

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


我认为这不是一个好主意,而且我相信有一些警告,例如 margin: auto 取决于具有指定宽度值的包含元素。
我仍在提高我的 CSS 技能,所以感谢有趣的学习点。但在这种情况下,他在容器上使用了固定宽度。
在这种情况下,指定宽度究竟意味着什么?拥有绝对是有用的知识。
见此fiddle I made;我不知道该怎么想。您的建议不会做任何事情,而且我相信 img 无论如何都需要定义一个宽度才能对 auto 产生任何影响。
您实际上并没有实施我提出的解决方案。其次,封闭的 div 的宽度为 120px,与图像的宽度大致相同,因此很难看出它是否真的居中图像。这是我的解决方案:jsfiddle.net/marvo/3k3CC/2
m
m4n0

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;
}

输出:

身体{背景:浅灰色; } .image-container { 宽度:200px;显示:弯曲;证明内容:中心;边距:10px;填充:10px; /* 材料设计属性 */ background: #fff;盒子阴影: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 { 宽度:500px;对齐自我:弹性开始; /* 保留图像纵横比 */ } .image-3 { width: 300px;对齐自我:弹性开始; /* 保留图像纵横比 */ }


当浏览器支持这一点时,这是我的优秀解决方案。也可以使用 align-items 垂直居中。各种边距解决方案对我不起作用,因为要居中的元素没有宽度和高度属性。
在我的例子中,div 有一个给定的大小(例如 50px),这会将图像拉伸到 50px。
@Max 在这种情况下,您可以像这样将 align-self 应用于图像元素 jsfiddle.net/3fgvkurd
T
TylerH

我刚刚在 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%; 来调整图像大小,但在这种情况下它没有居中。关于如何以应用这两个属性为中心的任何建议
M
Mehmet Yaden

这也可以

#imagewrapper {
    text-align:center;
}

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

您是说 text-align:center;margin:0 5px; 吗?我添加了一个 ;
选择器块中的最后一个属性不需要@jagb 分号。
@TylerH 没错,选择器块中的最后一个属性不需要分号,但使用分号总是更省事。如果我编写一个 CSS 文件,另一个开发人员稍后编辑我的文件,他们会添加一些代码(在该行之后缺少分号,我之前在那个 CSS 文件中写的行)和它们的高度、宽度或其他声明不起作用(或者更糟糕的是,他们没有注意到它不起作用)。我会说把分号留在里面更安全。这就是为什么我使用分号并且从不把分号放在外面的原因。
@jagb 如果其他开发人员稍后编辑您的文件,他们将在必要时添加分号,否则编写有错误的代码将是他们的问题。对您最初评论的回复仍然是:“CSS 中最后一行的分号是一种样式选择”。
我同意jagb。这个网站应该提倡好的风格选择。好的风格不会留下容易被破坏的代码。将分号放在每一行上可能会花费您 1/10 秒,调试以查找单个丢失的分号可能会花费您数小时。这就是大型科技公司坚持这样做的原因:Google HTML/CSS Style Guide - Declaration Stops
K
Kevin

我发现(似乎适用于所有浏览器)水平居中图像或任何元素的最佳方法是创建一个 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 代码对所有标签进行多次更改。


完成了这项工作,但为了浏览器兼容性,您将需要使用其他形式的转换。
我还发现此 link 很有帮助。它显示了您在此处显示的类似 transform: translate(-50%) 技巧,但将其与 margin-left: 50% 结合使用,而不是与 left:50% 结合使用。它还对比了项目何时具有相对定位与 absolute 定位的解决方案。这主要是为了我将来的参考,所以我可以在这里参考你的答案,以及我以前使用的解决方案,在 1 个(upvoted)位置。 :-) css-tricks.com/centering-css-complete-guide
哦,这是我发现的另一个关于元素定位的花絮。使用 transform: translate 技巧的容器 [at w3.org] (w3.org/Style/Examples/007/center.en.html):基本规则是:1) 使 container relative定位,它声明它是绝对定位元素的容器。 2) 使 元素 本身absolute定位。 3) 将其放在容器的中间位置,并带有 'top: 50 %'(或与 left:50% 水平对齐)。 4) 使用 translation 将元素向上移动一半高度(或水平移动一半宽度)。
H
HoldOffHunger

这就是我最终做的事情:

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

这会将图像高度限制为 600 像素,并将水平居中(如果父宽度较小,则调整大小)到父容器,保持比例。


J
Jared Farrish

我要四处走动,说以下就是你所追求的。

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

<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-enclosure-the-image 居中在另一个 div 中。无论哪种方式,相同的解决方案。
这两种解决方案在实践中都不起作用。在它不起作用之前,我已经尝试了这两种解决方案。请参考问题中的编辑
k
karlzafiris

将此添加到您的 CSS 中:

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

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


当您仍然想要访问上边距时,这很有用,.. 比 margin 0 auto 更好
T
Teocci

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

<div>
 <img/>
</div>

但只是为了提醒你,图像的风格

object-fit : *depend on u*

所以最终的代码就像示例

div {显示:弹性;证明内容:中心;对齐项目:居中; } div img { object-fit: 包含; }

https://i.stack.imgur.com/yUQDJ.png


H
HoldOffHunger

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

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

是的,但是如果您打算将图像显示为块以防止其下方出现无聊的空白,那么这将不再起作用...
A
Ali Safari

使图像居中的响应方式可以是这样的:

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

p
prasun

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


T
ThomasAFink

使用定位。以下对我有用......(水平和垂直居中)

缩放到图像的中心(图像填充 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):

   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;
    }

a
antelove

在 div 中将图像居中

/* 标准 */ div, .flexbox-div { position: relative;宽度:100%;高度:100px;边距:10px;背景颜色:灰色; } img { 边框:3px 纯红色;宽度:75px;高度:75px; } /* ||标准 */ /* 变换 */ .transform { position: absolute;最高:50%;左:50%;变换:翻译(-50%,-50%); -ms-transform: 翻译(-50%, -50%); /* IE 9 */ -webkit-transform: translate(-50%, -50%); /* Chrome、Safari、Opera */ } /* || transform */ /* flexbox 边距 */ .flexbox-div { display: -webkit-flex;显示:弯曲;背景颜色:浅灰色; } .margin-img { 边距:自动; } /* || flexbox margin */ /* flexbox justify align */ .flexbox-justify { justify-content: center; } .align-item { 对齐自我:中心; } /* || flexbox justify align */

使用变换

不是设计使然

使用弹性框边距

Not By Design

使用 flexbox justify align

不是设计使然


I
Ifwat Ibrahim

我尝试了几种方法。但这种方式对我来说非常有效

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

H
HoldOffHunger

为左右设置相等的像素填充:

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

S
Santosh Khalse

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

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{ 宽度:100%;背景:绿色;显示:弹性;证明内容:中心;对齐项目:中心; }

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


S
SherylHohman

如果您必须内联执行此操作(例如在使用输入框时),
这里有一个对我有用的快速技巧:将您的(在这种情况下为图片链接)
用 {2 }

<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 */

N
Nick GM

.document { 对齐项目:中心;背景色:hsl(229, 57%, 11%);边框半径:5px;显示:弯曲;高度:40px;宽度:40px; } .document img { 显示:块;边距:自动; }

icon-document


欢迎来到堆栈溢出!请为您的答案添加一些解释。
K
KES NORKUS
<!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>

S
Siva Kaliyamoorthy
##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;
}

欢迎来到堆栈溢出!请为您的答案添加一些解释。
如果我们想为所有设备修复特定的<div> <section>页面的垂直和水平中心,只需使用此样式代码!!!!
看起来这个答案属于另一个问题:)
C
Callum

样式.css

img#center-img{

 display: block;
 margin: auto;
}

html

<html>
  <body>
    <div>
      <img src='pic.png' id='center-img'>
    </div>
  </body>
</html>

请仅添加尚未提供的答案。碰巧,这与公认的答案等相同。
S
Sk Shoyeb

要使图像居中,请使用此 css。您必须在图像的第一个位置给出宽度。

img{
  width: 300px;
  position: fixed;
  left0;
  right:0;

}

这不是使图像居中的正确方法。