[1] [[HTML]] の [CODE(HTMLe)[[[table]]]] 要素の [DFN[[CODE(HTMLa)[frame]] 属性]]は、
表の枠のつけ方を指定します。

仕様書: 
- [[HTML 4]]
-- [CODE(HTMLe)[table]] 要素 [CODE(HTMLa)[frame]] 属性
<IW:HTML4:"struct/tables.html#adef-frame">
-- [CITE[A.3.7 table_changesChanges for tables]]
<IW:HTML4:"appendix/changes.html#table_changes">
-- [CITE[B.5.2 Recommended Layout Algorithms]]
<IW:HTML4:"appendix/notes.html#layout">

[[#comment]]


** スタイル・シート代替

[5] この属性は、 HTML 4 では'''非推奨'''とはされていません。
[[表]]の特殊性によるものとも思えませんし、 [[HTML 4.0]]
の時点で表を扱えない [[CSS1]] だけで [[CSS2]] 
がまだ勧告されていなかったのが原因かもしれません。

[6] [[CSS]] での代替方法は >>2 の表をご覧下さい。
[[XSL]] でも同じような指定ができます。

[[#comment]]


** 属性値

[2] この属性は[[列挙型]]属性です。

,属性値	,説明	,CSS 代替
,[CODE(HTML)[[[void]]]] (既定値)	,なし	,[SAMP(CSS)[border-style: none]]
,[CODE(HTML)[[[above]]]]	,上	,[SAMP(CSS)[border-style: [VAR[あり]] none none none]]
,[CODE(HTML)[[[below]]]]	,下	,[SAMP(CSS)[border-style: none none [VAR[あり]] none]]
,[CODE(HTML)[[[above]]]]	,上	,[SAMP(CSS)[border-style: [VAR[あり]] none none none]]
,[CODE(HTML)[[[hsides]]]]	,上下	,[SAMP(CSS)[border-style: [VAR[あり]] none]]
,[CODE(HTML)[[[vsides]]]]	,左右	,[SAMP(CSS)[border-style: none [VAR[あり]]]]
,[CODE(HTML)[[[lhs]]]]	,左	,[SAMP(CSS)[border-style: none none none [VAR[あり]]]]
,[CODE(HTML)[[[rhs]]]]	,右	,[SAMP(CSS)[border-style: none [VAR[あり]] none none]]
,[CODE(HTML)[[[box]]]]	,すべて	,[SAMP(CSS)[border-style: [VAR[あり]]]]
,[CODE(HTML)[[[border]]]]	,すべて	,[SAMP(CSS)[border-style: [VAR[あり]]]]

[3] [[DTD]] では特に既定値は指定されていませんが、
仕様書本文では [CODE(HTML)[void]] とされています。

[7] [CODE(HTMLa)[[[border]]]] 属性値の [CODE(HTML)[0]] は
[CODE(HTML)[frame=void]] を、それ以外は [CODE(HTML)[frame=border]]
をほのめかすと HTML 4 仕様書には書かれています。
これが >>3 の理由でしょう。

同時に [CODE(HTMLa)[[[rules]]]] 属性も補われますが、
こちらには仕様書に[Q[別途指定がなければ]]と注記があります。
ということは、 [CODE(HTMLa)[frame]] 属性は陽に指定してあっても
[CODE(HTMLa)[border]] 属性が優先するのかもしれません。

(なお、この規定は[Q[互換性のためにそうするべき (shoukd)]] というものです。)

[4] 列挙型ですから、 [[SGML宣言]]の指定によっては
[SAMP(HTML)[frame="above"]] を単に [SAMP(HTML)[above]]
とだけ書いたりもできるのですが、 
[[WWWブラウザ]]のほとんどはそのような書き方には対応していないでしょう。

唯一の例外は [CODE(HTML)[border]] で、これは
[CODE(HTML)[border]] とだけ書く ([CODE(HTMLa)[[[border]]]]
属性の [CODE(SGML)[[[vi]]]] と[[属性値指定]]が省略できるという非 SGML 的な)
従来からの方法との互換のための trickey な方法としてわざわざ入れられています。
[Q[真偽値属性値]] [CODE(HTML)[border]] の歴史については
[CODE(HTMLa)[[[border]]]] 属性の説明をごらんください。


[20]

- [[HTML 4]]
-- [[厳密DTD]]
<IW:HTML4:"sgml/dtd.html#TFrame">
-- [[移行用DTD]]
<IW:HTML4:"sgml/loosedtd.html#TFrame">

([[名無しさん]] [sage])


[[#comment]]


** 歴史

[17] HTML 4 表の開発の時には、将来的に他の表要素にも [CODE(HTMLa)[frame]]
属性を指定できるようにすることを考慮に入れていたそうです。
しかし、 HTML 4 の時点では処理が複雑になり過ぎる割に需要が少ないと判断したようです。
[SRC[HTML 4.01 A.3.7, B.5.1.3, B.5.2]]

[18] [CODE(HTMLa)[frame]] 属性の値は [CODE(HTMLa)[[[rules]]]] 属性や
[CODE(HTMLa)[[[align]]]] 属性や [CODE(HTMLa)[[[valign]]]]
属性と整合性のあるものとできた方が良かったのですが、[[素のSGML]]
で[[列挙型]]とするためにはかないませんでした。 [CODE(HTMLa)[frame]]
を [CODE(SGML)[[[CDATA]]]] にする案もありましたが、 W3C HTML [[WG]]
は名前の整合よりも SGML 的に[[妥当性検証]]可能である方が良いと判断したそうです
[SRC[HTML 4 B.5.2]]。

[19]
HTML 4 DTD の[[注釈]] (参考) には、
(HTML 表モデルの基となった) [[CALS]]
の表とは [CODE(HTMLa)[[[valign]]]]
属性との関係で属性値が異なっていると注記されています。
