#?SuikaWiki/0.9 * fieldset 要素型 (HTML, XHTML 1) [5] [DFN[[CODE(HTMLe)[fieldset]] 要素]]は、 form control や label を集団化します。 集団化すると利用者は control や label の目的を理解しやすくなります。 :[[開始タグ]]:必須 :[[終了タグ]]:必須 :[[内容模型]] (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(HTMLe)[[[button]]]] 要素の子孫を除く。 :[[属性]]: ,[CODE(HTMLa)[[[class]]]] , , ,[[級]] ,"[HTML4] %[[coreattr]], [ISO-HTML] %[[core]], [XHTML 1] [[Core]]" ,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,"[HTML4] %[[i18n]], [ISO-HTML] %i18n, [XHTML 1] [[Bi-directional Text]]" ,[CODE(HTMLa)[[[id]]]] , , ,一意識別子 ,"[HTML4] %coreattr, [ISO-HTML] %core, [XHTML 1] Core" ,[CODE(HTMLa)[[[lang]]]] , , ,[[自然言語]] ,"[HTML4] %i18n, [ISO-HTML] %i18n" ,[CODE(HTMLa)[[[xml]]:lang]] , , ,自然言語 ,[XHTML 1] [[I18N]] ,[CODE(HTMLa)[[[onclick]]]] , , , ,"[HTML4] %[[events]], [XHTML 1] [[Intrinsic Events]]" ,[CODE(HTMLa)[[[ondblclick]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events" ,[CODE(HTMLa)[[[onkeydown]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events" ,[CODE(HTMLa)[[[onkeypress]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events" ,[CODE(HTMLa)[[[onkeyup]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events" ,[CODE(HTMLa)[[[onmousedown]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events" ,[CODE(HTMLa)[[[onmouseout]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events" ,[CODE(HTMLa)[[[onmousemove]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events" ,[CODE(HTMLa)[[[onmouseover]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events" ,[CODE(HTMLa)[[[onmouseup]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events" ,[CODE(HTMLa)[[[style]]]] , , ,スタイル情報 ,"[HTML4] %coreattr, [XHTML 1] [[Style Attribute]]" ,[CODE(HTMLa)[[[title]]]] , , ,注釈的題 ,"[HTML4] %coreattr, [ISO-HTML] %core, [XHTML 1] Core" 仕様書: [[#comment]] ** 内容模型 [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]] 要素の入れ子は禁止されています。 [[#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]] ** レンダリング [8] HTML 4 仕様書は、視覚 UA は[[タブ]]付け誘導が可能、 発話 UA は発話誘導が可能だと言っています。 HTML 4 (というか HTML 3 Form) の最初期の草案ではもろにタブをマークする方法も検討されていたこともあったようですが、 最終的にレンダリングに中立な集団化に留まったのでしょう。 しかし、同じ [CODE(HTMLe)[[[form]]]] 内の近隣の [CODE(HTMLe)[[[fieldset]]]] をまとめてタブ集合として表示する UA なんて見たことがありません。 [9] [[WinIE]] や [[Gecko]] などは、 [PRE[ +- LEGEND ------------------------+ | Label: Control........ | | Label: Control........ | +---------------------------------+ ]PRE] のような既定スタイルを持っています。枠線は“窪み”です。 (Windoze の設定 dialog box などでよくでてくる、 集団化のためのあれと同じ style です。) [[#comment]] ** メモ [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]] を使うというネタはたしか外出だし。) [4] ''iCabのぺ〜じ - A氏からの手紙(FIELDSETの扱いについて)'' [[#comment]] * メモ