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

frame属性只控制“画哪几条外边”,不控制样式
frame 是 <table> 的原生 HTML 属性,它不设置颜色、粗细、虚线或圆角,也不影响内部单元格分隔线。它只决定最外一圈四条边中“哪些边被渲染出来”。一旦页面里存在任意一条 <code>table { border: ... } CSS 规则,frame 就完全失效——不是叠加,而是被忽略。
常见误判点:看到 frame="void" 还有外框,第一反应是属性写错了。其实更大概率是 CSS 的 border 在起作用,或者浏览器默认样式(比如某些 UA stylesheet 里有 table { border-collapse: collapse; border: 1px solid currentColor })。
hsides 和 vsides 容易理解反,记住“sides 指边的位置,不是线的方向”
hsides 不是“水平线条”,而是 horizontal sides —— 即 top 和 bottom;vsides 同理,是 left 和 right。命名来自边框所在的“侧”(side),不是线条朝向。
-
frame="hsides"→ 只显示上边 + 下边 -
frame="vsides"→ 只显示左边 + 右边 -
frame="above"→ 只显示上边 -
frame="lhs"→ 只显示左边(注意不是left,拼错无效) -
frame="void"→ 四边全不画(哪怕写了border="1")
为什么设了 frame="void" 还能看到外框?
根本原因不是 frame 失效,而是它被绕过了。以下情况会让 frame 彻底不生效:
- 页面中存在任何
table { border: ... }CSS 规则(包括 reset、normalize 或框架自带样式) - 使用了
border-collapse: collapse且父容器或祖先元素有边框继承 - 在 IE 中,
frame会被错误地应用到内部单元格边框上(其他浏览器不会) - Vite/Webpack 等构建工具在 HTML 压缩阶段可能直接剔除
frame属性
调试时建议临时禁用所有 CSS,再检查是否还有外框——如果有,说明是 HTML 层面的 border 属性或 UA 样式在起作用。
现代项目里别用 frame,用 CSS 替代才可控
frame 在 HTML5 中已被明确标记为“不推荐(obsolete)”,不是因为不能用,而是它和现代开发逻辑冲突:
- 无法响应式控制(比如
@media下切换边框) - 不支持
border-radius、box-shadow、渐变边框等任意视觉效果 - 与结构分离原则相悖:把表现逻辑硬塞进 HTML 标签里
- 多表格统一调整时,必须逐个改 HTML,而不是改一处 CSS
真正需要精细控制时,直接用:table { border-top: 1px solid #333; border-bottom: 2px dashed #999; }。如果要隐藏全部外框,table { border: none; } 比 frame="void" 更可靠、更可预测。
最容易被忽略的是:老项目里同时出现 frame 和 border 属性,不代表它们协同工作——它们走的是不同渲染路径,最终谁生效,取决于解析顺序、CSS 加载时机、以及浏览器对过时特性的兼容策略。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











