

* table 要素 border 属性 (HTML, XHTML 1)

[1] [[HTML]] の [CODE(HTMLe)[[[table]]]] 要素の
[DFN[[CODE(HTMLa)[border]] 属性]]は、表の外側の枠線の幅を指定します。

仕様書: [[HTML 4]]
<IW:HTML4:"struct/tables.html#adef-border-TABLE">

[26]
HTML 4 DTD の[[注釈]] (参考) には
[Q[The BORDER attribute sets the thickness of the frame around the table. The default units are screen pixels.]]
という説明があります。単位についての記述は [[HTML 3]] の名残でしょうか。
([[名無しさん]] [sage])

[[#comment]]


** スタイル・シート代替

[2] この属性は HTML 4 では'''非推奨'''とされているわけではありませんが、
視覚的指定に過ぎないことから、代わりに[[スタイル・シート]]で指定することが望ましいと考えられます。

[3] [[CSS]] や [[XSL]] では、
[SAMP(CSS)[[[border-width]]]] 系[[特性]]・[[属性]]で代用できます。

[[#comment]]


** 属性値

[4] この属性の値は [CODE[%[[Pixels]]]] です。
幅を[[画素]]単位で指定します。

(HTML 4 仕様書は、 [CODE(HTMLe)[[[img]]]] 
要素などの同名属性との型の違いに注意を促しています。)

[[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。
([CODE(SGML)[[[NUMBER]]]] でもよかったのにと思いますが。)

[5] この属性は省略可能です。

[6] この属性は [SAMP(HTML)[border="2"]] のように記述しますが、
[[属性値指定]]を省略したような [SAMP(HTML)[border]] 
という指定も使われてきました。この指定は [[SGML]]
的立場が微妙でしたが、最終的に[[列挙型]]の [CODE(HTMLa)[[[frame]]]]
属性の一属性値に収まりました。 >>7 を参照。

[[#comment]]


** 他の属性への影響

[8] HTML 4 仕様書は、後方互換性のため、 [[UA]]
は次のように解釈するべき (should) としています。

- [CODE(HTML)[border="0"]] は [CODE(HTML)[frame="void"]]
を暗示し、また、別途指定がない限り、 [CODE(HTML)[rules="none"]] を暗示する
- [CODE(HTMLa)[border]] の他の値は [CODE(HTML)[frame="border"]]
を暗示し、また、別途指定がない限り、 [CODE(HTML)[rules="all"]] を暗示する
- [CODE(HTMLe)[table]] 要素の[[開始タグ]]中の値 [CODE(HTML)[border]]
は [CODE(HTMLa)[frame]] 属性の値と解釈するべきである。
これは [CODE(HTMLa)[rules="all"]] を暗示し、
[CODE(HTMLa)[border]] 属性になんらかの (零でない) 既定値を暗示する。

[CODE(HTMLa)[[[rules]]]] には[Q[別途指定がない限り]]が係っているのに、
[CODE(HTMLa)[[[frame]]]] はそうでないのは、
[CODE(HTMLa)[frame]] に陽に指定があっても上書きされるということでしょうか?
最後の場合の [CODE(HTMLa)[rules]] にも修飾がありませんが、
これはどうでしょうか? (SGML 的には2つ目と [CODE(HTMLa)[border]]
属性の存在以外区別できないはずですが。)

[11]
そういえば [CODE(HTMLa)[border]] 属性の既定値の規定はありませんが、
他の属性を見て UA が勝手に決めてよいのでしょうか
(よくないと困るか)。

[15]
>>8 の3つ目 [Q[[CODE(HTMLa)[frame]] 属性の値と解釈するべき]]って、
それ以外の解釈は明らかに SGML
違反なのですから、 SGML 応用たる HTML
の仕様書が認めちゃいかんと思うのですがねぇ。
([[名無しさん]])

[27]
HTML 4 DTD の[[注釈]] (参考) には

> The value "border" is included for backwards compatibility with
<TABLE BORDER> which yields frame=border and border=implied
For <TABLE BORDER=1> you get border=1 and frame=implied. In this
case, it is appropriate to treat this as frame=border for backwards
compatibility with deployed browsers.

と書かれています。
([[名無しさん]] [sage])

[[#comment]]


** 例

- [9] [SAMP(HTML)[<TABLE border="2">]] == [SAMP(HTML)[<TABLE border="2" frame="border" rules="all">]]
(HTML 4 仕様書より)
- [10] [SAMP(HTML)[<TABLE border>]] == [SAMP(HTML)[<TABLE frame="border" rules="all">]]
(HTML 4 仕様書より)

[14]
[PRE(HTML)[
<TABLE border="1" 
       summary="This table charts the number of cups
                of coffee consumed by each senator, the type 
                of coffee (decaf or regular), and whether 
                taken with sugar.">
<CAPTION>Cups of coffee consumed by each senator</CAPTION>
<TR>
   <TH>Name</TH>
   <TH>Cups</TH>
   <TH>Type of Coffee</TH>
   <TH>Sugar?</TH>
<TR>
   <TD>T. Sexton</TD>
   <TD>10</TD>
   <TD>Espresso</TD>
   <TD>No</TD>
<TR>
   <TD>J. Dinnen</TD>
   <TD>5</TD>
   <TD>Decaf</TD>
   <TD>Yes</TD>
</TABLE>
]PRE]

(HTML 4 仕様書より)

[13]
[PRE(HTML)[
<TABLE border="5" frame="vsides" rules="cols">
<TR> <TD>1 <TD>2 <TD>3
<TR> <TD>4 <TD>5 <TD>6
<TR> <TD>7 <TD>8 <TD>9
</TABLE>
]PRE]

(HTML 4 仕様書より)

レンダリング例:
[PRE[
# 1 | 2 | 3 #
# 4 | 5 | 6 #
# 7 | 8 | 9 #
]PRE]

[[#comment]]


* table 要素の開始タグの値 border (HTML, XHTML 1)

[7] [[HTML]] の [CODE(HTMLe)[[[table]]]] 要素の[[開始タグ]]には、
[DFN[[CODE(HTML)[border]]]] という値を指定できます。

これは、 [CODE(HTMLa)[border]] 属性の属性値の省略と解釈されてい
(ることもあり) ました。
しかし、 [[SGML]] 的にはありえないので、
最終的には[[列挙型]]の [CODE(HTMLa)[[[frame]]]] 属性の値 [CODE(HTML)[border]]
と別の属性 [CODE(HTMLa)[border]] として再定義されるに至りました。

[12] 未調査:
- [CODE(HTML)[border]] と [CODE(HTML)[border=[VAR[n]]]]
はどちらが先か、同時か。
- [[DTD]] での表現の変遷。

[24]
[CODE(HTMLa)[border]] (元)真偽値属性はなんと
HTML 仕様案に一番最初に表が入った時
(当時はまだ要素型名が
[CODE(HTMLe)[table]] じゃなくて
[CODE(HTMLe)[[[tbl]]]] だった。) 
からずっとあります。

[CODE(HTMLa)[border]] なしが default
なのだから [CODE(HTMLe)[table]] は元々レイアウト用だったのだろ、とか勝手に思い込んでいる人もいるようですが、
ただ単に、線を引かないという指定よりも線を引くという指定の方が分かりやすいからとかそんなような理由でしょう。
参考になった [[LaTeX]] などの表モデルも[Q[どこに線を引かないか]]ではなく[Q[どこに線を引くか]]の指定ですし。
([[名無しさん]])

[30]
[[WinIE]], [[Firefox 1.5]], [[Opera 8]]で確認してみましたが、
[PRE(HTML example code)[
<table border>
]PRE]

は
[PRE(HTML example code)[
<table border="1">
]PRE]

と内部的に扱われているようです。

[[HTML 5]]でもそうするつもりだと前にIanが書いていた気もします。
([[名無しさん]])

[[#comment]]


* object 要素・img 要素 border 属性 (HTML, XHTML 1)

[16] [[HTML]] の [CODE(HTMLe)[[[object]]]] 要素および
[CODE(HTMLe)[[[img]]]] 要素の [DFN[[CODE(HTMLa)[border]] 属性]]は、
[[物体]]や[[画像]]を囲む[[枠]]の太さを指定します。

[17] 仕様書:
- [[HTML 4]]
-- [CODE(HTMLa)[border]] 属性 <IW:HTML4:"struct/objects.html#idx-border">
-- [CITE[HTML 4 Changes]]
<IW:HTML4:"appendix/changes.html#h-A.1.1.9">

[25]
HTML 4 DTD の[[注釈]] (参考) には
[Q[link border width]] と書かれています。
([[名無しさん]] [sage])

[[#comment]]


** 代替

[18] この属性は HTML 4 で'''非推奨'''とされています。
[[スタイル・シート]]で代替できます。

[19] [[CSS]] の場合、 [SAMP(CSS)[[[border]]]]
系特性群で HTML よりも遥かに詳細な指定ができます。

[[#comment]]


** 属性値

[20] この属性の値は [CODE(SGML)[%[[Pixels]]]] です [SRC[HTML 4.01 13.7.3]]
[WEAK[(以前は [CODE(SGML)[%[[Length]]]] とされていました [SRC[HTML 4.0 13.7.3]])]]。
[[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。

[29]
[CODE(HTMLe)@en[[[img]]]] [[要素]]では、''非標準''の値
[CODE(HTML)@en[[[noborder]]]] が観測されています。

[21] この属性は省略可能です。省略した場合の既定値は UA 依存です。 [SRC[HTML 4 13.7.3]]

[[#comment]]


** レンダリング

[22] [[mosaic]] 以来の視覚ブラウザの典型既定レンダリングは、
画像が ([CODE(HTMLe)[[[a]]]] の子孫で) 
[[始点アンカー]]であるときにはリンク前景色で四辺を枠線で囲み、
それ以外のときには枠線なしです。

[[#comment]]


** 不思議解釈

[23] >>22 の既定レンダリングはえらく不評らしく、
[CODE(HTMLe)[a]] 内の [CODE(HTMLe)[img]] には 
[CODE(HTML)[[CODE(HTMLa)[border]]="0"]] 
を指定するという[Q[技]]が[[タグ講座]]でよく紹介されていましたし、
実際にもよく使われていました。

それに対してリンクであることがわかりにくくなるから好ましくないとの意見もありました。

[[#comment]]


** 歴史

[32] [CODE(HTMLe)@en[[[img]]]] [[要素]]の
[CODE(HTMLa)@en[[[border]]]] [[属性]]は [[HTML 2.0]] の拡張として
[[Netscape Navigator]] が実装しました。

[[画像]]の周りの[[枠線]]の[[太さ]]が指定できるとされていました。
[[リンク]]の一部たる[[画像]]の [CODE(HTMLa)@en[[[border]]]]
を [CODE(HTML)[[[0]]]] にすると[[利用者]]が混乱する虞があると警告されていました。

;; [CITE[Netscape Navigator Extensions to HTML]] 
<http://web.archive.org/web/20000415023954/http://www.netscape.com/home/services_docs/html-extensions.html>

[[#comment]]


** メモ

[33]
[CITE@ja[入力フォームとマルチメディアを活用する]] ([CODE[2007-06-10 21:04:18 +09:00]] 版) <http://www.atmarkit.co.jp/fmobile/rensai/xhtml04/xhtml04.html>

> HTMLの<img>タグとまったく同様。ただしモバイル向けの場合、リンクを張ったときには「border="1"」にして、利用者にリンクを張っている画像であることを告知するのが暗黙の了解となっている。ピクチャー広告(通常のWebでいうバナー広告のこと。モバイルではこのように呼ぶことが多い)などの扱いに気を付けたい。

この連載は妄想が多いので本当かどうか知りませんが。
