Menu

HTML 和 CSS 如何让图片居中

<img> 是行内元素,所以它像文字一样居中:在父元素上写 text-align: center。也可以把它设为块元素再加 margin: 0 auto,或者用 flexbox、grid 让它居中,包括垂直居中。每种方法都能实时运行并测量结果。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

最快的方法:在父元素上写 text-align

<img> 是行内元素:它像一个字一样位于一行文字中。所以让它居中的方法和让文字居中一样,在父元素上写 text-align: center:

样式写在 div 上,而不是图片上。把 text-align: center 写在 <img> 本身上没有任何效果,因为图片里面没有可以对齐的文字。

方法 2:display block 加 margin auto

如果你更想直接给图片本身写样式,就把它变成块元素,再给它自动的左右外边距。两边的剩余空间会被平均分配:

灰色图片写了 margin: 0 auto,却仍然停在行首:自动外边距对行内元素不起作用。缺的那一步就是 display: block。max-width: 100% 加 height: auto 能让图片在窄屏上不溢出,同时保持原有比例。

方法 3:flexbox 或 grid,包括垂直居中

要让图片在盒子里两个方向都居中,就给盒子设置高度,再用 grid 或 flexbox 让内容居中:

flexbox 的等效写法是 display: flex; justify-content: center; align-items: center;。无论哪种写法,盒子的高度都必须大于图片,否则没有可以居中的空间。同样的方法可以让任何元素居中,div 居中页面对比了所有方法。

让带标题的图片居中

带说明文字的照片应该放在 <figure> 里。让 figure 的内容居中,图片和说明文字就会一起对齐:

一行多张图片居中

一行 logo 或缩略图适合交给 flexbox。justify-content: center 让这一组居中,gap 设置间距,flex-wrap 让它在小屏幕上换行,同时保持居中:

该用哪种方法

场景用法
段落或简单块中的一张图片在父元素上写 text-align: center
只能给图片本身写样式display: block; margin: 0 auto;
在盒子里两个方向都居中在盒子上用 Grid place-items: center(或 flexbox)
一行图片Flexbox 加 justify-content: center
带说明文字的图片<figure> 加 text-align: center
背景图片,而不是内容background-position: center,见 background-image

旧方法,以及为什么不要用

在旧教程里你仍然会看到这些写法:

<!-- obsolete: do not use -->
<center><img src="logo.png" alt="Logo"></center>
<img src="logo.png" alt="Logo" align="center">

<center> 和 align 属性已经从 HTML 中移除。为了向后兼容,浏览器仍然会渲染 <center>,而图片上的 align="center" 甚至不能让它水平居中:浏览器把它当作行内的垂直对齐。请使用上面的 CSS 方法。

常见错误

  • 把 text-align: center 写在 <img> 上。 应该写在父元素上。
  • 在行内图片上用 margin: 0 auto。 加上 display: block。
  • 父元素没有高度就想垂直居中。 盒子会收缩到图片大小,没有可以居中的空间。
  • float: center。 根本没有这个值,浮动只能靠向一边。
  • 忘记写 alt。 居中的图片同样需要替代文字,只有纯装饰性的图片才用 alt=""。
  • 图片被拉伸。 在 CSS 中把 width 和 height 都设成比例不同的值会让图片变形。只设置其中一个并使用 height: auto,或者加上 object-fit: cover。

常见问题

HTML 中如何让图片居中?

在包含图片的元素上写 text-align: center,例如 <p style="text-align: center;"><img src="logo.png" alt="Logo"></p>。图片默认是行内元素,所以它会像一个字一样居中。

如何用 margin auto 让图片居中?

先把图片设为块元素:img { display: block; margin: 0 auto; }。自动外边距不能让行内元素居中,而在你修改之前,图片一直是行内元素。

如何让图片水平和垂直同时居中?

把它的容器设为有高度的 grid(或 flexbox):.box { display: grid; place-items: center; height: 300px; }。这样图片就会位于盒子正中间。

可以用 <center> 标签或 align="center" 让图片居中吗?

不可以。在 HTML5 中,<center> 和 <img> 上的 align 属性都已废弃。为了兼容旧页面,浏览器仍然会渲染 <center>,但图片上的 align="center" 是让它在行内垂直对齐,而不是水平居中。请使用 CSS。

为什么居中的图片下面有一条小缝隙?

行内图片坐落在文字的基线上,下方会留出字母下伸部分的空间。给图片设置 display: block 或 vertical-align: middle,缝隙就消失了。

Coddy 编程语言插图

和 Coddy 一起学编程

开始