frame属性只控制外边框“画哪几条线”,不控样式、颜色、粗细,也不影响内部线;设frame="void"仍见外框主因是css border规则使其失效。

frame 属性只控制 <table> 最外一圈四条边中“哪些边画出来”,不设颜色、粗细、圆角,也不影响内部单元格分隔线。它和 CSS 的 <code>border 是互斥的:一旦页面里有任意一条 table { border: ... } 规则,frame 就完全失效。
frame 值对应哪几条边?别被名字骗了
“hsides”不是“水平方向的边”,而是 horizontal sides —— 即上边(top)和下边(bottom);“vsides”同理,是 left 和 right。命名来自边框所在“侧”(side),不是线条朝向。
-
frame="void":外框彻底消失(哪怕写了border="1") -
frame="above":只画顶部边框 -
frame="hsides":只画顶部 + 底部边框 -
frame="vsides":只画左侧 + 右侧边框 -
frame="lhs"或frame="rhs":注意是lhs(left-hand side),不是left;拼错就无效 -
frame="box"和frame="border"效果相同,都画四边
为什么设了 frame="void" 还能看到外框?
常见误判点:以为 frame 和 border 属性可以共存或叠加生效。实际上:
- 如果只用 HTML,
frame="void"会压倒border="1",外框真的消失 - 但只要存在任何 CSS 边框规则(比如
table { border: 1px solid #000 }),frame被浏览器直接忽略 - IE 8 及更早版本根本不支持
frame;IE9+ 虽支持,却错误地把frame应用到内部单元格边框上 - Safari 2.0 及更早版本也不支持;部分移动端 WebView 行为不稳定
现代项目里该不该用 frame?
基本不该。它已被 HTML5 明确标记为“不推荐”,原因很实际:
- 无法设置颜色、虚线、圆角、响应式宽度等任意样式
- 和 CSS
border冲突,调试时很难判断边框来源是 HTML 还是 CSS - Vite、Webpack 等构建工具在 HTML 压缩阶段可能直接剔除
frame属性 - 真要只显外框、隐藏内线,用这两句更可靠:
table { border-collapse: collapse; border: 1px solid #000; }<br>table td, table th { border: none; }
真正容易被忽略的是:老项目里同时出现 frame 和 border,不代表它们协同工作——它们是不同渲染路径下的指令,谁最后解析、是否启用 CSS,决定了最终显示结果。











