图片默认 inline 且 vertical-align: baseline,导致底部留空;解决需用 vertical-align、display 变更、text-align(仅对 inline/inline-block 有效)、flex 或 absolute 定位,并注意对应前提条件。
HTML5 里 默认是 inline 元素,会和文字一样参与行框(line box)布局,对齐基准线是 baseline —— 这就是为什么图片下方总有一小段空白:那是为字母如 “g”、“y” 留的 descender 空间。
常见现象:
,图片和文字看起来“没对齐”,实际是图片底部贴着 baseline,而文字的 baseline 在字体中间偏下位置。文字@@##@@后面还有文字
加 vertical-align: middle 或 top 或 bottom
vertical-align: middle 对齐的是父行框的 middle(不是父容器正中),适合图文混排时视觉居中display 改成 block 或 inline-block 后再用 text-align / margin 控制text-align 只对 inline 和 inline-block 子元素起作用,所以它能控制图片水平对齐,但有前提:
inline(默认)或 inline-block
text-align: center(或 left/right)block 元素(比如加了 display: block),text-align 就完全无效,此时得用 margin: 0 auto 配合固定宽度典型误用:
@@##@@——图片不会居中,因为
block 元素无视 text-align。
Flex 是目前最可控的图片对齐方式,但容易漏掉关键一步:父容器必须显式声明 display: flex,否则所有 justify-content / align-items 都不生效。
justify-content: center
align-items: center
flex-direction: column + 上述两项img 默认是 min-width: auto,若图片超宽,可能溢出;可加 max-width: 100% 防
示例(安全写法):
@@##@@
当需要图片相对于某个容器(非整个页面)精准居中,且不希望它影响其他内容流时,可用 position: absolute 配合 transform。
position: relative(否则 absolute 会往上找最近的定位祖先,可能跑到 body 去)position: absolute; top: 50%; left: 50%,再用 transform: translate(-50%, -50%) 回拉自身宽高的一半易错点:
@@##@@——漏掉
position: relative,图片就会相对 viewport 定位。
真正麻烦的不是选哪种方法,而是没意识到不同对齐目标对应不同机制:行内对齐靠 vertical-align,块级容器居中靠 margin 或 flex,绝对定位则必须配对设置父子 position。混用或漏条件,就只能看到“怎么调都不对”。