* table 要素 border 属性 (HTML, XHTML 1) [1] [[HTML]] の [CODE(HTMLe)[[[table]]]] 要素の [DFN[[CODE(HTMLa)[border]] 属性]]は、表の外側の枠線の幅を指定します。 仕様書: [[HTML 4]] [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 which yields frame=border and border=implied For
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)[
]] == [SAMP(HTML)[
]] (HTML 4 仕様書より) - [10] [SAMP(HTML)[
]] == [SAMP(HTML)[
]] (HTML 4 仕様書より) [14] [PRE(HTML)[
Cups of coffee consumed by each senator
Name Cups Type of Coffee Sugar?
T. Sexton 10 Espresso No
J. Dinnen 5 Decaf Yes
]PRE] (HTML 4 仕様書より) [13] [PRE(HTML)[
1 2 3
4 5 6
7 8 9
]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)[ ]PRE] は [PRE(HTML example code)[
]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]] 属性 -- [CITE[HTML 4 Changes]] [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]] [[#comment]] ** メモ [33] [CITE@ja[入力フォームとマルチメディアを活用する]] ([CODE[2007-06-10 21:04:18 +09:00]] 版) > HTMLのタグとまったく同様。ただしモバイル向けの場合、リンクを張ったときには「border="1"」にして、利用者にリンクを張っている画像であることを告知するのが暗黙の了解となっている。ピクチャー広告(通常のWebでいうバナー広告のこと。モバイルではこのように呼ぶことが多い)などの扱いに気を付けたい。 この連載は妄想が多いので本当かどうか知りませんが。 ([[名無しさん]]) [[#comment]] * メモ [28] [CITE[[WebKit] CSS3のborderとbackground(一部)をサポート]] ([[名無しさん]] [WEAK[2005-08-29 01:43:15 +00:00]]) [31] [CITE@ja[Bug 4355 px以外の単位を使うとborderの太さが一定にならない - WebStudio]] ([CODE[2006-11-28 11:04:46 +09:00]] 版) ([[名無しさん]] [WEAK[2006-12-28 02:07:28 +00:00]]) [34] [[WinIE 6]] では [CODE(CSS)@en[[[border]]]]、[CODE(CSS)@en[[[border-top]]]] などに のように値を1つ以上いくつでも指定できるようです。 [CODE(CSS)@en[[[border-color]]]]、[CODE(CSS)@en[[[border-style]]]]、 [CODE(CSS)@en[[[border-width]]]] それぞれで最後に指定された値が有効になります。指定されなかった種類はまったく設定されません ([[CSS 2.1]] によれば[[初期値]]が設定されなければなりません)。 [CODE(DOMa)@en[[[border]]]] や [CODE(DOMa)@en[[[borderTop]]]] などに値が設定されるのは、構成する3種類 (または3種類×4辺) のすべてに値が設定されている場合のみのようです。 ([[名無しさん]]) [35] [[Firefox]] 2 や [[Opera]] 9 には >>34 のような[[奇癖]]はなく、 [[CSS 2.1]] 通りに実装しているようです。 ([[名無しさん]]) [36] 色の[[初期値]]の扱いについては [CODE(CSS)@en[[[border-color]]]] の項を参照。 ([[名無しさん]]) [37] ↑ こんな感じのやつででてくる値を調べてみた [[Firefox]] 2 [CODE(DOMm)@en[[[getComputedStyle]]]]: [[空文字列]] [[WinIE 6]] [CODE(DOMa)@en[[[currentStyle]]]]: [CODE(JS)@en[[[undefined]]]] ([CODE(DOMa)@en[[[currentStyle]]]] には [[shorthand]] の[[DOM属性]]がないらしい) [[Opera]] 9: ,指定した値 ,[CODE(DOMm)@en[[[getComputedStyle]]]] ,[CODE(DOMa)@en[[[currentStyle]]]] ,[CODE(CSS)@en[[[medium]]]] ,[CODE(CSS)[0[[px]] #000000]] ,[CODE(CSS)[3[[px]]]] ,[CODE(CSS)@en[[[medium]] [[solid]]]] ,[CODE(CSS)[3[[px]] [[solid]] #000000]] ,[CODE(CSS)[3[[px]] [[solid]]]] ,[CODE(CSS)@en[10[[px]] [[dotted]]]] ,[CODE(CSS)[10[[px]] [[dotted]] #000000]] ,[CODE(CSS)[10[[px]] [[dotted]]]] ,[CODE(CSS)[10[[mm]] [[inset]] [[blue]]]] ,[CODE(CSS)[38[[px]] [[inset]] #0000ff]] ,[CODE(CSS)[10[[mm]] [[inset]] #0000ff]] ([[名無しさん]]) [38] [CITE@en[border model - onderhond blog - onderhond.com]] ([CODE[2008-05-05 20:43:42 +09:00]] 版) ([[名無しさん]]) [39] [CITE@ja[テーブルのボーダーに余白がある場合のサンプル|CSS HappyLife]] ([TIME[2008-05-23 19:07:12 +09:00]] 版) * 境界領域 [40] [[箱]]の[[余白領域]]と[[詰め領域]]の間の[[領域]]を[DFN[[RUBYB[境界領域]@en[border area]]]]といいます。 [42] [[CSS 2.1]] には「optional」と書いてあるので、幅 0 の時は厳密に言えば[[境界領域]]は存在しないということになります。 [43] [[境界領域]]の外周を[DFN[[RUBYB[境界辺]@en[border edge]]]]と呼びます。 [[境界領域]]が存在しない時は[[詰め辺]]と同じです。 [SRC@en[[[CSS 2.1]] 8.1]] [44] [[境界辺]]に囲まれる領域を[DFN[[RUBYB[境界箱]@en[border box]]]]と呼びます。 [SRC@en[[[CSS 2.1]] 8.1]] * 仕様書 [41] [CITE@en[Box model]] ([TIME[2007-07-18 02:08:55 +09:00]] 版) * 背景 [45] [[境界領域]]の[[背景]]は [CODE(CSS)@en[[[background]]]] に拠ります [SRC@en[[[CSS 2.1]] 8.1]]。 * Viewport の境界箱 [46] [[Viewport境界箱]]の項を参照してください。