* fieldset 要素型 (HTML, XHTML 1) [5] [DFN[[CODE(HTMLe)[fieldset]] 要素]]は、 [[フォーム]]の[[制御子]]や[RUBY[名札] [ラベル]]をまとめるために使います。 [16] 仕様書: - [[HTML 4]] ([[Web Forms 1.0]]) -- [CITE[17.10 Adding structure to forms: the [CODE(HTMLe)[FIELDSET]] and [CODE(HTMLe)[LEGEND]] elements]] - [[Microsoft]] -- [CITE@en-us[fieldSet Object]] [17] :[[開始タグ]]:必須 :[[終了タグ]]:必須 :[[内容模型]] (HTML 4):[CODE(SGML)[([[空白]], [CODE(HTMLe)[[[legend]]]], (%[[flow]])*)]] :内容模型 (ISO‐HTML): [CODE(SGML)[(空白, [CODE(HTMLe)[legend]], (%[[block]] | %[[inline]] | [CODE(HTMLe)[[[address]]]])+) −([CODE(HTMLe)[fieldset]])]] :出現できる文脈:[CODE(SGML)[%[[block]]]] が出現できる場所。 (歴史的変遷: ) :[[属性]]: ,属性名 ,属性値 ,既定値 ,説明 ,出典 ,[CODE(HTMLa)@en[[[align]]]] , , ,非標準 ,[CODE(HTMLa)[[[class]]]] , ,(なし) ,[[級]] ,"[HTML 4] %[[coreattrs]] ⊂ %[[attrs]], [XHTML 1] [[Core]] ⊂ [[Common]]" ,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,"[HTML 4] %[[i18n]] ⊂ %attrs, [XHTML 1] [[I18N]] ⊂ Common" ,[CODE(HTMLa)[[[id]]]] ,[CODE(SGML)[[[ID]]]] ,(なし) ,一意識別子 ,"[HTML 4] %coreattrs ⊂ %attrs, [XHTML 1] Core ⊂ Common" ,[CODE(HTMLa)[[[lang]]]] , , ,[[自然言語]] ,[HTML 4] %i18n ⊂ %attrs ,[CODE(HTMLa)[[[xml]]:lang]] , , ,自然言語 ,[XHTML 1] I18N ⊂ Common ,[CODE(HTMLa)[[[onclick]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %[[events]] ⊂ %attrs, [XHTML 1] [[Events]] ⊂ Common" ,[CODE(HTMLa)[[[ondblclick]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onkeydown]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onkeypress]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onkeyup]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmousedown]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmousemove]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmouseout]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmouseover]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmouseup]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[style]]]] , , ,スタイル情報 ,"[HTML 4] %coreattrs ⊂ %attrs, [XHTML 1] [[Style]] ⊂ Common" ,[CODE(HTMLa)[[[title]]]] , , ,注釈的題 ,"[HTML 4] %coreattrs ⊂ %attrs, [XHTML 1] Core ⊂ Common" ** 内容模型 [6] [[HTML 4]] の [[DTD]] では、 [CODE(HTMLe)[fieldset]] 要素型の内容模型は [CODE(SGML)[(#[[PCDATA]], [CODE(HTMLe)[LEGEND]], ([VAR[%flow]])*)]] とされていますが、注釈で、 [CODE(SGML)[#PCDATA]] は[[混合内容]]問題を解決するためで、 [[空白]]のみが許される、とされています。 もし内容模型が [CODE(SGML)[([CODE(HTMLe)[legend]], ([VAR[%flow]])*)]] であったとすると、 [PRE(HTML)[
%flow;
]PRE] のように [CODE(HTMLe)[legend]] の開始タグの前に空白がある時に、 (この内容模型は [CODE[[VAR[%flow]]]] 内に [CODE(SGML)[#PCDATA]] が含まれているため、混合内容であり、) その空白が [CODE(SGML)[#PCDATA]] に該当する[[データ]]とされてしまいます。 しかし、 [CODE(HTMLe)[fieldset]] 要素内にはデータより先に [CODE(HTMLe)[legend]] 要素が必要ですから、非[[妥当]]にされてしまいます。 この問題には、 - [CODE(HTMLe)[legend]] 要素の開始タグは必ず [CODE(HTMLe)[fieldset]] 要素の開始タグの直後に書く (字下げは諦める) - [CODE(HTMLe)[[[textflow]]]] 要素型や [CODE(HTMLe)[[[bodytext]]]] 要素型のようなダミーを用意する - [CODE(SGML)[#PCDATA]] を許してしまう (厳密性を諦める) の三つの解法があります。 HTML 4 は最終的には三番目の解法を 選択しました。 [7] ところで、 HTML 4 DTD 注釈には [Q[per specification only whitespace is allowed there]] と書いてありますけど、仕様書のどこに書いてあるのでしょうか? (HTML 4 DTD 内の注釈は[RUBYB[参考] [informative]]だし、 心許ないなあ。でも ISO‐HTML の注釈は[RUBYB[規定] [normative]]だ。) [10] [[XHTML 1]] では、 [[XML]] の制約から、 更に自由な内容模型 [CODE(XML)[(#PCDATA | %[CODE(HTMLe)[legend]].qname; | %[[Flow.mix]];)*]] になってしまっています。 だけど混合内容問題を解決するために〜という注釈は残ったままなので意味不明になっています。 ([CODE(HTMLe)[fieldset]] 内は全く要素か空白しか入れられないように読めてしまう。) たとえば: [11] HTML 4 でも XHTML 1 でも、 [CODE(HTMLe)[form]] 要素の子孫に [CODE(HTMLe)[form]] 要素を入れることはできませんから、 [CODE(HTMLe)[form]] 要素の子孫である [CODE(HTMLe)[fieldset]] 要素の子孫として [CODE(HTMLe)[form]] 要素を入れることはできません。しかし、 [CODE(HTMLe)[form]] 要素の子孫ではない [CODE(HTMLe)[fieldset]] 要素の子孫に [CODE(HTMLe)[form]] 要素を入れることは可能のようです。 [15] ISO‐HTML では [CODE(HTMLe)[fieldset]] 要素の入れ子は禁止されています。 [20] HTML 4 DTD の[[注釈]] (参考) の説明: > #PCDATA is to solve the mixed content problem, per specification only whitespace is allowed there! [[#comment]] ** 文脈 [29] [[Cougar]] (>>25) 以来、 [CODE(HTMLe)@en[[[fieldset]]]] は[[ブロック水準要素]] ([CODE(SGML)@en[%[[block]];]]) に分類されています。 [30] ちなみに、 [[HTML 2.0]] の [[DTD]] では[[フォーム制御子]]は [CODE(HTMLe)@en[[[form]]]] [[要素]]内でしか使えないことになっていましたが、 [[HTML 3.2]] や [[HTML 4]] ([[Cougar]]) では[[行内要素]] ([CODE(SGML)@en[%[[text]];]]) とされていて、 [CODE(HTMLe)@en[[[form]]]] の外でも使えます。 [CODE(HTMLe)@en[[[fieldset]]]] [[要素]]も特に [CODE(HTMLe)@en[[[form]]]] [[要素]]内に限定されてはいません。 [[#comment]] ** UA による利用 [[#comment]] *** レンダリング [8] [CODE(HTMLe)[fieldset]] による集団化情報を使って、 [[視覚UA]] は[[タブ]]を使ったレンダリングができますし、 [[音声UA]] もより分かりやすいレンダリングができます。 従って利用者はよりフォームの制御子等の目的を理解しやすくなり、 文書の[[アクセス可能性]]が高まります。 [SRC[HTML 4 17.10]] [18] HTML 4 (というか HTML 3 Form) の最初期の草案ではもろにタブをマークする方法も検討されていたこともあったようですが、 最終的にレンダリングに中立な[Q[集団化]]に留まったのでしょう。 しかし、同じ [CODE(HTMLe)[[[form]]]] 内の近隣の [CODE(HTMLe)[[[fieldset]]]] をまとめてタブ集合として表示する UA なんて見たことがありません。 実際にタブとしてレンダリングするには [CODE(HTMLe)[[[li]]]] に対する [CODE(HTMLe)[[[ul]]]] のような包含子要素が要るのではないでしょうか。 [9] [[WinIE]] や [[Gecko]] などは、 [PRE[ +- LEGEND ------------------------+ | Label: Control........ | | Label: Control........ | +---------------------------------+ ]PRE] のような既定スタイルを持っています。枠線は[Q[窪み]]です。 (Windoze の設定 dialog box などでよくでてくる、 集団化のためのあれと同じ style です。) [21] [[Opnewave SDK]]では[[要素]]の上下に[CODE(HTMLe)@en[[[hr]]]]のような線が引かれるのが既定スタイルです。 [22] >>9 は[[Microsoft Windows]]の ([[Windows 95]]以来の) [[GUI]]における[CODE(HTMLe)@en[[[fieldset]]]]相当の表現ですが、[[Microsoft Office]]は [WEAK[(確か97以来)]] [PRE(aafig)[ LEGEND ------------------------- Label: Control........ Label: Control........ ]PRE] のようになっています。 [23] >>9 は[[Microsoft Windows]]の ([[Windows 95]]以来の) [[GUI]]における[CODE(HTMLe)@en[[[fieldset]]]]相当の表現ですが、[[Microsoft Office]]は [WEAK[(確か97以来)]] [PRE(aafig)[ LEGEND ------------------------- Label: Control........ Label: Control........ ]PRE] のようになっています。 [28] [[WinIE]] の古い版では、 [CODE(HTMLa)@en[[[align]]]] [[属性]]が [CODE(HTMLe)@en[[[img]]]] [[要素]]の場合のように実装されていたそうです。 ;; [37] [CITE[IRC logs: freenode / #whatwg / 20090202]] ([TIME[2009-02-03 10:13:21 +09:00]] 版) ** 不思議解釈 [1] ''地獄変00:blockquoteはもう古い〜fieldsetの伝説(legend)!!'' ([[名無しさん]] [WEAK[2004-03-23 02:15:27 +00:00]]) [2] >>1 は[[引用]]のために (特定 [[UA]] の見た目の理由から) [CODE(HTMLe)[fieldset]] + [CODE(HTMLe)[[[legend]]]] を使おうと提案して叩かれた例。 ;; 著者が一日でこんなに叩かれましたと出してる URI がほとんど某方面なのが藁える。 [3] だけど、 >>1 みたいなことを考える人が出てくるのって、 - [[HTML 3]] の [CODE(HTMLe)[[[credit]]]] や表の [CODE(HTMLe)[[[caption]]]] に相当する要素型が無い - [CODE(HTMLe)[fieldset]] + [CODE(HTMLe)[legend]] の典型的レンダリング(謎)を CSS で気軽に(謎)実現する方法がない のが原因でしょ。それが解決されない限りまた繰り返されるだろうなあ。 (Form control 以外の集団化・見出し付けのために [CODE(HTMLe)[fieldset]] + [CODE(HTMLe)[legend]] を使うというネタはたしか外出だし。) [[#comment]] ** 他との関係 [12] [CODE(HTMLe)[[[legend]]]] 要素型は、必ず [CODE(HTMLe)[fieldset]] 要素型とセットで使用します。 [13] [CODE(HTMLe)[[[input]]]] 要素や [CODE(HTMLe)[[[button]]]] 要素 ([CODE(HTMLa)[[[type]]]] が [CODE(HTML)[[[reset]]]]) を [CODE(HTMLe)[fieldset]] 要素内で使用すると、適用範囲 (初期化される範囲) は [CODE(HTMLe)[fieldset]] 要素内に限定されます。 [14] [CODE(HTMLe)[input]] 要素 ([CODE(HTMLa)[type]] が [CODE(HTML)[[[file]]]]) は典型的に [CODE(HTMLe)[fieldset]] により (ブラウザ内部的に) 構造化されると [[ISO-HTML]] 利用者の指針 に書いてあります。 [[#comment]] ** 歴史 [25] [CODE(HTMLe)@en[[[fieldset]]]] [[要素]]は1996年7月10日の [[Cougar]] ([[HTML 4]]) [[DTD]] 案で初めて登場しました。 ;; [27] [[WinIE]] は 4.0 から実装しています。 [[WinIE 4]] の最初の公開版 (Platform Preview 英語版) は1997年4月に配布開始されています。このとき既に [CODE(HTMLe)@en[[[fieldset]]]] [[要素]]が実装されていたかは定かではありませんが、 いずれにしても >>25 より後ということになります。 一般公開されていないα版は1996年6月にできているらしいです。 その時点で実装されていたとすれば、 >>25 より前になります。 もっとも、当時 [[Microsoft]] は [[HTML WG]] に参加していたので、 [[Microsoft]] が [[HTML WG]] に提案し、かつほぼ同時に [[WinIE]] に実装した、という可能性もあります。 [26] [[Classic Mozilla]] では実装されず、 [[Gecko]] 版 [[Mozilla]] で初めて実装されたようです。 1998年11月付けの[[画面写真]]に [CODE(HTMLe)@en[[[fieldset]]]] [[要素]]の例が示されています。 ;; [CITE[NGLayout Project: Screen Shots]] ([TIME[2007-09-08 17:38:45 +09:00]] 版) - [31] [CITE[Bug 944 – FIELDSET and LEGEND don't work]] - [36] [CITE[Bug 1860 – HTML4:
Title
]] - [34] [CITE[Bug 2358 – parser: frameset terminates early]] - [35] [CITE[Bug 3854 – Pages not displayed correctly]] - [32] [CITE[Bug 6452 – HTML 4 FIELDSET (and LEGEND) display broken]] - [33] [CITE[Bug 8869 – legend has incorrect vertical positioning]] [[#comment]] ** 実装 [4] ''iCabのぺ〜じ - A氏からの手紙(FIELDSETの扱いについて)'' [[#comment]] ** 例 [19] 薬暦フォームの例 [SRC[HTML 4 17.10]] [PRE(HTML)[

Personal Information Last Name: First Name: Address: ...more personal information...
Medical History Smallpox Mumps Dizziness Sneezing ...more medical history...
Current Medication Are you currently taking any medication? Yes No If you are currently taking medication, please indicate it in the space below:
]PRE] HTML 4 仕様書は、更にスタイル・シートやスクリプトで制御子の位置を揃えたり、 色を変えたり、 [Q[Current Medication]] で [Q[Yes]] と答えた場合のみ [CODE(HTMLe)[textarea]] を有効にしたりすると更に利用者にとって分かりやすくなるであろうと指摘しています。 ([CODE(HTMLe)[[[label]]]] も使った方が良いでしょう。) [24] '''一般の見出し・本文のマーク付けに濫用した例''' [PRE(HTML bad example code)[
紀元前600年頃世界初のデリバティブ
デリバティブとは、主に(金融などから)派生した商品のことで、有名なものに先物取引、オプション取引、スワップ取引がある。その中のオプション取引(オプションとは、権利料のことで、例えば一定期間の後に決まった金額で株式などを買うことのできる権利の値段をいう)で大もうけをした人物が紀元前の600年ごろにいたという記録がある。

アリストテレスの「政治学」の中に出てくる話で、哲学者のターレスという人物が、星の観測からオリーブの大豊作を予想し、オリーブ絞り機の権利料(収穫期のオリーブ絞り機を使うことのできる権利)を買い占めて大もうけした話がある。

]PRE] ;; 出典: [CITE[株にまつわる金融の歴史・出来事・動き]] (2006年2月付け) ;; >>1 も参照。 [[#comment]] ** メモ [[#comment]] * メモ [38] [CITE[IRC logs: freenode / #whatwg / 20090817]] ([TIME[2009-10-11 15:59:52 +09:00]] 版)