text-align 对浮动元素无效,因其仅作用于行内内容和非浮动块级子元素;浮动元素已脱离文档流和行盒,故无法被 text-align 控制对齐。
很多人以为给父容器加 text-align: center 就能让浮动子元素居中,结果完全没反应。这是因为 float 会把元素“拎出”正常流,text-align 只作用于**行内内容和非浮动块级子元素**,对已浮动的元素不产生对齐效果。
常见错误现象:
.container {
text-align: center;
}
.container .box {
float: left;
width: 100px;
height: 100px;
background: #ccc;
}——.box 依然靠左贴边,不会居中。
如果你在浮动元素旁边放一段文字,或者插入一个 ,那么 text-align 才会影响那段文字的对齐位置。它不是用来控制浮动布局的工具。
text-align 管的是父容器的「行盒(line box)」内部对齐margin: 0 auto,而不是 text-align
只有一种情况它们会协同工作:父容器内**同时存在浮动元素和普通文本内容**,你需要文本相对于容器对齐,而浮动元素用于图文环绕(比如新闻正文里图片左浮、文字绕排)。
这时:
.article {
text-align: justify; /* 控制段落文字对齐 */
}
.article img {
float: left;
margin-right: 12px;
}——float: left 让图片左贴边并让文字环绕;text-align: justify 则控制剩余文字的排版对齐方式。
关键点:
float 处理元素定位与环绕,text-align 处理文本内容对齐text-align “修正”浮动导致的布局错位shape-outside 或 Flex/Grid 替代 float如果目标是让几个块级元素水平排列并整体居中,float 本身就不适合,强行用会引入清除浮动、高度塌陷等一堆问题。
推荐做法:
display: flex + justify-content: center
margin: 0 auto(需设宽度)或 flex/grid

display: grid 配合 auto-fit 和 minmax()
inline-block + text-align: center 在父容器上,子元素设 vertical-align: top
浮动的本质是为图文混排设计的,不是布局工具。现在还依赖它做整体对齐,等于在用打字机排网页。容易被忽略的是:一旦用了 float,后续所有兄弟元素的布局行为都会受其影响,而这种影响常常是隐式的、难调试的。