按钮居中不能仅靠margin: 0 auto,因其默认为inline-block而非块级元素,需先设display: block或配合text-align: center;且必须有明确宽度(如fit-content、px值),父容器上下文(如flex/grid/float)也决定其是否生效。
按钮居中不是加一个 margin: 0 auto 就完事——它失效的频率远高于生效,根本原因在于你没管清它的 display 类型、宽度约束和父容器上下文。
它只对块级元素起作用,而 <button> 默认是 inline-block,不是块级。直接写 margin: 0 auto 等于对一个行内元素设左右自动外边距,浏览器直接忽略。
display: block 或 display: inline-block + text-align: center(后者靠父容器)width: fit-content、width: 120px 或 max-width: 80%;写 width: 100% 或留空,margin: 0 auto 依然无效text-align: center——那是居中按钮里的文字,不是按钮本身这是最轻量的水平居中法,但只作用于父容器,且仅影响其内部的行内级内容。
<div>、<section> 等块级元素时text-align: center,按钮保持默认 inline-block(无需改 display)padding-top 或设 line-height 拉高float 元素或 display: flex 子项,text-align 可能被覆盖或失效这是现代项目中最稳的一维居中方案,但漏掉任一前提就会“看起来没动”。
display: flex,否则 justify-content 和 align-items 不生效height: 100vh、min-height: 300px 或继承自父级的高度;纯 height: auto 下 align-items: center 无视觉变化display,Flex 自动处理;多个按钮时,用 justify-content: space-between 或 center 控制间距margin: 0 auto + 块级方案vertical-align: middle 必须加在 <td> 上,不是按钮上——这个属性由父容器控制子元素对齐,且只对 inline/inline-block 有效。
button { vertical-align: middle } → 完全无效td { vertical-align: middle },前提是 td 有足够高度空间td 高度刚好等于按钮高度,middle 和 top 看起来一样;解决方法:显式设 height: 48px,或用 padding: 12px 0 撑开内容区td 设 display: flex; align-items: center,无需调高度,但注意这会让 vertical-align 失效,二者不能共存真正容易被忽略的点是:按钮居中从来不是孤立操作,它永远依赖父容器的 display 类型、尺寸约束和定位上下文。同一个按钮,在 <div> 里用 Flex 居中,在 <td> 里就得换 vertical-align 或 Flex,硬套一种写法只会反复踩坑。