图片用 margin: auto 不居中是因为默认为 inline 元素,需设 display: block;配合 max-width: 100% 和 margin: 0 auto 可安全居中,Flex/Grid 中需分别设置 justify-content 或 place-items。
margin: auto 不居中?先确认 display 类型直接给 设置 margin: auto 无效,是因为图片默认是 inline 元素,不响应块级外边距。必须显式设为块级才能生效。
display: block 是最简解法,适用于单图居中),需对 或 单独设 display: block,否则父容器仍按行内流排布text-align: center 父容器“骗”居中——它只对行内元素起作用,且在 Flex/Grid 布局中可能被覆盖图片设了 width: 100% 后,margin: auto

max-width)。否则在宽屏下图片撑满,左右无空间可分。
img {
display: block;
max-width: 100%;
height: auto;
margin: 0 auto;
}max-width: 100% 保证图片不溢出容器,margin: 0 auto 在有剩余空间时自动分配左右外边距width: 100%:它强制拉伸,会破坏原始宽高比;max-width 更安全如果父容器用了 display: flex,但图片没居中,大概率是漏设了主轴对齐方式。
justify-content: center;仅 margin: auto 在 Flex 容器中对图片无效(除非图片是 flex item 且没设 flex-grow)display: flex,但忘了 justify-content,结果图片紧贴左边缘text-align: center + display: block,比 Flex 更轻量Grid 容器里图片默认占一个网格单元,但若没定义显式网格线,浏览器会生成隐式行/列轨道,导致居中行为不可控。
.container {
display: grid;
place-items: center; /* 同时居中水平+垂直 */
}
img {
max-width: 100%;
height: auto;
}place-items 时,务必配合 justify-self: center(水平)和 align-self: center(垂直),不能只靠 margin
align-items: center 可能无效——此时需给父容器设 min-height 或 height
实际中最容易忽略的是 display 类型切换和 max-width 的搭配。很多人试了 margin: auto 没反应,第一反应是加 !important,其实问题出在没切断 inline 流。