如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
table元素用margin: 0 auto居中必须设明确宽度(如width: 700px或max-width: 90%),否则因无收缩基准而失效;避免width: 100%、float、flex父容器等干扰,且border-collapse: collapse可解决边框重叠问题。

table 元素自身必须有明确宽度才能用 margin: 0 auto 居中
很多人给 <table> 加了 <code>margin: 0 auto 却没效果,根本原因是浏览器无法计算左右外边距——margin: 0 auto 只在“有收缩基准”时生效。如果 table 没设 width,它会默认撑满父容器,变成“无限宽”,auto 就没意义了。
常见错误写法:<table style="margin: 0 auto;"> —— 缺少宽度,白加。
<ul>
<li>
<code>width: 100% 不行:表格会拉满整个 div,失去“居中感”
max-width: 800px + width: 100% 是稳妥组合:窄屏填满,宽屏不超限width: fit-content 更灵活:按内容自动收窄,再配合 margin: 0 auto 居中,适合内容长度波动大的场景width: auto:它在块级上下文中等价于无宽度,margin: 0 auto 仍无效别用 text-align: center + display: inline-table 套路
这种写法看似能绕过宽度限制,实际埋了三个坑:一是父 div 的 text-align: center 会影响内部所有行内元素(比如图标、按钮),二是 inline-table 让表格脱离正常文档流,容易和 float、flex 子项或 CSS 重置冲突,三是打印样式和无障碍读屏器可能跳过或误读该表格。
更麻烦的是,一旦父 div 同时设置了 overflow-x: auto 或 padding,视觉上就会偏移,且难以用开发者工具精准定位。
- 绝对不要给包裹
table的div加float或display: inline - 如果父
div已是flex容器,直接用justify-content: center,别在table上硬加样式 - 检查是否有全局 CSS 重置(如 normalize.css)把
table的display改成了table-row类行为,这会让margin失效
表格内容居中和表格自身居中是两回事
新手常把 text-align: center 加到 <table> 上,以为能整体居中——其实它只作用于单元格内的文字,对表格在页面中的位置毫无影响。真正控制“表格是否在 div 里居中”的,只有 <code>table 自身的 margin 和 display 行为。
-
text-align: center要加在<td> 或 <code><th> 上,才管单元格内容水平对齐 <li> <code>vertical-align: middle必须也加在<td>/<code><th> 上,它在 <code><tr> 或 <code><table> 上完全无效 <li>如果单元格里嵌了 <code><div> 或 <code><p></p>,记得清掉它们的margin和line-height,否则会顶开垂直居中效果 - 别混用
align="center"和text-align:HTML5 已废弃align,两者冲突时浏览器行为不可预测 -
border-collapse: separate(默认值)下,border-spacing再怎么调都只是“间隔”,不是“合并” - 务必同时给
<th> 和 <code><td> 设 border,否则表头和数据行边框粗细/颜色可能不一致 <li>移动端慎用 <code>width: 100%+border-collapse: collapse组合:某些安卓 WebView 会因像素对齐问题让边框模糊
边框重叠问题不解决,居中再准也难看
即使表格完美居中,如果边框看起来又粗又虚,大概率是 border-spacing 在作怪。浏览器默认启用它(等价于旧属性 cellspacing="2"),导致相邻单元格边框分离,视觉上双线叠加。
唯一可靠解法是给 <table> 加 <code>border-collapse: collapse。不加这个,哪怕所有 <td> 都设了 <code>border: 1px solid #000,最终渲染出来也可能像 2px 粗。
真正卡住人的地方,往往不是“怎么写”,而是“为什么写了没反应”——比如父 div 暗地里用了 display: grid 却没声明 place-items,或者全局 CSS 把 table 的 margin 重置成了 0。调试时优先用浏览器开发者工具检查 computed styles,而不是反复改代码。










