frame属性仅控制table外边框“画哪几条线”,不控制颜色、粗细、样式,也不影响内部单元格分隔线;常见值如hsides显上下边、vsides显左右边、void完全隐藏外框,且与CSS border互斥,现代开发应使用CSS替代。

frame 属性只控制 <table> 外边框“画哪几条线”,不控制颜色、粗细、样式,也不影响内部单元格分隔线。它在现代开发中基本被 CSS 取代,但若你必须用(比如维护老项目),得清楚它到底怎么生效。
frame 常见取值对应哪些边可见
frame 的值不是“方向描述”,而是“边名缩写”,容易按字面误解:
- hsides → 上边 + 下边(horizontal sides),不是“水平线”
- vsides → 左边 + 右边(vertical sides),不是“竖直线”
- lhs 和 rhs 是 legacy 写法,分别指 left-hand side / right-hand side,**不是 left 或 right**(拼错就无效)
- void:外框彻底消失(哪怕写了 border="1" 也无效)
- box 和 border 效果相同,都是四边全显,默认行为
为什么设了 frame="void" 还能看到外框
这不是frame 失效,而是你同时用了 CSS:
- frame 只对纯 HTML 渲染路径起作用(即无任何 table { border: ... } 规则时)
- 一旦页面中有类似 table { border: 1px solid #000 } 的 CSS,frame 被完全忽略
- IE 会错误地把 frame 应用到内部单元格边框(其他浏览器不会)
frame 和 rules 完全无关
frame 管最外一圈,rules 管内部线(行/列之间):
- rules="rows" 控制行与行之间的线,不影响外框
- rules="cols" 控制列与列之间的线
- rules="all" 所有单元格交界处都画线,但外框仍由 frame 单独决定
- 两者可共存,但各自独立生效,别指望用 frame="hsides" + rules="cols" 搞出“只有上下外框+竖向内线”的组合效果——frame 不支持混搭多边,想精确控制必须用 CSS
现代项目里该用什么替代 frame
直接删掉frame 属性,改用 CSS:
- 控制外框:用 border-top、border-bottom 等单边属性,或 border 简写
- 控制内外边框统一性:加 border-collapse: collapse 避免双线重叠
- 想隐藏某几条外边?CSS 比 frame 灵活得多,比如 border: 1px solid #000; border-left: none; border-right: none;
- 注意:HTML5 已废弃 frame,部分构建工具或 linter 会报 warning
真正麻烦的不是记不住 hsides 是上下边,而是忘了它和 CSS border 互斥——只要有一行 table 样式,frame 就等于没写。



















