* INPUT 要素 WIDTH 属性 (HTML) [1] [[WebTV]] で実装されています。 [2] どういう [[type]] 属性値に対して有効なのかはわかりませんが、 >>1 の記述から、少なくても [CODE(HTML)[text]], [CODE(HTML)[password]], [CODE(HTML)[textarea]] には有効だと思われます。 [CODE(HTML)[image]] やボタン類にもかもしれません。 [[#comment]] * pre 要素型 width 属性 (HTML, XHTML 1) [3] [CODE(HTMLe)[[[pre]]]] [[要素]]の [DFN[[CODE(HTMLa)[width]] [[属性]]]]は、 [[視覚UA]] にその要素を表示するときの望ましい幅についてのヒントを与えます。 [[UA]] は、この情報を適切な文字の[[大きさ]]の選択や、 適当な[[字下げ]]のために使うことができます。 この属性の値の型は [CODE(SGML)[[[NUMBER]]]] です。望ましい幅の文字数を表します。 この属性は[[非推奨]]です。代替として、 [[CSS]] なら [CODE(CSS)[width]] 属性を使うことができます。 [4] 「文字」なんて単位を幅の指定に使えるのは、 [CODE(HTMLe)[pre]] 要素がそもそも[[固定幅フォント]]で表示されることを期待しているからです。 そうはいっても、 HTML 4 は固定幅フォントで表示することを強制していませんし、 現実の UA でも固定幅で表示されるとは限りません。 (今のシステムだと固定幅のフォントが無いことだってあり得るし。) また、「固定幅」そのものが[[ラテン文字]]圏の事情しか考えていない概念で、 漢字圏で一般に固定幅と呼ばれているものは[[半角]]と[[全角]]の二種類の幅があって、全然固定じゃなかったりします。 [[東南亜細亜]]・[[南亜細亜]]・[[亜剌比亜]]で使われている文字体系だと、 そもそも幅を固定することなんて無茶すぎるでしょう。 そんなような事情ですから、たとえこの属性で「文字幅」単位の指定をしたところで、 たぶん、期待した結果は得られないでしょう。しかも、 HTML 4 仕様書によれば、 この属性はあまり実装されていません。 [5] 仕様書: [[HTML 4]] [[#comment]] * 表の幅 ** table 要素 width 属性 (HTML, XHTML 1) [16] [CODE(HTMLe)[[[table]]]] 要素の [DFN[[CODE(HTMLa)[width]] 属性]]は、 [[表]]の幅を表します。この属性は[[視覚UA]] を想定しています。 仕様書: [[HTML 4]] [17] この属性は省略可能です。 省略されている場合には幅は UA が決定します。 [18] この属性は、 HTML 4 では非推奨ではありません ([[Strict]] [[DTD]] でも使えます)。 しかし、[[スタイル・シート]]を使って指定することがすすめられています (encouraged)。 () [20] Strict 思想的には視覚 UA のレンダリングのためだけのこの属性を HTML で使うのは望ましくないのですが、表のレンダリングの特殊性から、 回線の事情や UA の性能のためにやむを得ないと考えられたこともありました。 (現在ではそのような問題はほぼ解消していますから、 もはや必要ないかもしれませんが。) [19] この属性の値の型は [CODE(SGML)[%[[Length]];]] ([[SGML]] 的には [CODE(SGML)[[[CDATA]]]]) です。 従って、無単位の画素数と百分率による割合のいずれかで指定できます。 百分率は利用可能な水平空間に対する割合と見なされます。 [27] [CODE(HTMLe)[col]] や [CODE(HTMLe)[colgroup]] の幅が相対幅 (割合) で指定されているときには、 表自体の幅も指定しなければなりません。 ([[名無しさん]]) [[#comment]] ** colgroup 要素 width 属性 (HTML, XHTML 1) [6] [CODE(HTMLe)[[[colgroup]]]] 要素の [DFN[[CODE(HTMLa)[width]] 属性]]は、 その[[列群]]に含まれる列の幅の既定値を表します。 (列群の幅ではないので注意。) 列群に含まれる列の幅は、 [CODE(HTMLe)[[[col]]]] 要素で別途指定されていればそれが使われます。 そうでない場合は [CODE(HTMLe)[colgroup]] の値が使われます。 仕様書: [[HTML 4]] [9] この属性は省略可能です。 HTML 4 では多くの要素型の [CODE(HTMLa)[width]] 属性は[[非推奨]]とされていますが、 [CODE(HTMLe)[colgroup]] 要素では非推奨ではありません。 (他の表系要素型と同じく、 表のレンダリングにかかわる特殊事情によるものだと思われます。) [7] この値の型は [CODE(SGML)[%[[MultiLength]];]] ([[SGML]] 的には [CODE(SGML)[[[CDATA]]]]) です。 通常の [CODE(SGML)[%MultiLength;]] 型で認められる[[画素]]単位の整数値 ([CODE(SGML)[%[[Pixels]];]] < [CODE(SGML)[%[[Length]];]])、 百分率値 ([CODE(SGML)[%Length;]])、 相対長 ([CODE(SGML)[%MultiLength;]]) の他に、 特別に、 [CODE(HTML)[0*]] という指定ができます。 [8] 値 [CODE(HTML)[0*]] は、列の内容に必要な最小の幅を表します。 この指定があると、表のレンダリングのために列の内容をすべて知らなければならないので、 徐々にレンダリングすることが難しくなります。 HTML 4 仕様書は著者に注意を促しています。 [[#comment]] ** col 要素 width 属性 [10] [CODE(HTMLe)[[[col]]]] 要素の [DFN[[CODE(HTMLa)[width]] 属性]]には、 [[列]]の幅を指定します。 (列の集合の幅ではないことに注意してください。 [CODE(HTMLa)[[[span]]]] 属性が [CODE(HTML)[2]] 以上であっても、適用されるのはそれぞれの列に対してです。) 仕様書: [[HTML 4]] [11] この属性は省略可能です。 省略した場合で、親 [CODE(HTMLe)[[[colgroup]]]] 要素があって、 そこに [CODE(HTMLa)[width]] 属性が指定されていれば、 その値が使われます。 HTML 4 では多くの要素型の [CODE(HTMLa)[width]] 属性は[[非推奨]]とされていますが、 [CODE(HTMLe)[col]] 要素では非推奨ではありません。 (他の表系要素型と同じく、 表のレンダリングにかかわる特殊事情によるものだと思われます。) [12] この値の型は [CODE(SGML)[%[[MultiLength]];]] ([[SGML]] 的には [CODE(SGML)[[[CDATA]]]]) です。 HTML 4 仕様書には、 [CODE(HTMLe)[colgroup]] で使える [CODE(HTML)[0*]] という指定が可能かどうか明記されていませんが、 [CODE(HTMLa)[width]] 属性の意味は [CODE(HTMLe)[colgroup]] 要素のものと同じと書かれていることや、 [CODE(HTMLe)[colgroup]] の属性が [CODE(HTMLa)[col]] の属性の既定値となることから考えても、 使えると取るのが自然でしょう。 [[#comment]] ** 列幅 [13] 仕様書: HTML 4 列幅の指定には 3 (+ 1) 通りの方法があります。 :固定:[[画素]]単位による固定幅の指定。 [SAMP(HTML)[[CODE(HTMLa)[width]]="30"]] のような無単位数の指定がこれにあたります。 固定で指定されていれば、 表を最初の方から徐々に表示していくことができます。 :百分率指定:百分率 (%) 単位による幅の指定。 [SAMP(HTML)[[CODE(HTMLa)[width]]="30%"]] のような指定がこれに当たります。 この割合は表に利用できる空間 (左右の余白の間で、[RUBYB[浮動] [float]]を含む。) に対するものです。 この場合も最初の方から徐々に表示していくことができます。 :可変幅:[SAMP(HTML)[3*]] のような星印のついた指定です。 これは表に必要な空間に対するものです。 [CODE(HTMLe)[[[table]]]] 要素に [CODE(HTMLa)[width]] 属性が指定されている時には徐々に表示していくことができますが、 そうで無い場合には表のすべてのデータを読み終わらないと幅を決定できません。 :無指定:列の幅の指定が無い場合、 表のすべてのデータが到着しないと適当な幅を決定できませんから、 徐々に表示することはできません。 UA は、表のレンダリング中にある[[こま]]の表示に必要な幅が足りていない時には再描画してもかまいません。 [14] [PRE(HTML)[
... ...rows...
]PRE] たとえば、 HTML 4 仕様書にあるこの例では、 最初の2つの列の幅は何も考えずに決定できますが、 残りの列の幅はすべてのこまを読まないと決定できません。 3番目の列の幅は、 [CODE(HTML)[0*]] ですから、 必要な最小の幅です。残りの4つは内容に必要な幅を [CODE(math)[2 : 1 : 3]] の割合で取ります。 [15] [PRE(HTML)[
... ...rows...
]PRE] 同じく HTML 4 仕様書にあるこの例は、 [CODE(HTMLe)[table]] 要素に [CODE(HTMLa)[width]] 属性があるので、 [CODE(HTML)[*]] の指定がありながらも表全体を読まずに列幅を決定できます。 この表には12個の列があって、最初の10列はそれぞれ15画素、 最後の2列は25画素ずつ使います。 (ちなみに、この例の [CODE(HTMLe)[col]] 要素は [CODE(HTMLa)[id]] を与えるためだけに存在しています。) [[#comment]] ** th 要素・td 要素 width 属性 (HTML, XHTML 1) [21] [CODE(HTMLe)[[[th]]]] 要素および [CODE(HTMLe)[[[td]]]] 要素の [DFN[[CODE(HTMLa)[width]] 属性]]は、 [[視覚UA]] に対して推奨こま幅を指定します。 仕様書: [[HTML 4]] [[#comment]] *** スタイル・シート代替 [22] この属性は'''非推奨'''です。[[スタイル・シート]]で代わりに指定できます。 [[#comment]] *** 属性値 [23] この属性の値は [CODE[%[[Length]]]] です。 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。 [24] この属性は省略可能です。 [[#comment]] *** メモ [25] こまに一々幅なんて指定しても何の役に立つんだか。 [[#comment]] ** メモ [26] 表や列の幅が固定長であっても、 [CODE(HTMLa)[[[cellspacing]]]] や [CODE(HTMLa)[[[cellpadding]]]] のために必要であれば、 [[UA]] は幅をその分ひろげてもかまいません (が、そうする必要はありません。) ( を参照。) [[#comment]] * img 要素・object 要素 width 属性 (HTML, XHTML 1) [34] [[HTML]] の [CODE(HTMLe)[[[img]]]] 要素および [CODE(HTMLe)[[[object]]]] 要素の [DFN[[CODE(HTMLa)[width]] 属性]]は、 [[画像]]や[[物体]]の自然な幅を上書きする値を指定します。 [35] 仕様書: [[HTML 4]] [[#comment]] ** 代替 [38] この属性は、 HTML 4 では個別の属性としては'''非推奨'''にされていませんが、 視覚表現に関わる属性はすべて'''非推奨'''と書かれている章 (13.7 Visual presentation of images, objects, and applets ) の中で規定されています。 [39] 画像や物体の幅は[[スタイル・シート]]で代替できます。 [[CSS]] では [CODE(CSS)[[[width]]]] 特性がこれにあたります。 [[#comment]] ** 属性値 [36] この属性の値は [CODE(SGML)[%[[Length]]]] です。 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。 百分率値で指定されたときには、利用可能な水平幅の対する割合として解釈します。 (自然な画像・物体の幅に対してでは''ありません''。) [SUP[ [HTML 4] ]] [37] この属性は省略可能です。 [[#comment]] ** 応用 [40] 物体が画像であるときには、指定された幅に合わせて拡大・縮小されます。 UA は、 物体や画像が [CODE(HTMLa)[width]] に一致するよう拡大・縮小に最善を尽くすべきです。 [SUP[ [HTML 4] ]] [41] [CODE(HTMLa)[width]] 属性が指定されていると、 UA は物体を取寄せる前に必要な領域を予約して残りの部分をレンダリングすることができます。 物体が到着しても全体ないし物体以後の部分をレンダリングし直さずに済みます。 回線や計算機の能力が貧弱だった時代には、 この理由から [CODE(HTMLa)[width]] や [CODE(HTMLa)[[[height]]]] を [CODE(HTMLe)[img]] 要素に指定することが好ましいと言われていたこともありました。 [[#comment]] ** メモ [42] [CODE(HTMLa)[width]] 属性が物理属性か論理属性か ([[Strict]] な文書で使用するべきかどうか) の問題は [CODE(HTMLa)[[[height]]]] 属性の説明を見てください。 [[#comment]] * applet 要素 width 属性 (HTML, XHTML 1) [28] [[HTML]] の [CODE(HTMLe)[[[applet]]]] 要素の [DFN[[CODE(HTMLa)[width]] 属性]]は、 applet の初期表示領域 (applet が作る[[窓]]や[[対話]]を除きます。) の幅を指定します。 [29] 仕様書: [[HTML 4]] [[#comment]] ** 代替 [30] この属性は HTML 4 で要素型ごと'''非推奨'''とされています。 [CODE(HTMLe)[[[object]]]] 要素型と[[スタイル・シート]]で代替できます。 [[#comment]] ** 属性値 [31] この属性の値は [CODE(SGML)[%[[Length]]]] です。 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。 大文字・小文字は区別されません [SUP[ [HTML 4] ]]。 (区別しようにも大文字も小文字も使えないのですが。) [32] この属性は必須です。省略できません。 [[#comment]] ** 他との関係 [33] 姉妹属性 [CODE(HTMLa)[[[height]]]] (高さ) があります。 [[#comment]] ** メモ [[#comment]] * iframe 要素 width 属性 (HTML, XHTML 1) [43] [[HTML]] の [CODE(HTMLe)[[[iframe]]]] 要素の [DFN[[CODE(HTMLa)[width]] 属性]]は、 [[行内フレーム]]の幅を指定します。 [44] 仕様書: - [[HTML 4]] -- [CODE(HTMLe)[iframe]] 要素 [CODE(HTMLa)[width]] 属性 [[#comment]] ** 属性値 [45] この属性の値は [CODE(SGML)[%[[Length]]]] です。 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。 [46] この属性は省略可能です。 [[#comment]] ** 他との関係 [47] 姉妹属性 [CODE(HTMLa)[[[height]]]] があります。 [[#comment]] ** メモ [[#comment]] * hr 要素 width 属性 (HTML, XHTML 1) [48] [[HTML]] の [CODE(HTMLe)[[[hr]]]] 要素の [DFN[[CODE(HTMLa)[width]] 属性]]は、 水平線の幅を指定します。 [49] 仕様書: - [[HTML 3.2]] -- [CODE(HTMLe)[hr]] 要素 [CODE(HTMLa)[width]] 属性 - [[HTML 4]] -- [CODE(HTMLe)[hr]] 要素 [CODE(HTMLa)[width]] 属性 [[#comment]] ** 代替 [50] この属性は'''非推奨'''です [SRC[HTML 4]]。 代わりに、[[スタイル・シート]]で指定できます。 [[#comment]] ** 属性値 [51] この属性の値は [CODE(SGML)[%[[Length]]]] です。 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。 [SRC[HTML 3.2, HTML 4]] [52] この属性は省略可能です。省略時の既定値は [CODE(HTML)[100%]] です。 ([[DTD]] 的には [CODE(SGML)[#[[IMPLIED]]]]) です。 [SRC[HTML 3.2, HTML 4]] [[#comment]] ** 歴史 [53] この属性は HTML 3.2 で最初に公式な HTML 仕様に導入され、 HTML 4 で非推奨とされました。 [54] HTML 2.0 では [CODE(HTMLe)[hr]] は幅一杯に引かれると規定されており、 [CODE(HTMLa)[width]] 属性の既定値 (>>52) と一致します。 HTML 2.0 は [Q[[CODE(HTMLe)[hr]] は [RUBYB[幅一杯][full width]]]]、 HTML 3.2 は[Q[百分率値は左右余白間の割合]]、 HTML 4 は [Q[[CODE(HTML)[100%]] はすなわち[RUBY[画布][キャンバス]]全体]] と述べています。他の要素との関係で、 100% であっても必ずしも画布一杯に線が引けるとは限りませんから、 HTML 4 の規定は不正確になっていると言えます。 [[#comment]] ** メモ [[#comment]] * メモ